Permissions

Postgresql:GRANT ALL PRIVILEGES ON DATABASE 有什麼作用?

  • February 16, 2022

我正在嘗試將給定數據庫的所有表的所有權限授予新的 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

兩個問題:

  1. 如果沒有授予 my_db 上所有表的所有權限,那麼上面的命令會做什麼?

2)將所有表的所有權限授予使用者的正確方法是什麼?(包括將來創建的所有表)

您的問題的答案來自線上 PostgreSQL 8.4 文件

  1. GRANT ALL PRIVILEGES ON DATABASE``CREATE將數據庫上的、CONNECT和權限授予TEMPORARY角色(使用者被正確地稱為角色)。這些特權實際上都不允許角色從表中讀取數據。SELECT為此需要對錶的特權。
  2. 我不確定是否有一種“正確”的方式可以將所有表上的所有權限授予角色。確保給定角色對錶具有所有權限的最佳方法是確保該角色擁有該表。預設情況下,每個新創建的對像都歸創建它的角色所有,因此如果您希望角色擁有表的所有權限,請使用該角色來創建它。

PostgreSQL 9.0 引入了以下幾乎是您想要的語法:

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

問題在於,如果您在預設“公共”模式之外的模式中創建表,這GRANT將不適用於它們。如果您確實使用非公共架構,則必須分別擁有GRANT這些架構的權限。

引用自:https://serverfault.com/questions/198002