PostgreSQL數據庫系列之十二:權限管理

權限管理概述

當初始化PG數據庫後,它自動有會有一個超級用戶,通常這個超級用戶的名稱與初始化PG數據庫時的操作系統用戶名相同。比如你在Windows操作系統裏以Administrator管理員部署,那麼PG數據庫也將會有一個Administrator(※ 大小寫嚴格區分)超級用戶作爲超級管理員。

通常來說,DBA不會將數據庫超級管理員提供給開發人員部署到業務系統配置文件,而是額外創建相應權限與用途的賬號給開發人員。此時就需要對數據庫權限管理有充分的認識才可以避免刪庫跑路的問題。

權限管理類型

PostgreSQL數據庫中的用戶中有兩種權限:

  • 角色/用戶在CREATE USER創建時賦予權限,ALTER USER方式變更權限;

    • SUPERUSER => 數據庫的超級用戶擁有該數據庫的所有權限
    • CREATEDB => 角色要想創建數據庫,必須明確賦予創建數據庫的屬性(包含變更與刪除權限)
    • CREATEROLE => 一個角色要想創建更多角色,必須明確給予創建角色的屬性
    • LOGIN => 登錄的權限
    • REPLICATION => 專門用於執行復制動作的權限
  • 角色/用戶在GRANT方式賦予權限,REVOKE方式撤銷權限;

    • SELECT => 允許從指定表,視圖或序列的任何列或列出的特定列進行SELECT。
    • INSERT => 允許將新行INSERT到指定的表中。如果指定特定列,那麼其它列將以默認值寫入。
    • UPDATE => 允許更新指定表的任何列或列出的特定列,需要SELECT權限。
    • DELETE => 允許刪除指定表中的行,需要SELECT權限。
    • TRUNCATE => 允許在指定的表上創建觸發器。
    • REFERENCES => 允許創建引用指定表或表的指定列的外鍵約束。
    • TRIGGER => 允許在指定的表上創建觸發器。
    • CREATE => 對於數據庫,允許在數據庫中創建新的schema、table、index。
    • CONNECT => 允許用戶連接到指定的數據庫。在連接啓動時檢查此權限。
    • TEMPORARY => 允許在使用指定數據庫時創建臨時表。
    • EXECUTE => 允許使用指定的函數或過程以及在函數。
    • USAGE => 對於schema,允許訪問指定模式中包含的對象;對於sequence,允許使用currval和nextval函數。對於類型和域,允許在創建表,函數和其他模式對象時使用類型或域。
    • ALL PRIVILEGES => 一次授予所有可用權限。

權限管理命令參考

1. 用戶創建與變更密碼

# 創建複製用戶
CREATE USER ericzhong REPLICATION LOGIN ENCRYPTED PASSWORD 'ericzhong';

# 變更用戶密碼
ALTER USER ericzhong WITH ENCRYPTED password '123456';

2. 表對象權限授權

#單表讀寫授權:授權test賬號可以訪問schema爲test的t1表
grant select,insert,update,delete on test.t1 to test;
#所有表授權:授權test賬號可以訪問schema爲test的所有表
grant select,insert,update,delete on all tables in schema test to test;

3. 表對象指定列權限授權

#列授權,授權指定列(test schema下的t1表的name列)的更新權限給test用戶
grant update (name) on test.t1 to test;
#指定列授不同權限,test schema下的t1表,查看更新name、id字段,插入name字段
grant select (name,id),update (name,id),insert(name) on test.t1 to test;

4. 序列屬性授權

#序列(自增鍵)屬性授權,指定test schema下的seq_id_seq 給test用戶
grant select,update on sequence test.seq_id_seq to test;
#序列(自增鍵)屬性授權,給用戶test授權test schema下的所有序列
grant select,update on all sequences in schema test to test;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章