系统权限

Oracle数据库迁移或进行大规模权限管理时,逐个为用户授予对象或Schema的访问权限操作繁琐。为简化此过程,PolarDB提供兼容Oracle风格的系统权限(SYSTEM PRIVILEGE)体系。通过单条命令,可为用户授予对某一类对象(如所有表、所有视图)的全局操作权限,从而提升数据库运维和管理效率。

适用范围

您的PolarDB PostgreSQL版(兼容Oracle)集群的修订版本需为2.0.14.18.37.0及以上

说明

您可在控制台查看内核小版本号,也可以通过SHOW polardb_version;语句查看。如未满足内核小版本要求,请升级内核小版本

启用并使用系统权限

以下流程介绍如何完成从启用功能、创建用户、授予权限到最终验证的全过程。

步骤一:启用系统权限功能

系统权限功能默认关闭,使用前需前往PolarDB控制台配置与管理 > 参数配置页面来开启polar_enable_system_privilege参数

步骤二:授予系统权限

前置条件

仅支持以下三类用户执行GRANT系统权限的语句:

  • 高权限账号

  • 被授予GRANT ANY PRIVILEGE权限的普通账号

  • 被授予某项系统权限且带有WITH ADMIN OPTION普通账号(仅能转授其拥有的该项权限)。

语法说明

GRANT sys_priv1 [, sys_priv2 ...] TO my_user_or_role1 [, my_user_or_role2 ...] [ WITH ADMIN OPTION ];
  • 一次可以对一到多个用户或角色授予一到多种系统权限。

  • 系统权限sys_priv有多种权限种类可以选择,具体的权限种类及其作用,请参考系统权限

  • 如果指定WITH ADMIN OPTION选项,则被授权的用户或角色可以将该权限继续授权给其他用户或角色,意味着该权限可以传播。

使用示例

为开发人员dev_user授予在任何Schema下创建表和查询任何表的权限。

  1. 创建一个用于测试的普通账号

    CREATE USER dev_user WITH PASSWORD 'Your_Secure_Password123';
  2. dev_user授予跨Schema创建表和查询表的系统权限。

    GRANT CREATE ANY TABLE, SELECT ANY TABLE TO dev_user;
  3. (可选)如果希望dev_user也能将这些权限授予其他用户,可在授权时附加 WITH ADMIN OPTION

    -- 授予 dev_user 权限,并允许其将这些权限转授给其他用户
    GRANT CREATE ANY TABLE, SELECT ANY TABLE TO dev_user WITH ADMIN OPTION;

步骤三:验证权限生效

确认dev_user已获得预期的权限。

  1. 使用dev_user账号重新连接数据库。

  2. 尝试在一个非同名Schema下创建表并插入数据。

    CREATE TABLE public.my_test_table (id INT);
    INSERT INTO public.my_test_table VALUES (1);
  3. 尝试查询该表,验证 SELECT ANY TABLE 权限。

    SELECT * FROM public.my_test_table;

    预期返回结果:

     id 
    ----
      1

如果以上操作均成功执行,说明系统权限已正确生效。

步骤四:管理与查询权限

查看或撤销已授予的系统权限。

查询权限

  • 使用DBA_SYS_PRIVS视图查询所有用户拥有的系统权限。

    说明

    查询特定用户时,需将指定用户名转换为全大写形式。

    -- 由高权限账号执行
    SELECT GRANTEE, PRIVILEGE, ADMIN_OPTION FROM DBA_SYS_PRIVS WHERE GRANTEE = 'DEV_USER';

    预期返回结果如下:

     grantee  |    privilege     | admin_option 
    ----------+------------------+--------------
     DEV_USER | CREATE ANY TABLE | YES
     DEV_USER | SELECT ANY TABLE | YES
  • 使用USER_SYS_PRIVS视图查看当前用户拥有的系统权限。

    -- 由 dev_user 执行
    SELECT PRIVILEGE, ADMIN_OPTION FROM USER_SYS_PRIVS;

    预期返回结果如下:

        privilege     | admin_option 
    ------------------+--------------
     CREATE ANY TABLE | YES
     SELECT ANY TABLE | YES

查询结果中,grantee是被授权的用户或角色,privilege 是权限名称,admin_optionYES表示该权限可被转授。

回收权限

语法说明

REVOKE sys_priv1 [, sys_priv2 ...] FROM my_user_or_role1 [, my_user_or_role2 ...];

