ALTER DEFAULT PRIVILEGES — 定義預設存取權限
ALTER DEFAULT PRIVILEGES [ FOR { ROLE | USER }target_role
[, ...] ] [ IN SCHEMAschema_name
[, ...] ]abbreviated_grant_or_revoke
whereabbreviated_grant_or_revoke
is one of: GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN } [, ...] | ALL [ PRIVILEGES ] } ON TABLES TO { [ GROUP ]role_name
| PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON SEQUENCES TO { [ GROUP ]role_name
| PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTIONS | ROUTINES } TO { [ GROUP ]role_name
| PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { USAGE | ALL [ PRIVILEGES ] } ON TYPES TO { [ GROUP ]role_name
| PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { { USAGE | CREATE } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMAS TO { [ GROUP ]role_name
| PUBLIC } [, ...] [ WITH GRANT OPTION ] REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN } [, ...] | ALL [ PRIVILEGES ] } ON TABLES FROM { [ GROUP ]role_name
| PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON SEQUENCES FROM { [ GROUP ]role_name
| PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTIONS | ROUTINES } FROM { [ GROUP ]role_name
| PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON TYPES FROM { [ GROUP ]role_name
| PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { USAGE | CREATE } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMAS FROM { [ GROUP ]role_name
| PUBLIC } [, ...] [ CASCADE | RESTRICT ]
ALTER DEFAULT PRIVILEGES
允許您設定將套用到未來建立的物件的權限。(它不會影響已存在物件的權限。)權限可以全域設定(即,針對目前資料庫中建立的所有物件),或僅針對在指定結構描述中建立的物件。
雖然您可以變更您自己的預設權限以及您身為成員的角色預設權限,但在物件建立時,新的物件權限僅受目前角色的預設權限影響,並且不會從目前角色所屬的任何角色繼承。
如第 5.8 節中所述,任何物件類型的預設權限通常會授予物件擁有者所有可授予的權限,並且也可能授予某些權限給 PUBLIC
。但是,可以使用 ALTER DEFAULT PRIVILEGES
變更此行為,以變更全域預設權限。
目前,只能變更結構描述、資料表(包括檢視表和外部資料表)、序列、函數和類型(包括網域)的權限。對於此指令,函數包括彙總和程序。FUNCTIONS
和 ROUTINES
這兩個詞在此指令中是等效的。(ROUTINES
是函數和程序一起使用的標準術語,因此是較佳的選擇。在較早的 PostgreSQL 版本中,只允許使用 FUNCTIONS
這個詞。無法單獨設定函數和程序的預設權限。)
針對每個結構描述指定的預設權限會加到特定物件類型的全域預設權限中。這表示如果權限是全域授予的(預設情況下,或根據先前的 ALTER DEFAULT PRIVILEGES
指令,該指令未指定結構描述),則您無法撤銷每個結構描述的權限。每個結構描述的 REVOKE
僅適用於反轉先前每個結構描述 GRANT
的效果。
target_role
變更由 target_role
建立的物件的預設權限,如果未指定,則變更目前角色的預設權限。
schema_name
現有結構描述的名稱。如果指定,則變更之後在該結構描述中建立的物件的預設權限。如果省略 IN SCHEMA
,則變更全域預設權限。設定結構描述的權限時,不允許使用 IN SCHEMA
,因為結構描述不能巢狀。
role_name
要授予或撤銷權限的現有角色名稱。此參數,以及 abbreviated_grant_or_revoke
中的所有其他參數,其作用方式與 GRANT 或 REVOKE 下描述的方式相同,但一個是設定一整類物件的權限,而不是特定的命名物件。
使用 psql 的 \ddp
指令來取得關於預設權限現有分配的資訊。權限顯示的意義與 第 5.8 節中針對 \dp
說明的相同。
如果您想要刪除已變更其預設權限的角色,則必須反轉對其預設權限所做的變更,或使用 DROP OWNED BY
來刪除該角色的預設權限項目。
授予所有人 SELECT 權限,以用於您隨後在結構描述 myschema
中建立的所有資料表(和檢視表),並允許角色 webuser
也可以 INSERT 到其中
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT ON TABLES TO PUBLIC; ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT INSERT ON TABLES TO webuser;
撤銷上述操作,以便隨後建立的資料表不會擁有比正常情況更多的權限
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE SELECT ON TABLES FROM PUBLIC; ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE INSERT ON TABLES FROM webuser;
移除通常在函數上授予的公用 EXECUTE 權限,以用於角色 admin
隨後建立的所有函數
ALTER DEFAULT PRIVILEGES FOR ROLE admin REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
但請注意,您無法透過僅限於單一結構描述的指令來達成該效果。此指令沒有任何作用,除非它正在撤銷相符的 GRANT
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
這是因為每個結構描述的預設權限只能將權限新增到全域設定中,而不能移除全域設定授予的權限。
SQL 標準中沒有 ALTER DEFAULT PRIVILEGES
陳述式。
如果您在說明文件中發現任何不正確、與您使用特定功能時的體驗不符或需要進一步釐清之處,請使用此表單來報告說明文件問題。