資料庫角色與存取控制

資料庫設計

Lis Sulmont

Curriculum Manager

對 view 授與與撤銷存取權

GRANT privilege(s)REVOKE privilege(s)

ON object

TO roleFROM role

  • 權限: SELECTINSERTUPDATEDELETE 等。
  • 物件: table、view、schema 等。
  • 角色: 單一資料庫使用者或使用者群組
GRANT UPDATE ON ratings TO PUBLIC; 
REVOKE INSERT ON films FROM db_user; 
資料庫設計

資料庫角色

  • 管理資料庫存取權限
  • 資料庫角色是一個包含以下資訊的實體:
    • 定義角色的權限
      • 可以登入嗎?
      • 可以建立資料庫嗎?
      • 可以寫入資料表嗎?
    • 與用戶端驗證系統互動
      • 密碼
  • 角色可指派給一或多位使用者
  • 角色在資料庫叢集安裝中是全域的
資料庫設計

建立角色

  • 空白角色
CREATE ROLE data_analyst;
  • 設定部分屬性的角色
CREATE ROLE intern WITH PASSWORD 'PasswordForIntern' VALID UNTIL '2020-01-01';
CREATE ROLE admin CREATEDB;
ALTER ROLE admin CREATEROLE;
1 http://bit.ly/postgresql_attributes
資料庫設計

對角色執行 GRANT 與 REVOKE 權限

GRANT UPDATE ON ratings TO data_analyst;
REVOKE UPDATE ON ratings FROM data_analyst;

PostgreSQL 可用的權限包括:

  • SELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGERCREATECONNECTTEMPORARYEXECUTEUSAGE
1 http://bit.ly/postgresql_privileges
資料庫設計

使用者與群組(皆為角色)

  • 角色是一種可作為使用者與(或)群組的實體
    • 使用者角色
    • 群組角色

外圈為群組角色,內圈三個為使用者角色的示意圖

資料庫設計

使用者與群組(皆為角色)

群組角色

CREATE ROLE data_analyst;

使用者角色

CREATE ROLE intern WITH PASSWORD 'PasswordForIntern' VALID UNTIL '2020-01-01';
資料庫設計

使用者與群組(皆為角色)

群組角色

CREATE ROLE data_analyst;

使用者角色

CREATE ROLE alex WITH PASSWORD 'PasswordForIntern' VALID UNTIL '2020-01-01';

GRANT data_analyst TO alex;
REVOKE data_analyst FROM alex;
資料庫設計

常見 PostgreSQL 角色

角色 允許的存取
pg_read_all_settings 讀取所有組態變數,即便是通常只有超級使用者可見的變數。
pg_read_all_stats 讀取所有 pg_stat_* 檢視並使用各種統計相關擴充套件,即便通常只有超級使用者可見。
pg_signal_backend 向其他後端傳送訊號(例如:取消查詢、終止)。
More... More...
1 http://bit.ly/default_roles_postgresql
資料庫設計

角色的優點與風險

優點

  • 刪除使用者後,角色仍可保留
  • 可在建立使用者帳號前先建立角色
  • 為 DBA 節省時間

風險

  • 有時角色可能給特定使用者過多權限
    • 你需要留意
資料庫設計

一起來練習吧!

資料庫設計

Preparing Video For Download...