一、达梦数据库权限分类
达梦数据库的权限体系分为系统权限和对象权限两大类。
1. 系统权限(数据库权限)
系统权限是指对整个数据库系统进行操作的权限,不针对特定对象。
系统权限是达梦权限体系中的高层权限,控制用户执行系统级操作的能力,如创建用户、修改数据库参数、管理表空间等。这些权限通常只授予数据库管理员或特定管理角色,对数据库安全至关重要。
常见的系统权限包括:
            
            
              sql
              
              
            
          
          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. 对象权限
对象权限是指对特定数据库对象(如表、视图、序列、存储过程等)进行操作的权限。
常见的对象权限包括:
            
            
              sql
              
              
            
          
          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语句实现
            
            
              sql
              
              
            
          
          -- 语法: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语句实现
            
            
              sql
              
              
            
          
          -- 语法: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 对象权限管理
权限分配:
授予对象权限:
            
            
              sql
              
              
            
          
          -- 语法: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;权限回收:
撤销对象权限:
            
            
              sql
              
              
            
          
          -- 语法: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
            
            
              sql
              
              
            
          
          -- 授予PUBLIC权限(谨慎使用)
GRANT EXECUTE ON util.pkg_general TO PUBLIC;
-- 回收PUBLIC权限
REVOKE EXECUTE ON util.pkg_general FROM PUBLIC;四、权限查询方法
4.1 查看用户系统权限
            
            
              sql
              
              
            
          
          SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'USER1';4.2 查看用户对象权限
            
            
              sql
              
              
            
          
          SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'USER1';4.3 查看列级权限
            
            
              sql
              
              
            
          
          SELECT * FROM DBA_COL_PRIVS WHERE GRANTEE = 'USER1';4.4 查看角色权限
            
            
              sql
              
              
            
          
          SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE = 'SALES_ROLE';