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
加密的密碼使用角色名稱作為加密鹽,因此如果密碼是 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
#將指定組態參數的這個角色(role)工作階段預設值,設定為給定的值。如果 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 擴充功能。
如果您在文件中發現任何不正確之處、與您使用特定功能的體驗不符或需要進一步說明,請使用此表單回報文件問題。