使用示例

使用REVOKE命令从用户处收回系统权限。

-- 由高权限账号执行
REVOKE CREATE ANY TABLE, SELECT ANY TABLE FROM dev_user;

系统权限

下表列出PolarDB支持的系统权限及其作用。

类别

权限名

授权的操作

DATABASE LINKS

CREATE DATABASE LINKCREATE PUBLIC DATABASE LINK

创建私有或公共DBLink(PolarDB中不区分二者)。

ALTER DATABASE LINKALTER PUBLIC DATABASE LINK

修改私有或公共DBLink(PolarDB中不区分二者)。

DROP PUBLIC DATABASE LINK

删除私有或公共DBLink。

DIRECTORIES

CREATE ANY DIRECTORY

创建目录。

INDEXES

CREATE ANY INDEX

在任何用户Schema中创建索引。

ALTER ANY INDEX

在任何用户Schema中修改索引。

DROP ANY INDEX

在任何用户Schema中删除索引。

MATERIALIZED VIEWS

CREATE MATERIALIZED VIEW

在用户的同名Schema中创建物化视图。

CREATE ANY MATERIALIZED VIEW

在任何用户Schema中创建物化视图。

ALTER ANY MATERIALIZED VIEW

在任何用户Schema中修改物化视图。

DROP ANY MATERIALIZED VIEW

在任何用户Schema中删除物化视图。

OPERATORS

CREATE OPERATOR

在用户的同名Schema中创建操作符。

CREATE ANY OPERATOR

在任何用户Schema中创建操作符。

PRIVILEGES

GRANT ANY PRIVILEGE

授予任意系统权限。

PROCEDURES

CREATE PROCEDURE

在用户的同名Schema中创建存储过程、函数和包。

CREATE ANY PROCEDURE

在任何用户Schema中创建存储过程、函数和包。

ROLES & USERS

CREATE ROLECREATE USER

创建用户或角色(PolarDB中不区分二者权限校验)。

ALTER ANY ROLEALTER USER

修改用户或角色。

DROP ANY ROLEDROP USER

删除用户或角色。

GRANT ANY ROLE

对用户或角色执行授权操作。

SEQUENCES

CREATE SEQUENCE

在用户的同名Schema中创建序列。

CREATE ANY SEQUENCE

在任何用户Schema中创建序列。

ALTER ANY SEQUENCE

在任何用户Schema中修改序列。

DROP ANY SEQUENCE

在任何用户Schema中删除序列。

SYNONYMS

CREATE SYNONYM

在用户的同名Schema中创建同义词。

CREATE ANY SYNONYM

在任何用户Schema中创建同义词。

CREATE PUBLIC SYNONYM

创建公共同义词。

DROP ANY SYNONYM

在任何用户Schema中删除同义词。

DROP PUBLIC SYNONYM

删除公共同义词。

TABLES

CREATE TABLE

在用户的同名Schema中创建表。

CREATE ANY TABLE

在任何用户Schema中创建表。

ALTER ANY TABLE

在任何用户Schema中修改表或视图。

DROP ANY TABLE

在任何用户Schema中删除表或截断(TRUNCATE)表。

COMMENT ANY TABLE

在任何用户Schema中为表、视图和物化视图添加评论信息。

SELECT ANY TABLE

在任何用户Schema中查询表、视图和物化视图。

INSERT ANY TABLE

在任何用户Schema中向表插入数据行。

UPDATE ANY TABLE

在任何用户Schema中更新表的数据行。

DELETE ANY TABLE

在任何用户Schema中删除表的数据行。

TRIGGERS

CREATE TRIGGER

  • 在用户的同名Schema中创建DML触发器(实际检查触发器所在表的Schema)。

  • 在任何用户Schema中创建系统触发器。

CREATE ANY TRIGGER

在任何用户Schema中创建DML触发器或系统触发器。

ADMINISTER DATABASE TRIGGER

创建数据库级别的系统触发器(此外仍需CREATE TRIGGERCREATE ANY TRIGGER权限)。

TYPES

CREATE TYPE

在用户的同名Schema中创建类型。

CREATE ANY TYPE

在任何用户Schema中创建类型。

VIEWS

CREATE VIEW

在用户的同名Schema中创建视图。

CREATE ANY VIEW

在任何用户Schema中创建视图。

DROP ANY VIEW

在任何用户Schema中删除视图。