Шпаргалка по настройке PostgresPro-1C для 1C по схеме каждой БД свой пользователь

от автора

Программное окружение

  • Debian 12;

  • PostgreSQL для 1с 17;

  • 1С 8.3.24.1819.

NB: С наименованием СУБД наблюдается некоторая неразбериха, т.к. на сайте разработчика написано что называется данный продукт именно PostgreSQL для 1C и ничего общего с Postgres Pro не имеет. Однако, пакеты для установки называются postgrespro-1c-{version} и на других ресурсах она обычно упоминается как PostgreS[QL] Pro для 1С. Так что как именовать её «правильно» решайте сами, я выбрал назвать по имени пакета для установки.

Задача

Реализовать традиционную схему управления правами доступа в связке 1С — СУБД в которой каждая база данных принадлежит строго определённому пользователю, не имеющему доступа к другим БД.

Решение

По сути, ключевым моментом является назначение прав на использование процедур на языке Си в базе template0. Почему при создании базы не срабатывает аналогичный параметр, установленный, как полагается по правилам, в базе template1 — это надо спрашивать, наверное, в 1С.

  1. Ставим СУБД и подключаемся

    # русский язык на время установки, иначе потом вручную менять придётся export LANG=’ru_RU.UTF-8’ export LANGUAGE=’ru_RU.UTF-8’ apt-get install postgrespro-1c-{version} su - postgres psql
  2. Настраиваем общие параметры

    \password postgres пароль_администратора_СУБД -- Разрешаем менять базу template0 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0'; \c template0 -- Включаем использование серверных процедур на C UPDATE pg_language SET lanpltrusted = true WHERE lanname LIKE 'c'; \c postgres -- Запрещаем менять базу template0 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
  3. Создаём пользователя и настраиваем права

    CREATE ROLE user1c WITH LOGIN PASSWORD 'пароль для истории'; \password user1c пароль_пользователя -- право на изменение языка сообщений, иначе 1С постоянно в логи мусорит GRANT SET ON PARAMETER lc_messages TO user1c; GRANT pg_execute_server_program TO user1c;
  4. Создаём базу, временно выдав права на создание базы

    ALTER ROLE user1c CREATEDB; -- создаём базу в консоли сервера, ibcmd или ещё как-то ALTER ROLE user1c NOCREATEDB;

Если с созданием база закончено — разрешение на создание серверных процедур на языке Си из базы template0 можно отобрать назад.


ссылка на оригинал статьи https://habr.com/ru/articles/932548/