Проблема с привилегиями 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.

Другие вопросы по тегам