資料庫角色可以擁有多個屬性,這些屬性定義了其權限並與客戶端驗證系統互動。
只有具有 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
使用者發出額外的此類授權。無論何時哪些 CREATEROLE
使用者擁有角色的 ADMIN OPTION
都可以管理它。
如果您在文件中看到任何不正確、與您特定功能的經驗不符或需要進一步說明的內容,請使用此表格報告文件問題。