2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 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 替換角色名,這將更改所有角色的設定。在 IN DATABASE 中使用 ALL 實際上等同於使用命令 ALTER DATABASE ... SET ...

之後,當角色開始新的會話時,指定的 value 將成為會話預設值,覆蓋 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 的一個擴充套件。

提交更正

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