
Смена dbowner у базы 1С на PostgreSQLСогласно check-list по настройке 1с рекомендуется «для каждой продукционной информационной базы создавать отдельного пользователя».Так же Информационная безопасность тоже требует чтобы мы работали под уникальными пользователями с каждой базой и при этом у этих пользователей нужен только минимально необходимый набор прав.Казалось бы, что может быть проще? Ну выполним аналог команды MS SQL EXECUTE sp_changedbowner 'ERP'; и готово.Но оказалось что всё не так просто, а иногда и невозможно…❗️Так повелось у многих, что создаём базы не просто из пользователя с правами SUPERUSER, а именно из под пользователя postgres.Какие есть пути решения есть:1. Сменить владельца базы ALTER DATABASE "ERP" OWNER TO "ERP"; Получаем следующие эффекты:❗️Владельцем таблиц остаётся postgres.Ок, мы не робкого десятка и умеем писать скрипты...В цикле бежим по всем таблицам и выполняем ALTER TABLE OWNER TO❗️Но при запуске 1С пишет «База данных непригодна для использования»…Дело в недостаточном разрешении для lc_messagesОк, выполняем grant set ON PARAMETER lc_messages to " ERP ";❗️И всё равно при запуске базы получаем: 42501: ERROR: must be owner of extension mchar🚫И вот тут первое нерешаемое – назначить владельца для расширения невозможно.2. REASSIGN OWNED - Команда затрагивает только объекты в текущей базе данных. Обычно её нужно выполнять в каждой базе данных, которая содержит объекты, принадлежащие удаляемой роли. Как раз то что нужно!!!Если бы мы изначально не создали базу из под пользователя postgresКоманда REASSIGN OWNED BY postgres TO ERP ❗️– не выполнится, с ошибкой: Изменить владельца объектов, принадлежащих роли postgres, нельзя, так как они нужны системе базы данных.⛔️Всё, тупик. К сожалению для баз созданных из под postgres изменить полноценно владельца невозможно!И тут решение только одно – dump/restore базы во вновь созданную, владельцем которой назначен другой пользователь без прав SUPERUSER.Ну а на будущее – после разворачивания сервера Postgr






