达梦数据库权限体系详解:系统权限与对象权限

一、达梦数据库权限分类

达梦数据库的权限体系分为系统权限和对象权限两大类。

1. 系统权限(数据库权限)

系统权限是指对整个数据库系统进行操作的权限,不针对特定对象。

系统权限是达梦权限体系中的高层权限,控制用户执行系统级操作的能力,如创建用户、修改数据库参数、管理表空间等。这些权限通常只授予数据库管理员或特定管理角色,对数据库安全至关重要。

常见的系统权限包括:

复制代码
CREATE USER:创建用户
ALTER USER:修改用户
DROP USER:删除用户
CREATE ROLE:创建角色
DROP ROLE:删除角色
CREATE TABLE:在用户自己的模式下创建表
CREATE ANY TABLE:在任何模式下创建表
ALTER ANY TABLE:修改任何表
DROP ANY TABLE:删除任何表
SELECT ANY TABLE:查询任何表
INSERT ANY TABLE:向任何表插入数据
UPDATE ANY TABLE:更新任何表
DELETE ANY TABLE:删除任何表的数据
CREATE VIEW:创建视图
CREATE PROCEDURE:创建存储过程
CREATE SEQUENCE:创建序列
CREATE TRIGGER:创建触发器
CREATE PUBLIC SYNONYM:创建公共同义词
DROP PUBLIC SYNONYM:删除公共同义词
BACKUP DATABASE:备份数据库
RESTORE DATABASE:恢复数据库
AUDIT ANY:设置审计选项
AUDIT ADMIN:管理审计

|----------|------------------------------------------------------------|------------|
| 权限类别 | 常见权限 | 说明 |
| 用户管理 | CREATE USER, ALTER USER, DROP USER | 用户创建、修改和删除 |
| 角色管理 | CREATE ROLE, DROP ROLE, GRANT ANY ROLE | 角色创建、删除和授予 |
| 对象创建 | CREATE TABLE, CREATE VIEW, CREATE PROCEDURE | 各类数据库对象创建 |
| 表空间 | CREATE TABLESPACE, ALTER TABLESPACE, DROP TABLESPACE | 表空间管理 |
| 备份恢复 | BACKUP DATABASE, RESTORE DATABASE | 数据库备份与恢复 |
| 系统管理 | ALTER DATABASE, ALTER SYSTEM, AUDIT ANY | 数据库配置修改和审计 |
| 会话管理 | CREATE SESSION, RESTRICTED SESSION | 数据库连接控制 |
| 特权权限 | UNLIMITED TABLESPACE, GRANT ANY PRIVILEGE | 特殊权限 |

2. 对象权限

对象权限是指对特定数据库对象(如表、视图、序列、存储过程等)进行操作的权限。

常见的对象权限包括:

复制代码
SELECT:查询表、视图、序列
INSERT:向表或视图中插入数据
UPDATE:更新表或视图中的数据
DELETE:删除表或视图中的数据
ALTER:修改表或序列的结构
REFERENCES:在表上创建外键约束
INDEX:在表上创建索引
EXECUTE:执行存储过程或函数

对象权限控制对特定数据库对象的操作能力:

|-------------|------------------------------------------------------------------------|-----------|
| 对象类型 | 可用权限 | 说明 |
| 表/视图 | SELECT, INSERT, UPDATE, DELETE, ALTER, INDEX, REFERENCES | 数据操作和结构修改 |
| 序列 | SELECT, ALTER | 序列值获取和修改 |
| 存储过程/函数 | EXECUTE | 程序执行 |
| | EXECUTE | 包内程序执行 |
| 目录 | READ, WRITE | 外部文件访问 |
| 物化视图 | SELECT, QUERY REWRITE | 物化视图访问和重写 |

二、权限分配与回收

2.1 系统权限管理

权限分配:

数据库权限授予使用GRANT语句实现

复制代码
-- 语法:GRANT <系统权限> [, <系统权限> ...] TO <用户名> | <角色名> [WITH ADMIN OPTION];

-- 示例:将创建表的权限授予用户USER1。
GRANT CREATE TABLE TO USER1;

-- 基本授予
GRANT CREATE TABLE, CREATE VIEW TO user1;

-- 授予并允许传递权限
GRANT CREATE USER TO admin_user WITH ADMIN OPTION;

如果使用WITH ADMIN OPTION,则被授予的用户可以将该权限再授予其他用户。

权限回收:

数据库权限撤销使用REVOKE语句实现

复制代码
-- 语法:REVOKE <系统权限> [, <系统权限> ...] FROM <用户名> | <角色名>;
-- 示例:撤销用户USER1创建表的权限。
REVOKE CREATE TABLE FROM USER1;

-- 回收单个权限
REVOKE CREATE TABLE FROM user1;

