Postgresql

ALTER DEFAULT PRIVILEGES IN SCHEMA 與 ALTER DEFAULT PRIVILEGES FOR ROLE,有什麼區別?

  • November 23, 2021

這兩個命令的功能區別是什麼?

ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name REVOKE ALL ON FUNCTIONS FROM old_role;

ALTER DEFAULT PRIVILEGES FOR ROLE old_role IN SCHEMA schema_name 
   REVOKE ALL PRIVILEGES ON FUNCTIONS FROM old_role

他們是否實現了相同的目標,還是每個人都專門做不同的事情?如果是這樣,是什麼?

謝謝!

文件說:

如果FOR ROLE省略,則假定目前角色。

因此,第一條語句影響執行該ALTER DEFAULT PRIVILEGES語句的使用者創建的對象的預設權限,而第二條語句影響由old_role.

第一條語句將撤消以前授予的預設權限

ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name 
  GRANT EXECUTE ON FUNCTIONS TO old_role;

而第二個語句將撤消授予的權限

ALTER DEFAULT PRIVILEGES FOR ROLE old_role IN SCHEMA schema_name 
  GRANT EXECUTE ON FUNCTIONS TO old_role;

請注意,除非先前已授予此類權限,否則這兩個語句都不會執行任何操作:

為每個模式指定的預設權限將添加到特定對像類型的全域預設權限中。這意味著如果全域授予權限(預設情況下,或根據ALTER DEFAULT PRIVILEGES未指定架構的先前命令),您無法撤銷每個架構的權限。Per-schemaREVOKE僅對逆轉先前 per-schema 的影響有用GRANT

引用自:https://dba.stackexchange.com/questions/302993