賬號權限管理
本文介紹如何在AnalyticDB PostgreSQL版中管理數(shù)據(jù)庫賬號權限。
前提條件
已創(chuàng)建數(shù)據(jù)庫賬號。詳情請參見創(chuàng)建數(shù)據(jù)庫賬號。
權限管理
創(chuàng)建完數(shù)據(jù)庫賬號后,您可以進行以下操作:
通過ALTER ROLE修改數(shù)據(jù)庫角色。
通過GRANT對數(shù)據(jù)庫對象授權。
修改數(shù)據(jù)庫角色
ALTER ROLE示例如下:
ALTER ROLE jsmith WITH PASSWORD 'passwd123'; ALTER ROLE admin VALID UNTIL 'infinity'; ALTER ROLE jsmith LOGIN; ALTER ROLE jsmith RESOURCE QUEUE adhoc; ALTER ROLE jsmith DENY DAY 'Sunday';
您也可以設置ROLE級別的服務端配置,例如search_path:
ALTER ROLE admin SET search_path TO myschema, public;
授權用戶權限
當CREATE ROLE沒有指定LOGIN屬性時,可視為GROUP(組),使用GROUP可以方便管理一批用戶的權限。創(chuàng)建一個擁有CREATEROLE和CREATEDB權限的ROLE(GROUP),叫做admin。示例如下:
CREATE ROLE admin CREATEROLE CREATEDB;
添加用戶john和sally到GROUP。示例如下:
GRANT admin TO john, sally;
從GROUP中移除用戶bob。示例如下:
REVOKE admin FROM bob;
當對GROUP進行數(shù)據(jù)庫對象授權時,屬于該GROUP的用戶都將繼承該授權。
GRANT ALL ON TABLE mytable TO admin; GRANT ALL ON SCHEMA myschema TO admin; GRANT ALL ON DATABASE mydb TO admin;
授權數(shù)據(jù)庫對象權限
當數(shù)據(jù)庫對象(庫,模式,表,視圖,序列,函數(shù)等)被創(chuàng)建時,所有權限歸屬于該對象的創(chuàng)建者(Owner)。默認只有對象Owner和RDS_SUPERUSER有權限操作該對象。當其他用戶需要相應權限來操作該對象時,需要授權。下表列出了每種對象的相應權限。
數(shù)據(jù)庫對象 | 權限 |
Tables,Views,Sequences | SELECT INSERT UPDATE DELETE RULE ALL |
External Tables | SELECT RULE ALL |
Databases | CONNECT CREATE TEMPORARY | TEMP ALL |
Functions | EXECUTE |
Procedural Languages | USAGE |
Schemas | CREATE USAGE ALL |
每種對象需要單獨授權。例如,對Database進行GRANT ALL并不代表可以訪問該Database內(nèi)部的表,只是授予了對該Database的CONNECT、CREATE和TEMP權限。
對mytable授權INSERT給jsmith。示例如下:
GRANT INSERT ON mytable TO jsmith;
對table2的col1列授權SELECT給jsmith。示例如下:
GRANT SELECT (col1) on TABLE table2 TO jsmith;
從jsmith回收mytable的所有權限。示例如下:
REVOKE ALL PRIVILEGES ON mytable FROM jsmith;
表的Owner或者RDS_SUPERUSER也可以通過如下SQL進行Owner的重新指定或者刪除Owner。
REASSIGN OWNED BY sally TO bob; DROP OWNED BY visitor;