2016-12-26 4 views
1

У меня есть вид, называемый testview в postgresql.Предоставить доступ к просмотрам в postgresql

Я создал нового пользователя под названием testuser.

Я хочу, чтобы testuser имел все привилегии для всех таблиц и представлений в базе данных.

Для этого я побежал следующие команды:

GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser; 

GRANT USAGE ON SCHEMA public TO testuser; 

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO testuser; 

TestUser теперь имеет доступ ко всем таблицам в базе данных, но если я пытаюсь запустить SELECT * FROM TestView я получаю следующее сообщение об ошибке: разрешение отказано отношение testview.

Что не так? Как testuser получает доступ к testview?

ответ

2

Я согласен, что он должен работать. С разрешениями GRANT ... ON ALL TABLES также должны включать представления.

Вы создали вид после, предоставляя привилегии testuser? Если это так, то он не имеет тех же привилегий, что и другие таблицы. Это потому, что GRANT ... ON ALL TABLES означает «на всех существующих в настоящее время таблицах». Для включения таблицы/представления, которые создают в будущем, вы можете сказать:

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO testuser; 

Или, если вы хотите, чтобы дать больше, чем SELECT, вы можете сказать ALL PRIVILEGES вместо этого.

Смежные вопросы