ALTER ROLE — 變更資料庫角色
ALTER ROLErole_specification
[ WITH ]option
[ ... ] whereoption
can be: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMITconnlimit
| [ ENCRYPTED ] PASSWORD 'password
' | PASSWORD NULL | VALID UNTIL 'timestamp
' ALTER ROLEname
RENAME TOnew_name
ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] SETconfiguration_parameter
{ TO | = } {value
| DEFAULT } ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] SETconfiguration_parameter
FROM CURRENT ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] RESETconfiguration_parameter
ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] RESET ALL whererole_specification
can be:role_name
| CURRENT_ROLE | CURRENT_USER | SESSION_USER
ALTER ROLE
變更 PostgreSQL 角色的屬性。
概要中列出的此指令的第一種變體可以變更 CREATE ROLE
中可以指定的許多角色屬性。(涵蓋了所有可能的屬性,除了沒有新增或移除成員資格的選項;使用 GRANT
和 REVOKE
來完成。)指令中未提及的屬性會保留其先前的設定。資料庫超級使用者可以變更任何角色的任何這些設定,除了變更 啟動超級使用者的 SUPERUSER
屬性。具有 CREATEROLE
權限的非超級使用者角色可以變更大多數這些屬性,但僅限於已授予他們 ADMIN OPTION
的非超級使用者和非複製角色。非超級使用者不能變更 SUPERUSER
屬性,並且只有在他們自己擁有相應的屬性時才能變更 CREATEDB
、REPLICATION
和 BYPASSRLS
屬性。普通角色只能變更自己的密碼。
第二種變體會變更角色的名稱。資料庫超級使用者可以重新命名任何角色。具有 CREATEROLE
權限的角色可以重新命名已授予他們 ADMIN OPTION
的非超級使用者角色。目前的會話使用者無法重新命名。(如果您需要這樣做,請以不同的使用者連線。)因為 MD5
加密的密碼使用角色名稱作為密碼編譯 Salt,所以重新命名角色會清除其密碼(如果密碼是 MD5
加密的)。
其餘變體會變更角色的會話預設值,以用於組態變數,適用於所有資料庫,或者當指定 IN DATABASE
子句時,僅適用於命名資料庫中的會話。如果指定了 ALL
而不是角色名稱,這會變更所有角色的設定。將 ALL
與 IN DATABASE
一起使用實際上與使用指令 ALTER DATABASE ... SET ...
相同。
無論何時角色隨後啟動新的會話,指定的值都會成為會話預設值,覆寫 postgresql.conf
中存在的任何設定,或者從 postgres
命令列收到的設定。這只會在登入時發生;執行 SET ROLE
或 SET SESSION AUTHORIZATION
不會導致設定新的組態值。針對所有資料庫設定的設定會被附加到角色的資料庫特定設定覆寫。特定資料庫或特定角色的設定會覆寫所有角色的設定。
超級使用者可以變更任何人的會話預設值。具有 CREATEROLE
權限的角色可以變更已授予他們 ADMIN OPTION
的非超級使用者角色的預設值。普通角色只能為自己設定預設值。某些組態變數無法以這種方式設定,或者只有在超級使用者發出指令時才能設定。只有超級使用者才能變更所有資料庫中所有角色的設定。
name
#要變更其屬性的角色的名稱。
CURRENT_ROLE
CURRENT_USER
#變更目前使用者而不是明確識別的角色。
SESSION_USER
#變更目前的會話使用者而不是明確識別的角色。
SUPERUSER
NOSUPERUSER
CREATEDB
NOCREATEDB
CREATEROLE
NOCREATEROLE
INHERIT
NOINHERIT
LOGIN
NOLOGIN
REPLICATION
NOREPLICATION
BYPASSRLS
NOBYPASSRLS
CONNECTION LIMIT
connlimit
ENCRYPTED
] PASSWORD
'password
'PASSWORD NULL
VALID UNTIL
'timestamp
' #這些子句會修改最初由 CREATE ROLE
設定的屬性。如需更多資訊,請參閱 CREATE ROLE
參考頁面。
new_name
#角色的新名稱。
database_name
#應在其中設定組態變數的資料庫名稱。
configuration_parameter
value
#將此角色會話的預設組態參數設定為指定的值。如果 value
為 DEFAULT
,或使用等效的 RESET
,則會移除角色特定的變數設定,因此角色將繼承新會話中的系統範圍預設設定。使用 RESET ALL
清除所有角色特定的設定。 SET FROM CURRENT
將會話的目前參數值儲存為角色特定的值。如果指定了 IN DATABASE
,則僅針對給定的角色和資料庫設定或移除組態參數。
角色特定的變數設定僅在登入時生效;SET ROLE
和 SET SESSION AUTHORIZATION
不會處理角色特定的變數設定。
使用 CREATE ROLE
新增角色,並使用 DROP ROLE
移除角色。
ALTER ROLE
無法變更角色的成員資格。請使用 GRANT
和 REVOKE
來執行此操作。
使用此命令指定未加密的密碼時,必須謹慎。密碼將以明文傳輸到伺服器,並且也可能記錄在用戶端的命令歷史記錄或伺服器日誌中。psql 包含一個命令 \password
,可用於變更角色的密碼,而不會洩露明文密碼。
也可以將會話預設值綁定到特定的資料庫,而不是角色;請參閱 ALTER DATABASE。如果存在衝突,則資料庫角色特定的設定會覆蓋角色特定的設定,而角色特定的設定又會覆蓋資料庫特定的設定。
變更角色的密碼
ALTER ROLE davide WITH PASSWORD 'hu8jmn3';
移除角色的密碼
ALTER ROLE davide WITH PASSWORD NULL;
變更密碼到期日,指定密碼應於 2015 年 5 月 4 日中午到期,並使用比以下時間提前一小時的時區UTC:
ALTER ROLE chris VALID UNTIL 'May 4 12:00:00 2015 +1';
使密碼永久有效
ALTER ROLE fred VALID UNTIL 'infinity';
賦予角色管理其他角色和建立新資料庫的能力
ALTER ROLE miriam CREATEROLE CREATEDB;
為角色提供 maintenance_work_mem 參數的非預設設定
ALTER ROLE worker_bee SET maintenance_work_mem = 100000;
為角色提供 client_min_messages 參數的非預設、資料庫特定的設定
ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;
ALTER ROLE
陳述式是 PostgreSQL 擴充功能。
如果您在文件中發現任何不正確、與特定功能的使用經驗不符或需要進一步澄清的地方,請使用 此表單 回報文件問題。