ОШИБКА: разрешение отклонено для схемы 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;
Ответы
Ответ 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;