-- 回收多个权限
REVOKE CREATE VIEW, CREATE PROCEDURE FROM user2;

注意:系统权限的撤销不会级联。即使用WITH ADMIN OPTION授予的权限,当原始授予者的权限被撤销时,被授予者的权限不会自动撤销。

2.2 对象权限管理

权限分配:

授予对象权限:

复制代码
-- 语法:GRANT <对象权限> ON [<模式名>.]<对象名> TO <用户名> | <角色名> [WITH GRANT OPTION];
-- 示例:将模式SCOTT下的表EMP的SELECT和INSERT权限授予用户USER2。
GRANT SELECT, INSERT ON SCOTT.EMP TO USER2;
-- 如果使用WITH GRANT OPTION,则被授予的用户可以将该对象权限再授予其他用户。

-- 授予表权限
GRANT SELECT, INSERT ON sales.orders TO sales_rep;

-- 授予列级权限
GRANT UPDATE (price, discount) ON products.item TO pricing_clerk;

-- 授予并允许传递权限
GRANT SELECT ON hr.employees TO hr_team WITH GRANT OPTION;

权限回收:

撤销对象权限:

复制代码
-- 语法:REVOKE <对象权限> ON [<模式名>.]<对象名> FROM <用户名> | <角色名> [CASCADE CONSTRAINTS];
-- 示例:撤销用户USER2对SCOTT.EMP表的INSERT权限。
REVOKE INSERT ON SCOTT.EMP FROM USER2;

-- 回收表权限
REVOKE INSERT ON sales.orders FROM sales_rep;

-- 回收列级权限
REVOKE UPDATE (price) ON products.item FROM pricing_clerk;

-- 级联回收权限
REVOKE SELECT ON hr.employees FROM hr_team CASCADE CONSTRAINTS;

CASCADE CONSTRAINTS用于处理存在外键约束依赖的情况。

注意:

  • 对象权限的撤销可以是级联的。如果使用WITH GRANT OPTION授予的权限,在撤销时需要使用CASCADE选项来级联撤销由该用户授予的相应权限。
  • 对于REFERENCES权限的撤销,如果已经用于创建外键,则需要使用CASCADE CONSTRAINTS选项来同时删除依赖的外键约束。

总结:

  • 系统权限针对数据库级别的操作,对象权限针对特定对象的操作。
  • 授予系统权限使用WITH ADMIN OPTION,而授予对象权限使用WITH GRANT OPTION。
  • 撤销系统权限不会级联,而撤销对象权限可以级联(使用CASCADE)。
    在实际使用中,建议通过角色来管理权限,将权限授予角色,再将角色授予用户,便于权限的批量管理。

三、权限管理注意事项

3.1 权限传递选项

  • WITH ADMIN OPTION:用于系统权限,允许被授权者授予他人
  • WITH GRANT OPTION:用于对象权限,允许被授权者授予他人

3.2 权限回收差异

  • 系统权限回收不会级联
  • 对象权限回收可使用CASCADE级联回收

3.3 权限生效时间

  • 新权限需要用户重新连接生效
  • 权限回收立即生效

3.4 特殊角色PUBLIC

复制代码
-- 授予PUBLIC权限(谨慎使用)
GRANT EXECUTE ON util.pkg_general TO PUBLIC;

-- 回收PUBLIC权限
REVOKE EXECUTE ON util.pkg_general FROM PUBLIC;

四、权限查询方法

4.1 查看用户系统权限

复制代码
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'USER1';

4.2 查看用户对象权限

vb 复制代码
`SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'USER1';`

4.3 查看列级权限

复制代码
SELECT * FROM DBA_COL_PRIVS WHERE GRANTEE = 'USER1';

4.4 查看角色权限

复制代码
SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE = 'SALES_ROLE';
相关推荐
半部论语13 分钟前
Spring **${}** vs **#{}** 语法全景图
java·数据库·spring boot·后端·spring
不辉放弃1 小时前
Apache Spark 的结构化流
大数据·数据库·pyspark·伪实时
梦在深巷@12 小时前
sqli-libs通关教程(21-30)
数据库·网络安全
茉莉玫瑰花茶2 小时前
Redis 常用数据结构以及单线程模型
数据库·redis·缓存·bootstrap
冷崖3 小时前
Redis存储原理与数据模型(下)
数据库·redis·缓存
没有羊的王K3 小时前
SQL语言学习(group by,having)
数据库·sql·学习
ClouGence3 小时前
从达梦到 StarRocks:国产数据库实时入仓实践
数据库·后端
鸿乃江边鸟3 小时前
Starrocks ShortCircuit短路径的调度
大数据·starrocks·sql
青木川崎4 小时前
Hive_sql如何计算连续签到天数
hive·hadoop·sql