ALTER ROLE更改一個角色的屬性。
簡介
前面列出的這個命令的第一種變體能夠更改 CREATE ROLE 中指定的很多角色屬性(覆蓋了所有可能的屬性,不過沒有增加和移除成員關係的選項, 如果要增加和移除成員關係可使用 GRANT 和 REVOKE)。該命令中沒有提到的屬性保持它們之前的設定。 資料庫超級使用者能夠更改任何角色的任何這些設定。具有CREATEROLE 特權的角色能夠更改除SUPERUSER,REPLICATION和 BYPASSRLS外的任何這些設定,但是只能為非超級使用者和非複製角色修改。普通角色只能更改自己的口令。
第二種變體更改該角色的名稱。資料庫超級使用者能重新命名任何角色。具有 CREATEROLE特權的角色能夠重新命名任何非超級使用者角色。當前的會話使用者不能被重新命名(如果需要這樣做,請以一個不同的使用者串連)。由於 MD5加密的口令使用角色名稱作為 salt,因此如果一個角色的口令是 MD5加密的,重新命名該角色會清空其口令。
其餘的變體用於更改一個角色的組態變數的會話預設值,可以為所有資料庫設定,或者只為IN DATABASE中指定的資料庫設定。如果指定的是 ALL而不是一個角色名稱,將會為所有角色更改該設定。把 ALL和IN DATABASE一起使用實際上和使用命令ALTER DATABASE ... SET ...相同。
只要改角色後續開始一個新會話,指定的值將會成為該會話的預設值,並且會覆蓋 postgresql.conf中存在的值或者從 postgres命令列收到的值。這隻在登入時發生,執行 SET ROLE 或者 SET SESSION AUTHORIZATION 不會導致新的配置值被設定。 對於所有資料庫設定的值會被附加到一個角色的資料庫相關的設定所覆蓋。特定資料庫或角色的設定會覆蓋為所有角色所作的設定。
超級使用者能夠更改任何人的會話預設值。具有CREATEROLE特權的角色能夠更改非超級使用者的預設值。普通角色只能為它們自己設定預設值。某些組態變數不能以這種方式設定,或者只能由一個超級使用者發出的命令設定。只有超級使用者能夠更改所有角色在所有資料庫中的設定。
文法
ALTER ROLE role_specification [ WITH ] option [ ... ]
其中option可以是:
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
其中role_specification可以是:
role_name
| CURRENT_USER
| SESSION_USER參數
name要對其屬性進行修改的角色的名稱。
CURRENT_USER修改目前使用者而不是一個顯式標識的角色。
SESSION_USER修改當前會話使用者而不是一個顯式標識的角色。
SUPERUSERNOSUPERUSERCREATEDBNOCREATEDBCREATEROLENOCREATEROLEINHERITNOINHERITLOGINNOLOGINREPLICATIONNOREPLICATIONBYPASSRLSNOBYPASSRLSCONNECTION LIMIT connlimit[ ENCRYPTED ] PASSWORD ' password'
PASSWORD NULLVALID 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 來實現。
在使用這個命令指定一個未加密口令時要多加小心。該口令將會以明文傳送到伺服器,並且它還可能會被記錄在用戶端的命令歷史或者伺服器日誌中。
也可以把一個會話預設值綁定到一個指定的資料庫而不是一個角色,詳見 ALTER DATABASE。如果出現衝突,資料庫角色相關的設定會覆蓋角色相關的設定,角色相關的又會覆蓋資料庫相關的設定。
樣本
更改一個角色的口令:
ALTER ROLE davide WITH PASSWORD 'hu8jmn3';移除一個角色的口令:
ALTER ROLE davide WITH PASSWORD NULL;更改一個口令的失效日期,指定該口令應該在 2015 年 5 月 4 日中午 (在一個比 UTC 快 1 小時的時區)到期:
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;