資料庫角色可以擁有許多屬性,這些屬性定義了其許可權並與客戶端身份驗證系統進行互動。
只有具有 LOGIN
屬性的角色才能用作資料庫連線的初始角色名。具有 LOGIN
屬性的角色可以被認為是“資料庫使用者”。要建立一個具有登入許可權的角色,請使用以下任一方法:
CREATE ROLEname
LOGIN; CREATE USERname
;
(CREATE USER
等同於 CREATE ROLE
,只是 CREATE USER
預設包含 LOGIN
,而 CREATE ROLE
不包含。)
資料庫超級使用者會繞過所有許可權檢查,除了登入權。這是一個危險的特權,不應隨意使用;最好以非超級使用者的角色來完成大部分工作。要建立新的資料庫超級使用者,請使用 CREATE ROLE
。您必須以已是超級使用者的角色來執行此操作。name
SUPERUSER
角色必須被明確授予建立資料庫的許可權(超級使用者除外,因為他們會繞過所有許可權檢查)。要建立這樣的角色,請使用 CREATE ROLE
。name
CREATEDB
角色必須被明確授予建立更多角色的許可權(超級使用者除外,因為他們會繞過所有許可權檢查)。要建立這樣的角色,請使用 CREATE ROLE
。具有 name
CREATEROLECREATEROLE
許可權的角色可以修改和刪除已授予 ADMIN
選項的 CREATEROLE
使用者的角色。當一個非超級使用者的 CREATEROLE
使用者建立新角色時,會自動執行此類授予,因此預設情況下,CREATEROLE
使用者可以修改和刪除他們建立的角色。修改角色包括使用 ALTER ROLE
可以進行的絕大多數更改,包括(例如)更改密碼。它還包括使用 COMMENT
和 SECURITY LABEL
命令對角色進行的修改。
但是,CREATEROLE
不賦予建立 SUPERUSER
角色的能力,也不賦予對已存在的 SUPERUSER
角色的任何權力。此外,CREATEROLE
不賦予建立 REPLICATION
使用者的能力,也不能授予或撤銷 REPLICATION
許可權,也不能修改這些使用者的角色屬性。但是,它允許對 REPLICATION
角色使用 ALTER ROLE ... SET
和 ALTER ROLE ... RENAME
,以及使用 COMMENT ON ROLE
、SECURITY LABEL ON ROLE
和 DROP ROLE
。最後,CREATEROLE
不授予授予或撤銷 BYPASSRLS
許可權的能力。
角色必須被明確授予啟動流複製的許可權(超級使用者除外,因為他們會繞過所有許可權檢查)。用於流複製的角色也必須具有 LOGIN
許可權。要建立這樣的角色,請使用 CREATE ROLE
。name
REPLICATION LOGIN
僅當客戶端身份驗證方法要求使用者在連線資料庫時提供密碼時,密碼才具有意義。password
和 md5
身份驗證方法使用密碼。資料庫密碼與作業系統密碼是分開的。在建立角色時使用 CREATE ROLE
指定密碼。name
PASSWORD 'string
'
預設情況下,角色會繼承其成員角色的許可權。但是,要建立一個預設不繼承許可權的角色,請使用 CREATE ROLE
。或者,可以使用 name
NOINHERITWITH INHERIT TRUE
或 WITH INHERIT FALSE
為單個授予覆蓋繼承。
角色必須被明確授予繞過所有行級安全 (RLS) 策略的許可權(超級使用者除外,因為他們會繞過所有許可權檢查)。要建立這樣的角色,請以超級使用者身份使用 CREATE ROLE
。name
BYPASSRLS
連線限制可以指定角色可以建立多少個併發連線。-1(預設值)表示無限制。在建立角色時使用 CREATE ROLE
指定連線限制。name
CONNECTION LIMIT 'integer
'
建立角色後,可以使用 ALTER ROLE
修改角色的屬性。 有關詳細資訊,請參閱 CREATE ROLE 和 ALTER ROLE 命令的參考頁。
角色還可以為 第 19 章 中描述的許多執行時配置設定設定角色特定的預設值。例如,如果您因為某種原因希望在每次連線時停用索引掃描(提示:這通常不是一個好主意),您可以使用
ALTER ROLE myname SET enable_indexscan TO off;
這將儲存設定(但不會立即設定)。在以後該角色的後續連線中,它將如同在會話開始前執行了 SET enable_indexscan TO off
一樣。您仍然可以在會話期間更改此設定;它只會作為預設值。要刪除角色特定的預設設定,請使用 ALTER ROLE
。請注意,沒有 rolename
RESET varname
LOGIN
許可權的角色所關聯的角色特定預設值相當無用,因為它們永遠不會被呼叫。
當一個非超級使用者使用 CREATEROLE
許可權建立一個角色時,新建立的角色會自動授予給建立者,就如同引導超級使用者執行了命令 GRANT created_user TO creating_user WITH ADMIN TRUE, SET FALSE, INHERIT FALSE
一樣。由於 CREATEROLE
使用者只能在擁有現有角色的 ADMIN OPTION
時才能對該角色行使特殊許可權,因此此授予足以讓 CREATEROLE
使用者管理他們建立的角色。但是,由於新角色是以 INHERIT FALSE, SET FALSE
建立的,CREATEROLE
使用者不會繼承新角色的許可權,也不能使用 SET ROLE
訪問該角色的許可權。然而,任何擁有某個角色 ADMIN OPTION
的使用者都可以將其成員資格授予任何其他使用者,因此 CREATEROLE
使用者可以透過簡單地將該角色授予自己(並設定 INHERIT
和/或 SET
選項)來獲得對該角色的訪問許可權。因此,預設不繼承許可權或預設不授予 SET ROLE
的事實是為了防止意外,而不是安全特性。還要注意,由於此自動授予是由引導超級使用者執行的,因此 CREATEROLE
使用者無法撤銷或更改它;但是,任何超級使用者都可以撤銷它、修改它,以及/或向其他 CREATEROLE
使用者發出額外的此類授予。任何時候擁有某個角色 ADMIN OPTION
的 CREATEROLE
使用者都可以管理該角色。
如果您在文件中發現任何不正確之處、與您對特定功能的實際使用經驗不符之處,或者需要進一步說明的地方,請使用 此表單 報告文件問題。