使用角色的概念管理數據庫訪問權限。
角色可以是數據庫用戶和一組數據庫用戶,可擁有數據庫對象。
- 1.數據庫角色
獨立於操作系統用戶。
創建角色: create role name;
刪除角色: drop role name;
確定現有角色: select * from pg_roles; 或者\du 列出現有角色。
新安裝的數據庫默認有一個預定義角色:postgres.
給定客戶端連接可以連接的數據庫角色集,由客戶端身份驗證設置決定.
- 2. 角色屬性
這些屬性定義其權限並與客戶端身份驗證系統交互。
登錄權限(login privilege):
具有login屬性的角色才能用作數據庫連接的初始角色名稱。create role name login;
超級用戶狀態(superuser status):
數據庫超級用戶繞過所有權限檢查,但登錄權限除外. create role name superuser;
database creation
授予角色創建數據庫的權限: create role name createdb;
role creation
授予角色創建更多角色的權限: create role name createrole;
initiating replication
授予角色啓動流複製的權限: create role name REPLICATION LOGIN;
password
數據庫密碼與操作系統密碼分開 使用時創建角色時指定密碼。CREATE ROLE name PASSWORD 'string';
優秀做法:
創建具有CREATEDB和CREATEROLE權限但不是超級用戶的角色,然後將此角色用於數據庫和角色的所有日常管理.
- 3 角色成員:
可以將權限授予整個組或從組中撤銷。
先創建角色: create role name;
組角色存在後,可使用grant和revoke命令添加和刪除成員。
grant grouprole to role1...;
revoke grouprole from role1...;
數據庫不允許您設置循環成員資格循環。此外,不允許授予角色成員資格 PUBLIC。
例如:
CREATE ROLE joe LOGIN INHERIT;
CREATE ROLE admin NOINHERIT;
CREATE ROLE wheel NOINHERIT;
GRANT admin TO joe;
GRANT wheel TO admin;
組角色的成員可以通過兩種方式使用角色的權限.
設置臨時組角色: set role name;
重置角色: reset role;
刪除組角色: drop role name;
數據庫會話可以訪問組角色的權限,創建的任何數據庫對象都被組角色擁有。
成員角色會繼承組角色的權限。
用戶在角色執行時不會自動繼承權限。PostgreSQL默認爲所有角色提供 INHERIT屬性.
- 4 刪除角色:
角色可以擁有數據庫對象並且可以擁有訪問其他對象的權限。
刪除角色前,先刪除該角色擁有的任何對象或將其重新分配給其他所有者; 並且必須撤消授予該角色的任何權限。
ALTER TABLE bobs_table OWNER TO alice;
或者:
REASSIGN OWNED命令可用於將要刪除的角色所擁有的所有對象的所有權重新分配給單個其他角色.必須在包含該角色所擁有的對象的每個數據庫中運行它.
DROP OWNED不會刪除整個數據庫或表空間.
刪除已用於擁有對象的角色的最常用方法是:
REASSIGN OWNED BY doomed_role TO successor_role;
DROP OWNED BY doomed_role;
-- 在集羣
DROP ROLE doomed_role;
- 5. 默認角色:
可訪問常用的功能和信息。
角色 允許訪問
pg_read_all_settings 讀取所有配置變量,僅對超級用戶可見的變量。
pg_read_all_stats 閱讀所有pg_stat_ *視圖並使用各種與統計相關的擴展,僅對超級用戶可見的擴展。
pg_stat_scan_tables 執行可能ACCESS SHARE會對錶進行鎖定的監視函數。
pg_signal_backend 將信號發送到其他後端(例如:取消查詢,終止)。
pg_monitor 讀取/執行各種監視視圖和功能。這個角色的成員pg_read_all_settings,pg_read_all_stats和pg_stat_scan_tables。
管理員監控數據庫服務器的目的配置:
pg_monitor,pg_read_all_settings,pg_read_all_stats和pg_stat_scan_tables角色,它們授予一組公共權限,允許角色讀取通常僅限於超級用戶的各種有用的配置設置,統計信息和其他系統信息。
管理員可以使用GRANT命令向用戶授予對這些角色的訪問權限:
GRANT pg_signal_backend TO admin_user;