支援的版本: 目前 (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 加密的密碼使用角色名稱作為加密鹽,因此如果密碼是 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 #

將指定組態參數的這個角色(role)工作階段預設值,設定為給定的值。如果 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 擴充功能。

提交更正

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