支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1

ALTER ROLE

ALTER ROLE — 變更資料庫角色

概要

ALTER ROLE role_specification [ WITH ] option [ ... ]

where option can be:

      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'

ALTER ROLE name RENAME TO new_name

ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET configuration_parameter
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL

where role_specification can be:

    role_name
  | CURRENT_ROLE
  | CURRENT_USER
  | SESSION_USER

描述

ALTER ROLE 變更 PostgreSQL 角色的屬性。

概要中列出的此指令的第一種變體可以變更 CREATE ROLE 中可以指定的許多角色屬性。(涵蓋了所有可能的屬性,除了沒有新增或移除成員資格的選項;使用 GRANTREVOKE 來完成。)指令中未提及的屬性會保留其先前的設定。資料庫超級使用者可以變更任何角色的任何這些設定,除了變更 啟動超級使用者SUPERUSER 屬性。具有 CREATEROLE 權限的非超級使用者角色可以變更大多數這些屬性,但僅限於已授予他們 ADMIN OPTION 的非超級使用者和非複製角色。非超級使用者不能變更 SUPERUSER 屬性,並且只有在他們自己擁有相應的屬性時才能變更 CREATEDBREPLICATIONBYPASSRLS 屬性。普通角色只能變更自己的密碼。

第二種變體會變更角色的名稱。資料庫超級使用者可以重新命名任何角色。具有 CREATEROLE 權限的角色可以重新命名已授予他們 ADMIN OPTION 的非超級使用者角色。目前的會話使用者無法重新命名。(如果您需要這樣做,請以不同的使用者連線。)因為 MD5 加密的密碼使用角色名稱作為密碼編譯 Salt,所以重新命名角色會清除其密碼(如果密碼是 MD5 加密的)。

其餘變體會變更角色的會話預設值,以用於組態變數,適用於所有資料庫,或者當指定 IN DATABASE 子句時,僅適用於命名資料庫中的會話。如果指定了 ALL 而不是角色名稱,這會變更所有角色的設定。將 ALLIN DATABASE 一起使用實際上與使用指令 ALTER DATABASE ... SET ... 相同。

無論何時角色隨後啟動新的會話,指定的值都會成為會話預設值,覆寫 postgresql.conf 中存在的任何設定,或者從 postgres 命令列收到的設定。這只會在登入時發生;執行 SET ROLESET 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 #

將此角色會話的預設組態參數設定為指定的值。如果 valueDEFAULT,或使用等效的 RESET,則會移除角色特定的變數設定,因此角色將繼承新會話中的系統範圍預設設定。使用 RESET ALL 清除所有角色特定的設定。 SET FROM CURRENT 將會話的目前參數值儲存為角色特定的值。如果指定了 IN DATABASE,則僅針對給定的角色和資料庫設定或移除組態參數。

角色特定的變數設定僅在登入時生效;SET ROLESET SESSION AUTHORIZATION 不會處理角色特定的變數設定。

有關允許的參數名稱和值的更多資訊,請參閱 SET第 19 章

注意事項

使用 CREATE ROLE 新增角色,並使用 DROP ROLE 移除角色。

ALTER ROLE 無法變更角色的成員資格。請使用 GRANTREVOKE 來執行此操作。

使用此命令指定未加密的密碼時,必須謹慎。密碼將以明文傳輸到伺服器,並且也可能記錄在用戶端的命令歷史記錄或伺服器日誌中。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 擴充功能。

提交更正

如果您在文件中發現任何不正確、與特定功能的使用經驗不符或需要進一步澄清的地方,請使用 此表單 回報文件問題。