本文介绍如何在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;