管理用户权限

更新时间:

默认情况下,普通用户没有任何权限。高权限用户(包括初始账号)可以为普通用户授予数据库对象的操作权限。

给用户授权,可采用以下两种方式:

  • 为用户授予数据库对象的操作权限。

  • 基于角色为用户授权。

    此授权方式可简化多个用户的权限管理操作。例如,当您需要将某个表的读权限授予多个用户时,只要将表的读权限授予角色,再将角色授予多个用户。

授予数据库对象的操作权限

当数据库对象(库,模式,表,视图,序列,函数等)被创建时,所有权限归属于该对象的创建者(Owner)。默认只有对象OwnerRDS_SUPERUSER有权限操作该对象。当其他用户需要相应权限来操作该对象时,需要授权。

下表列出了每种对象的相应权限。

数据库对象

权限

Tables,Views,Sequences

SELECT INSERT UPDATE DELETE RULE ALL

Table Column

SELECT INSERT UPDATE

External Tables

SELECT RULE ALL

Databases

CONNECT CREATE TEMPORARY | TEMP ALL

Functions

EXECUTE

Procedural Languages

USAGE

Schemas

CREATE USAGE ALL

重要

每种对象需要单独授权。例如,对Database授予ALL权限(GRANT ALL)并不代表可以访问该Database内部的所有表,只是授予了对该DatabaseCONNECT、CREATETEMP权限。

  • 将表mytableINSERT权限授权给jsmith。示例如下:

    GRANT INSERT ON mytable TO jsmith;
  • myschema中所有表的SELECT、TRUNCATE权限授权给jsmith。示例如下:

    GRANT SELECT,TRUNCATE ON ALL TABLES IN SCHEMA myschema TO jsmith;
  • 将表mytable col1列的SELECT权限授权给jsmith。示例如下:

    GRANT SELECT (col1) on TABLE mytable TO jsmith;
  • jsmith回收表mytable的所有权限。示例如下:

    REVOKE ALL PRIVILEGES ON mytable FROM jsmith;

基于角色的授权

基于角色为用户授权,具体指创建角色,为角色授权,再将角色授予一个或多个用户。完成后,用户将继承角色的所有权限。下文以一个示例介绍基于角色授权的完整过程。

  1. 创建一个拥有CREATEROLECREATEDB权限的角色,名称为admin。

CREATE ROLE admin CREATEROLE CREATEDB;
  1. 将角色admin的成员资格授予用户john、sallybob。

GRANT admin TO john, sally, bob;
  1. 移除用户bob的角色admin成员资格。

REVOKE admin FROM bob;
  1. 对角色admin授予数据库对象的权限。具有角色admin的用户都将继承该权限。

GRANT ALL ON TABLE mytable TO admin;
GRANT ALL ON SCHEMA myschema TO admin;
GRANT ALL ON DATABASE mydb TO admin;

常见问题

如何授予DROP TABLE权限

删除表的权限无法通过GRANT命令授予用户。但表或Schema的所有者(Owner)可以删除表。

高权限用户、表或Schema的所有者,可以将表或Schema的所有者(Owner)变更为目标用户,使目标用户能够删除表。

-- 将表mytable的所有者变更为new_owner。new_owner可以删除表mytable。
ALTER Table mytable OWNER TO new_owner; 

-- 将myschema的所有者变更为new_owner。new_owner不仅可以删除表mytable,还可以删除myschema中的所有表。
ALTER SCHEMA myschema OWNER TO new_owner; 

如果多个用户都需要删除同一张表的权限,您可以利用角色权限继承的特性,将表或Schema的所有者(Owner)变更某个角色,再将这个角色授予多个用户。

-- 创建一个角色new_role,用于下文的所有者变更。
CREATE ROLE new_role; 

-- 将表mytable的所有者变更为new_role。new_role可以删除表mytable。
ALTER Table mytable OWNER TO new_role; 

-- 将myschema的所有者变更为new_role。new_role不仅可以删除表mytable,还可以删除myschema中的所有表。
ALTER SCHEMA myschema OWNER TO new_role; 

-- 将用户myuser添加为new_role的成员,继承new_role的权限。
GRANT new_role To myuser; 

相关文档