Подтвердить что ты не робот

ОШИБКА: разрешение отклонено для схемы user1_gmail_com по символу 46

Мне нужно ограничить пользователя, получить доступ только к таблицам схемы particualr only. Поэтому я попробовал следующий запрос и логин как user1_gmail_com. Но при попытке просмотреть любую таблицу схем я получил следующую ошибку.

Мой запрос:

SELECT clone_schema('my_application_template_schema','user1_gmail_com');
CREATE USER user1_gmail_com WITH PASSWORD 'myloginpassword';
REVOKE  ALL ON ALL TABLES IN SCHEMA user1_gmail_com FROM PUBLIC;
GRANT SELECT ON ALL TABLES IN SCHEMA user1_gmail_com TO user1_gmail_com;

Ошибка SQL:

ERROR:  permission denied for schema user1_gmail_com at character 46
In statement:
SELECT COUNT(*) AS total FROM (SELECT * FROM "user1_gmail_com"."organisations_table") AS sub

Обновленный рабочий запрос:

SELECT clone_schema('my_application_template_schema','user1_gmail_com');
CREATE USER user1_gmail_com WITH PASSWORD 'myloginpassword';
REVOKE  ALL ON ALL TABLES IN SCHEMA user1_gmail_com FROM PUBLIC;
GRANT USAGE ON SCHEMA user1_gmail_com TO user1_gmail_com;
GRANT SELECT ON ALL TABLES IN SCHEMA user1_gmail_com TO user1_gmail_com;
4b9b3361

Ответ 1

Вам необходимо предоставить доступ не только к таблицам в схеме, но также к самой схеме.

Из руководства :

По умолчанию пользователи не могут получить доступ к каким-либо объектам в схемах, которые они не имеют. Чтобы это разрешить, владелец схемы должен предоставить привилегию ИСПОЛЬЗОВАНИЯ в схеме.

Таким образом, либо сделайте созданного пользователя владельцем схемы, либо предоставите ИСПОЛЬЗОВАНИЕ схемы для этого пользователя.

Ответ 2

Это меня смутило. Все еще не уверен, что я правильно его обрабатываю. Запустите \h grant для синтаксиса в psql. Вот как мне удалось заставить моих других пользователей и группы работать так, как мне было нужно:

GRANT ALL PRIVILEGES ON SCHEMA foo TO GROUP bar;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA foo TO GROUP bar;