大數據就業實戰培訓 Oracle就業實戰培訓
PostgreSQL從小白到專家,是從入門逐漸能力提升的一個系列教程,內容包括對PG基礎的認知、包括安裝使用、包括角色權限、包括維護管理、、等內容,希望對熱愛PG、學習PG的同學們有幫助,歡迎持續關注CUUG PG技術大講堂。
Part 8:PG對象管理
內容1:PostgreSQL 對象權限概述
內容2:PostgreSQL 對象權限授權
內容3:PostgreSQL 查看對象權限
內容4:PostgreSQL 對象權限回收
8.1、對象權限概述
1、每個數據庫對象都有一個所有者,默認情況下,所有者擁有該對象的所有權限
2、在數據庫中所有的權限都和角色掛鉤
3、對超級用戶postgres不做權限檢查,其它用戶走ACL(Access ControL List)
4、對于數據庫對象,開始只有所有者和超級用戶可以做任何操作,其它走ACL
對象級別的權限
表級對象權限控制
列級別權限控制
序列權限控制
類型域的權限控制(域簡單來說就是自定義的帶約束的數據類型)
FDW權限控制
FS權限控制
函數權限控制
\h GRANT顯示所有可設置的訪問權限
對象權限列表
rolename=xxxx -- privileges granted to a role =xxxx -- privileges granted to PUBLIC r -- SELECT ("read") w -- UPDATE ("write") a -- INSERT ("append") d -- DELETE D -- TRUNCATE x -- REFERENCES t -- TRIGGER X -- EXECUTE U -- USAGE C -- CREATE c -- CONNECT T -- TEMPORARY arwdDxt -- ALL PRIVILEGES (for tables, varies for other objects) * -- grant option for preceding privilege /yyyy --role that granted this privilege
對象權限含義
SELECT:允許從指定表,視圖或序列的任何列或列出的特定列進行SELECT。也允許使用COPY TO。在 UPDATE或DELETE中引用現有列值也需要此權限。對于序列,此權限還允許使用currval函數。對于大對象,此權限允許讀取對象。
INSERT:允許將新行INSERT到指定的表中。如果列出了特定列,則只能在INSERT命令中為這些列分配(因 此其他列將接收默認值)。也允許COPY FROM。
UPDATE:允許更新指定表的任何列或列出的特定列,需要SELECT權限。
DELETE:允許刪除指定表中的行,需要SELECT權限。
TRUNCATE:允許在指定的表上截斷數據。
REFERENCES:允許創建引用指定表或表的指定列的外鍵約束。
TRIGGER:允許在指定的表上創建觸發器。
CREATE:對于數據庫,允許在數據庫中創建新的schema、table、index。
CONNECT:允許用戶連接到指定的數據庫。在連接啟動時檢查此權限。
TEMPORARY、TEMP:允許在使用指定數據庫時創建臨時表。
EXECUTE:允許使用指定的函數或過程以及在函數。
USAGE:對于schema,允許訪問指定模式中包含的對象;對于sequence,允許使用currval和nextval函數。對于類型和域,允許在創建表,函數和其他模式對象時使用類型或域。
ALL PRIVILEGES:一次授予所有可用權限。
8.2、對象權限授權
對象權限授權
每種類型的對象權限都不一樣,詳細可參考:
https://www.postgresql.org/docs/9.6/static/sql-grant.html
基本語法參考(表對象):
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO role_specification [, ...] [ WITH GRANT OPTION ]
授權示例
授權單個權限給用戶
GRANT SELECT ON tab_name TO role_name;
授權多個/所有權限給用戶
GRANT SELECT, UPDATE, INSERT ON tab_name TO role_name; GRANT ALL ON tab_name TO role_name;
授權某模式下所有表的查詢權限給用戶
GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO role_name;
授權列權限給用戶
GRANT SELECT (col1), UPDATE (col1) ON tab_name TO role_name;
授權所有權限給所有用戶
GRANT ALL ON tab_name TO public;
8.3、查看對象權限
查看對象權限
查看對象權限數據字典表
information_schema.table_privileges
顯示對象的訪問權限列表
\z或\dp [tablename]
查看對象權限示例
查看對象權限數據字典表
select grantor,grantee,privilege_type,is_grantable from information_schema.table_privileges where table_name='t1';
查看對象權限示例
顯示對象的訪問權限列表
\z或\dp [tablename]
8.4、對象權限回收
回收示例
回收單個權限
REVOKE SELECT ON tab_name FROM role_name;
回收多個/所有權限
REVOKE SELECT, UPDATE, INSERT ON tab_name FROM role_name;
REVOKE ALL ON tab_name FROM role_name;
回收某模式下所有表的查詢權限
REVOKE SELECT ON ALL TABLES IN SCHEMA schema_name FROM role_name;
回收列權限
REVOKE SELECT (col1), UPDATE (col1) ON tab_name FROM role_name;
回收所有權限
REVOKE ALL ON tab_name FROM public;
回收示例(特例)
任何用戶對public模式都有all的權限,為了安全可以禁止用戶對public 模式的create權限。
REVOKE CREATE ON SCHEMA public FROM public;
屬主可以取消自己在指定表上的某些權限
REVOKE UPDAE ON tab_name FROM role_name;REVOKE ALL ON tab_name FROM role_name;
屬主可以授權自己在指定表上的某些權限
GRANT ALL ON tab_name TO role_name;
以上就是Part 8 - PG對象權限管理 的內容,歡迎進群一起探討交流
QQ交流群:752027153
微信交流群:聯系客服拉你進微信PG交流群
釘釘交流群:35822460,釘釘群有專門視頻專題講解
從零開始學,一學就會,趕緊加入吧!