Смена dbowner у базы 1С на PostgreSQL — 8 июня 2026 г. в 10:35:05.783
Смена 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. Ну а на будущее – после разворачивания сервера PostgreSQL нужно первым же делом создать себе нового пользователя с правами SUPERUSER и работать под ним, а Супер-SUPERUSER postgres оставить на крайний случай прописав ему например доступ только по 127.0.0.1 в pg_hba.conf

