Permissions
Postgresql:GRANT ALL PRIVILEGES ON DATABASE 有什麼作用?
我正在嘗試將給定數據庫的所有表的所有權限授予新的 postgres 使用者(不是所有者)。似乎
GRANT ALL PRIVILEGES ON DATABASE my_db TO new_user;
沒有這樣做。成功執行所述命令後(作為 postgres 使用者),我得到以下 new_user :$ psql -d my_db my_db => SELECT * FROM a_table_in_my_db; ERROR: permission denied for relation a_table_in_my_db
兩個問題:
- 如果沒有授予 my_db 上所有表的所有權限,那麼上面的命令會做什麼?
2)將所有表的所有權限授予使用者的正確方法是什麼?(包括將來創建的所有表)
您的問題的答案來自線上 PostgreSQL 8.4 文件。
GRANT ALL PRIVILEGES ON DATABASE``CREATE
將數據庫上的、CONNECT
和權限授予TEMPORARY
角色(使用者被正確地稱為角色)。這些特權實際上都不允許角色從表中讀取數據。SELECT
為此需要對錶的特權。- 我不確定是否有一種“正確”的方式可以將所有表上的所有權限授予角色。確保給定角色對錶具有所有權限的最佳方法是確保該角色擁有該表。預設情況下,每個新創建的對像都歸創建它的角色所有,因此如果您希望角色擁有表的所有權限,請使用該角色來創建它。
PostgreSQL 9.0 引入了以下幾乎是您想要的語法:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO new_user;
問題在於,如果您在預設“公共”模式之外的模式中創建表,這
GRANT
將不適用於它們。如果您確實使用非公共架構,則必須分別擁有GRANT
這些架構的權限。