账号权限管理

本文介绍如何在AnalyticDB PostgreSQL版中管理数据库账号权限。

前提条件

已创建数据库账号。详情请参见创建数据库账号

权限管理

创建完数据库账号后,您可以进行以下操作:

  • 通过ALTER ROLE修改数据库角色。

  • 通过GRANT定义用户访问权限,或通过REVOKE撤销访问权限。

  • 通过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;