Ошибка PostgreSQL 42501 insufficient_privilege: ошибка прав доступа
СУБД блокирует выполнение операции из-за нехватки прав у текущего пользователя базы данных:
ERROR: permission denied for table my_table
-- либо:
ERROR: permission denied for sequence my_table_id_seq
-- либо:
ERROR: must be owner of table my_table
SQLSTATE: 42501В 1С сбой происходит при старте базы данных, попытке реструктуризации или выполнении регламентных заданий под служебной учетной записью.
1. Проверка текущих прав пользователя на объекты
-- Проверка прав на таблицу
SELECT grantee, privilege_type
FROM information_schema.role_table_grants
WHERE table_name = 'my_table';
-- Проверка владельца таблицы
SELECT tablename, tableowner
FROM pg_tables
WHERE tablename = 'my_table';2. Выдача полного пула прав для учетной записи 1С:Предприятие
Пользователь СУБД, под которым сервер 1С подключается к PostgreSQL, должен обладать полными правами на целевую базу и схему public:
-- Выполнять под суперпользователем postgres:
GRANT ALL PRIVILEGES ON DATABASE ib_database TO usr1cv8;
-- Подключение к самой базе и выдача прав на схемы и объекты:
\c ib_database
GRANT ALL ON SCHEMA public TO usr1cv8;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO usr1cv8;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO usr1cv8;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO usr1cv8;3. Настройка прав по умолчанию на будущие таблицы
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT ALL ON TABLES TO usr1cv8;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT ALL ON SEQUENCES TO usr1cv8;4. Смена владельца базы и таблиц (если объекты созданы другим пользователем)
-- Смена владельца базы
ALTER DATABASE ib_database OWNER TO usr1cv8;
-- Массовая смена владельца всех таблиц схемы
REASSIGN OWNED BY old_user TO usr1cv8; Частые вопросы (FAQ)
Почему после GRANT ALL ON ALL TABLES пользователь все равно получает permission denied?
Пользователю может не хватать прав на использование схемы (USAGE). Обязательно выполните: GRANT USAGE, CREATE ON SCHEMA public TO username;.
Нужны ли пользователю СУБД для 1С права суперпользователя (SUPERUSER)?
Нет, права SUPERUSER не требуются для обычной работы. Достаточно прав владельца базы данных (OWNER) и прав CREATEDB (для возможности создания новых информационных баз через консоль администрирования 1С).
Почему возникает permission denied for sequence при INSERT?
При вставке строк со столбцами serial / identity СУБД вызывает функцию nextval(), требующую отдельных прав на объект последовательности: GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO username;.
Что такое Row-Level Security (RLS) и может ли оно вызывать 42501?
Да, если на таблице включена политика RLS (ALTER TABLE tbl ENABLE ROW LEVEL SECURITY), операции SELECT/UPDATE/DELETE для строк, не подпадающих под разрешающие правила USING, будут отклоняться СУБД.