?
This document uses PHP Chinese website manual Release
ALTER ROLE name [ [ WITH ] option [ ... ] ]
這里的option可以是:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| CREATEUSER | NOCREATEUSER
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| CONNECTION LIMIT connlimit
| [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'timestamp'
ALTER ROLE name RENAME TO new_name
ALTER ROLE name [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER ROLE name [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
ALTER ROLE name [ IN DATABASE database_name ] RESET configuration_parameter
ALTER ROLE name [ IN DATABASE database_name ] RESET ALL
ALTER ROLE修改一個(gè)PostgreSQL角色的屬性。
這個(gè)命令的第一個(gè)變體可以修改很多CREATE ROLE里面聲明的角色屬性,可以參閱相應(yīng)手冊頁獲取細(xì)節(jié)。所有可能的屬性都有介紹,除了增加和刪除成員關(guān)系的選項(xiàng)之外(使用GRANT和REVOKE做這件事)。 沒有在命令里提到的屬性維持它們以前的設(shè)置。數(shù)據(jù)庫超級用戶可以給任何角色改變?nèi)魏卧O(shè)置。擁有CREATEROLE權(quán)限的角色可以修改任意這些設(shè)置,但是只能給非超級用戶角色設(shè)置。普通的角色只能修改它們自己的口令。
第二個(gè)變量修改角色的名稱。數(shù)據(jù)庫超級用戶可以修改任何角色的名稱。 擁有CREATEROLE權(quán)限的角色可以給非超級用戶進(jìn)行重命名。 當(dāng)前會(huì)話的用戶是不能改名的。如果需要這么做,必須以另外一個(gè)用戶的身份連接。 因?yàn)?tt class="LITERAL">MD5加密的口令使用角色名字作為加密的鹽粒,所以, 如果口令是MD5加密的,那么給一個(gè)用戶改名會(huì)清空其口令。
保留的變體為一個(gè)配置變量更變一個(gè)角色的會(huì)話默認(rèn)值,要么是對所有的數(shù)據(jù)庫,要么是當(dāng) IN DATABASE語句被指定,僅針對命名的數(shù)據(jù)庫中的會(huì)話。 當(dāng)角色隨后開啟一個(gè)新會(huì)話,指定的值變成了會(huì)話的默認(rèn)值,重寫任何 postgresql.conf中的設(shè)置或者已從postgres 命令行接收到。 這僅在登錄時(shí)發(fā)生;執(zhí)行SET ROLE或者 SET SESSION AUTHORIZATION不會(huì)引起新的配置值設(shè)置。 為所有數(shù)據(jù)庫所設(shè)定的設(shè)置被附加到一個(gè)角色上的特定數(shù)據(jù)庫設(shè)置重寫。 超級用戶可以更改任何一個(gè)會(huì)話默認(rèn)值。有CREATEROLE權(quán)限的 角色可以為非超級用戶角色更改默認(rèn)值。普通的角色只能為自己設(shè)置默認(rèn)值。 某些配置變量不能這樣設(shè)置,或者僅在超級用戶發(fā)出命令時(shí)才能設(shè)置。
第三和第四個(gè)變體為特定的配置變量修改一個(gè)角色的會(huì)話缺省值。 在該角色隨后開始一個(gè)新的會(huì)話之后,指定的數(shù)值會(huì)覆蓋 postgresql.conf里面的或者postgres 命令行上的參數(shù),而變成會(huì)話缺省值。對于沒有LOGIN權(quán)限的角色, 會(huì)話的缺省值沒有什么意義。普通的角色可以改變自己的會(huì)話缺省。 超級用戶可以修改任何人的會(huì)話缺省。擁有CREATEROLE 權(quán)限的角色可以給非超級用戶修改缺省。有些變量不能用這個(gè)方法設(shè)置, 或者是只能由超級用戶來設(shè)置。
需要修改屬性的角色的名稱。
這些子句修改由CREATE ROLE初始設(shè)置的屬性。 要獲取更多詳細(xì)信息,請參閱CREATE ROLE參考頁。
角色的新名字。
應(yīng)設(shè)置配置變量的數(shù)據(jù)庫的名稱。
把該角色指定的配置參數(shù)缺省值設(shè)置為給定值。如果 value是DEFAULT或 等效的RESET,刪除特定角色的變量設(shè)置,這樣該 角色將在新的會(huì)話里繼承系統(tǒng)范圍的缺省值。使用RESET ALL 清理所有角色相關(guān)的設(shè)置。SET FROM CURRENT將會(huì)話的當(dāng)前 參數(shù)值保存為特定角色值。如果IN DATABASE被指定, 僅僅給定的角色和數(shù)據(jù)庫可以設(shè)置或者刪除配置參數(shù)。
特定角色變量的設(shè)置僅僅在登錄時(shí)起效;SET ROLE和 SET SESSION AUTHORIZATION不能進(jìn)行特定角色變量設(shè)置。
參閱SET和Chapter 18 獲取有關(guān)允許的參數(shù)名稱和數(shù)值的更多信息。
使用CREATE ROLE增加新角色,使用DROP ROLE刪除舊角色。
ALTER ROLE不能改變角色的成員關(guān)系??梢允褂肎RANT和REVOKE做這個(gè)事情。
使用這個(gè)命令指定一個(gè)未加密的密碼時(shí)必須小心,因?yàn)槊艽a將以明文方式傳送到服務(wù)器,并且可能被客戶端命令歷史記錄或者被服務(wù)器日志記錄。psql包含一個(gè)可以用來安全修改角色密碼的\password命令without exposing the cleartext password。
也可以把會(huì)話缺省與數(shù)據(jù)庫綁定而不是與角色綁定;參閱ALTER DATABASE。如果有沖突,那么特定于角色的設(shè)置將覆蓋特定于數(shù)據(jù)庫的設(shè)置which in turn override database-specific ones。
改變一個(gè)角色的口令:
ALTER ROLE davide WITH PASSWORD 'hu8jmn3';
改變一個(gè)角色的口令:
ALTER ROLE davide WITH PASSWORD NULL;
改變口令失效的日期,聲明口令應(yīng)該在2015年5月4日中午失效,時(shí)區(qū)比UTC早一個(gè)小時(shí):
ALTER ROLE chris VALID UNTIL 'May 4 12:00:00 2015 +1';
令一個(gè)口令永遠(yuǎn)有效:
ALTER ROLE fred VALID UNTIL 'infinity';
給予一個(gè)角色創(chuàng)建其它角色和新數(shù)據(jù)庫的能力:
ALTER ROLE miriam CREATEROLE CREATEDB;
給一個(gè)角色設(shè)置非缺省的maintenance_work_mem參數(shù)值:
ALTER ROLE worker_bee SET maintenance_work_mem = 100000;
給一個(gè)角色設(shè)置非缺省的client_min_messages 參數(shù)的特定數(shù)據(jù)庫設(shè)置:
ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;
ALTER ROLE語句是一個(gè)PostgreSQL擴(kuò)展。