从Oracle数据库迁移或进行大规模权限管理时,逐个为用户授予对象或Schema的访问权限操作繁琐。为简化此过程,PolarDB提供兼容Oracle风格的系统权限(SYSTEM PRIVILEGE)体系。通过单条命令,可为用户授予对某一类对象(如所有表、所有视图)的全局操作权限,从而提升数据库运维和管理效率。
适用范围
您的PolarDB PostgreSQL版(兼容Oracle)集群的修订版本需为2.0.14.18.37.0及以上
启用并使用系统权限
以下流程介绍如何完成从启用功能、创建用户、授予权限到最终验证的全过程。
步骤一:启用系统权限功能
系统权限功能默认关闭,使用前需前往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下创建表和查询任何表的权限。
创建一个用于测试的普通账号。
CREATE USER dev_user WITH PASSWORD 'Your_Secure_Password123';为
dev_user授予跨Schema创建表和查询表的系统权限。GRANT CREATE ANY TABLE, SELECT ANY TABLE TO dev_user;(可选)如果希望
dev_user也能将这些权限授予其他用户,可在授权时附加WITH ADMIN OPTION。-- 授予 dev_user 权限,并允许其将这些权限转授给其他用户 GRANT CREATE ANY TABLE, SELECT ANY TABLE TO dev_user WITH ADMIN OPTION;
步骤三:验证权限生效
确认dev_user已获得预期的权限。
使用
dev_user账号重新连接数据库。尝试在一个非同名Schema下创建表并插入数据。
CREATE TABLE public.my_test_table (id INT); INSERT INTO public.my_test_table VALUES (1);尝试查询该表,验证
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_option为YES表示该权限可被转授。
回收权限
语法说明
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支持的系统权限及其作用。
类别 | 权限名 | 授权的操作 |
|
| 创建私有或公共DBLink(PolarDB中不区分二者)。 |
| 修改私有或公共DBLink(PolarDB中不区分二者)。 | |
| 删除私有或公共DBLink。 | |
|
| 创建目录。 |
|
| 在任何用户Schema中创建索引。 |
| 在任何用户Schema中修改索引。 | |
| 在任何用户Schema中删除索引。 | |
|
| 在用户的同名Schema中创建物化视图。 |
| 在任何用户Schema中创建物化视图。 | |
| 在任何用户Schema中修改物化视图。 | |
| 在任何用户Schema中删除物化视图。 | |
|
| 在用户的同名Schema中创建操作符。 |
| 在任何用户Schema中创建操作符。 | |
|
| 授予任意系统权限。 |
|
| 在用户的同名Schema中创建存储过程、函数和包。 |
| 在任何用户Schema中创建存储过程、函数和包。 | |
|
| 创建用户或角色(PolarDB中不区分二者权限校验)。 |
| 修改用户或角色。 | |
| 删除用户或角色。 | |
| 对用户或角色执行授权操作。 | |
|
| 在用户的同名Schema中创建序列。 |
| 在任何用户Schema中创建序列。 | |
| 在任何用户Schema中修改序列。 | |
| 在任何用户Schema中删除序列。 | |
|
| 在用户的同名Schema中创建同义词。 |
| 在任何用户Schema中创建同义词。 | |
| 创建公共同义词。 | |
| 在任何用户Schema中删除同义词。 | |
| 删除公共同义词。 | |
|
| 在用户的同名Schema中创建表。 |
| 在任何用户Schema中创建表。 | |
| 在任何用户Schema中修改表或视图。 | |
| 在任何用户Schema中删除表或截断( | |
| 在任何用户Schema中为表、视图和物化视图添加评论信息。 | |
| 在任何用户Schema中查询表、视图和物化视图。 | |
| 在任何用户Schema中向表插入数据行。 | |
| 在任何用户Schema中更新表的数据行。 | |
| 在任何用户Schema中删除表的数据行。 | |
|
|
|
| 在任何用户Schema中创建DML触发器或系统触发器。 | |
| 创建数据库级别的系统触发器(此外仍需 | |
|
| 在用户的同名Schema中创建类型。 |
| 在任何用户Schema中创建类型。 | |
|
| 在用户的同名Schema中创建视图。 |
| 在任何用户Schema中创建视图。 | |
| 在任何用户Schema中删除视图。 |