天天看點

PG入門(3)postgreSQL使用者角色和權限管理

使用者角色管理

建立使用者角色

create user cjr LOGIN;
create role cjr1 CREATEDB;
create role cjr2 superuser;
create user cjr3 encrypted password '123456' valid until '2022-10-28';
create user admin  with SUPERUSER  password '123'; 

注: 屬性LOGIN、SUPERUSER和CREATEROLE被視為特殊權限,它們不會像其它資料庫對象的普通權限那樣被繼承。
加了WITH ADMIN OPTION 則允許被授予的使用者繼續将權限授予給其他人。
user\role差別
user 擁有login登陸資料庫權限的role      
PG入門(3)postgreSQL使用者角色和權限管理

修改使用者

postgres=# alter user admin with password '1234';
通過 \help alter user      

删除使用者

drop user username ;
drop role rolename; 
DROP ROLE IF EXISTS      

權限管理

每個資料庫對象都有一個所有者,預設情況下,所有者擁有該對象的所有權限
在資料庫中所有的權限都和角色挂鈎,postgresql權限分為兩部分:
“系統權限”或者資料庫使用者的屬性
 資料庫對象上的操作權限(内置權限)

對超級使用者postgres不做權限檢查,其它使用者走ACL(Access ControL List)
對于資料庫對象,開始隻有所有者和超級使用者可以做任何操作,其它走ACL      
PG入門(3)postgreSQL使用者角色和權限管理
PG入門(3)postgreSQL使用者角色和權限管理
PG入門(3)postgreSQL使用者角色和權限管理
可通過以下方式禁止使用者登入
ALTER ROLE c WITH NOLOGIN;

INHERIT該屬性使組成員擁有組的所有權限
ALTER ROLE      

執行個體權限

主要由pg_hba.conf來控制,例如 :
TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 trust
host all postgres 0.0.0.0/0 reject
host all all 0.0.0.0/0 md5

以上配置的解釋
允許任何本地使用者無密碼連接配接任何資料庫
不允許postgres使用者從任何外部位址連接配接任何資料庫
允許其他任何使用者從外部位址通過密碼連接配接任何資料庫      

庫級别權限

包括允許連接配接資料庫,允許在資料庫中建立schema。
預設情況下,資料庫在建立後
允許public角色連接配接,即允許任何人連接配接
不允許除了超級使用者和owner之外的任何人在資料庫中建立schema
會自動建立名為public 的schema,這個schema的all權限已經賦予給public角色即允許任何人在裡面建立對象      

shema級别權限

包括允許檢視schema中的對象,允許在schema中建立對象。
預設情況下建立的schema的權限不會賦予給public角色
除了超級使用者和owner,任何人都沒有權限檢視schema中的對象或者在schema中建立對象      

賦予權限

GRANT示例:
GRANT ALL ON database dbname TO rolename;  
GRANT UPDATE ON tabname TO demo_role; 
GRANT SELECT ON ALL TABLES IN SCHEMA schemaname to rolename; 
GRANT ALL ON tabname TO rolename;  
GRANT ROLE1 TO USER1; (注:角色的屬性不會授予使用者)
GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
GRANT SELECT (col1), UPDATE (col1) ON mytable TO miriam_rw;  #列授權      

檢視權限

顯示角色屬性(包含系統權限)
\du 或\du+ [username] 
檢視系統表 select * from pg_roles|pg_user; 
檢視某使用者或角色的權限
select * from information_schema.table_privileges where grantee='repuser';
顯示對象的通路權限清單
 \z或\dp [tablename]      

回收權限

REVOKE
文法格式如下:
REVOKE permission_type ON table_name FROM user_name;
其中permission_type和table_name含義與GRANT指令中相同
\h revoke

示例:
REVOKE ALL ON accounts FROM PUBLIC;
其含義為:對所有角色(PUBLIC)撤銷在accounts對象上的所有權限(ALL)      
PG入門(3)postgreSQL使用者角色和權限管理

權限實驗

appadmin下app1無法使用appadmin使用者建立的表

PG入門(3)postgreSQL使用者角色和權限管理

set role appadmin;後可以使用了

PG入門(3)postgreSQL使用者角色和權限管理