Postgres Выдача привилегий - PullRequest
1 голос
/ 27 мая 2020

У меня проблемы с настройкой нового пользователя в 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;

Модульный тест запускает процедуру из схемы publi c, которая ссылается на таблицы в схеме not_publi c, но сразу же выдает ошибку со следующим сообщением:

 ERROR: permission denied for schema not_public Where: PL/pgSQL function p_unit__delete_test_production() line 18 at SQL statement

I выполнил следующее для нового пользователя / получателя:

SELECT table_catalog, table_schema, table_name, privilege_type
FROM information_schema.table_privileges

и все таблицы для всех схем, упомянутых в процедуре, имеют привилегии выбора, вставки, обновления и удаления. Есть ли какой-то шаг, который мне не хватает в моих грантах? Это проблема в другом? Любая помощь приветствуется!

1 Ответ

2 голосов
/ 27 мая 2020

Попробуйте

GRANT USAGE ON SCHEMA not_public TO test_user;

Обратите внимание, что сообщение об ошибке permission denied for schema not_public находится в самой схеме, а не в конкретном c объекте внутри схемы.

Также GRANT ... ON ALL ... IN SCHEMA... работает только для объектов, которые уже существуют в этой схеме, что является частой причиной путаницы с командами postgres 'GRANT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...