Проблема с привилегиями Postgres
У меня возникают проблемы с настройкой нового пользователя в postgres, и отчасти это, вероятно, связано с моими знаниями о том, как все работает за кулисами в postgres. Я использую TestBox и Lucee для запуска модульных тестов, и все работает должным образом под суперпользователем postgres, но после создания нового пользователя и предоставления привилегий модульный тест не работает
Вот мой код:
CREATE USER test_user WITH PASSWORD 'postgres';
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA not_public TO test_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO test_user;
GRANT EXECUTE ON ALL PROCEDURES IN SCHEMA public TO test_user;
GRANT EXECUTE ON ALL PROCEDURES IN SCHEMA not_public TO test_user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO test_user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA not_public TO test_user;
Модульный тест запускает процедуру из общедоступной схемы, которая ссылается на таблицы в схеме not_public, но немедленно выдает ошибку со следующим сообщением:
ERROR: permission denied for schema not_public Where: PL/pgSQL function p_unit__delete_test_production() line 18 at SQL statement
Я выполнил следующее для нового пользователя / получателя гранта:
SELECT table_catalog, table_schema, table_name, privilege_type
FROM information_schema.table_privileges
и все таблицы для всех схем, упомянутых в процедуре, имеют привилегии выбора, вставки, обновления и удаления. Есть ли шаг, который мне не хватает в моих грантах? Это проблема в другом? Любая помощь приветствуется!
1 ответ
Пытаться
GRANT USAGE ON SCHEMA not_public TO test_user;
Обратите внимание, что сообщение об ошибке permission denied for schema not_public
находится в самой схеме, а не в конкретном объекте внутри схемы.
Также GRANT ... ON ALL ... IN SCHEMA...
работает только с объектами, которые уже существуют в этой схеме, что является частой причиной путаницы с командами GRANT postgres.