本文介紹如何在AnalyticDB PostgreSQL版中管理資料庫帳號許可權。
前提條件
已建立資料庫帳號。詳情請參見建立資料庫帳號。
許可權管理
建立完資料庫帳號後,您可以進行以下操作:
通過ALTER ROLE修改資料庫角色。
通過GRANT對資料庫物件授權。
修改資料庫角色
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可以方便管理一批使用者的許可權。建立一個擁有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進行資料庫物件授權時,屬於該GROUP的使用者都將繼承該授權。
GRANT ALL ON TABLE mytable TO admin; GRANT ALL ON SCHEMA myschema TO admin; GRANT ALL ON DATABASE mydb TO admin;
授權資料庫物件許可權
當資料庫物件(庫,模式,表,視圖,序列,函數等)被建立時,所有許可權歸屬於該對象的建立者(Owner)。預設只有對象Owner和RDS_SUPERUSER有許可權操作該對象。當其他使用者需要相應許可權來操作該對象時,需要授權。下表列出了每種對象的相應許可權。
資料庫物件 | 許可權 |
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內部的表,只是授予了對該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;