本文档详细介绍DM数据库用户权限管理的方法和技巧,包括用户概念、权限概念、角色概念、用户规划、权限规划、角色规划、用户管理实施、权限管理实施、角色管理实施等内容,风哥教程参考DM官方文档《DM8安全管理》手册,适合DBA人员进行DM数据库的用户权限管理。
Part01-基础概念与理论知识
1.1 DM数据库用户概念
DM数据库用户是指能够登录DM数据库并执行操作的主体。用户是数据库安全管理的基本单位,通过用户认证和授权来控制对数据库的访问。
用户类型:
- 系统用户:DM数据库内置的用户,如SYSDBA、SYSAUDITOR等
- 普通用户:由系统管理员创建的用户,如fgedu、fgedu01等
- 应用用户:用于应用程序连接的用户,如app_user、web_user等
- 管理用户:用于数据库管理的用户,如dba_user、backup_user等
1.2 DM数据库权限概念
DM数据库权限是指用户对数据库对象的操作权限。权限控制是数据库安全管理的核心,通过权限控制可以限制用户的操作范围,防止未授权访问和操作。
# 权限类型
#
# 1. 系统权限
– CREATE SESSION:创建会话权限
– CREATE TABLE:创建表权限
– CREATE VIEW:创建视图权限
– CREATE PROCEDURE:创建存储过程权限
– CREATE ROLE:创建角色权限
– DROP USER:删除用户权限
– ALTER SYSTEM:修改系统参数权限
– BACKUP DATABASE:备份数据库权限
– RESTORE DATABASE:恢复数据库权限
#
# 2. 对象权限
– SELECT:查询对象权限
– INSERT:插入对象权限
– UPDATE:更新对象权限
– DELETE:删除对象权限
– ALTER:修改对象权限
– REFERENCES:引用对象权限
– EXECUTE:执行对象权限
– DEBUG:调试对象权限
#
# 3. 角色权限
– 系统预定义角色:如DBA、RESOURCE、CONNECT等
– 用户自定义角色:由用户创建的角色
#
# 1. 系统权限
– CREATE SESSION:创建会话权限
– CREATE TABLE:创建表权限
– CREATE VIEW:创建视图权限
– CREATE PROCEDURE:创建存储过程权限
– CREATE ROLE:创建角色权限
– DROP USER:删除用户权限
– ALTER SYSTEM:修改系统参数权限
– BACKUP DATABASE:备份数据库权限
– RESTORE DATABASE:恢复数据库权限
#
# 2. 对象权限
– SELECT:查询对象权限
– INSERT:插入对象权限
– UPDATE:更新对象权限
– DELETE:删除对象权限
– ALTER:修改对象权限
– REFERENCES:引用对象权限
– EXECUTE:执行对象权限
– DEBUG:调试对象权限
#
# 3. 角色权限
– 系统预定义角色:如DBA、RESOURCE、CONNECT等
– 用户自定义角色:由用户创建的角色
1.3 DM数据库角色概念
DM数据库角色是权限的集合,通过角色可以简化权限管理。角色可以授予用户,也可以授予其他角色,从而实现权限的继承和传递。
# 角色类型
#
# 1. 系统预定义角色
– DBA:数据库管理员角色,拥有所有权限
– RESOURCE:资源角色,拥有创建表、视图、存储过程等权限
– CONNECT:连接角色,拥有创建会话权限
– SYSAUDITOR:审计管理员角色,拥有审计相关权限
– PUBLIC:公共角色,所有用户默认拥有的角色 风哥提示:
#
# 2. 用户自定义角色
– 应用角色:为特定应用创建的角色
– 功能角色:基于功能划分的角色
– 管理角色:用于管理目的的角色
#
# 3. 角色的优点
– 简化权限管理:通过角色管理权限,减少权限管理的复杂性
– 提高安全性:通过角色控制权限,减少权限授予错误
– 便于维护:当权限需求变化时,只需要修改角色的权限,而不需要修改每个用户的权限
– 权限继承:角色可以继承其他角色的权限,实现权限的层次化管理
#
# 1. 系统预定义角色
– DBA:数据库管理员角色,拥有所有权限
– RESOURCE:资源角色,拥有创建表、视图、存储过程等权限
– CONNECT:连接角色,拥有创建会话权限
– SYSAUDITOR:审计管理员角色,拥有审计相关权限
– PUBLIC:公共角色,所有用户默认拥有的角色 风哥提示:
#
# 2. 用户自定义角色
– 应用角色:为特定应用创建的角色
– 功能角色:基于功能划分的角色
– 管理角色:用于管理目的的角色
#
# 3. 角色的优点
– 简化权限管理:通过角色管理权限,减少权限管理的复杂性
– 提高安全性:通过角色控制权限,减少权限授予错误
– 便于维护:当权限需求变化时,只需要修改角色的权限,而不需要修改每个用户的权限
– 权限继承:角色可以继承其他角色的权限,实现权限的层次化管理
Part02-生产环境规划与建议
2.1 DM数据库用户规划
生产环境DM数据库用户规划:
# 用户规划
#
# 1. 用户分类
– 系统用户:SYSDBA、SYSAUDITOR等
– 管理用户:dba_admin、backup_admin、monitor_admin等
– 应用用户:app_user、web_user、batch_user等
– 开发用户:dev_user、test_user、qa_user等
– 只读用户:read_user、report_user等
#
# 2. 用户命名规范
– 系统用户:使用系统默认名称
– 管理用户:admin_xxx
– 应用用户:app_xxx
– 开发用户:dev_xxx
– 只读用户:read_xxx
#
# 3. 用户密码策略
– 密码长度:至少8位
– 密码复杂度:包含大小写字母、数字、特殊字符 学习交流加群风哥微信: itpux-com
– 密码有效期:90天
– 密码失败次数:5次
– 密码锁定时间:1天
#
# 4. 用户状态管理
– 活跃用户:正常使用的用户
– 锁定用户:暂时不需要使用的用户
– 过期用户:密码过期的用户
– 禁用用户:永久不需要使用的用户
#
# 5. 用户空间管理
– 默认表空间:为每个用户指定默认表空间
– 临时表空间:为每个用户指定临时表空间
– 空间限额:为每个用户设置表空间限额
#
# 6. 用户审计
– 登录审计:记录用户登录情况
– 操作审计:记录用户操作情况
– 权限变更审计:记录用户权限变更情况
#
# 1. 用户分类
– 系统用户:SYSDBA、SYSAUDITOR等
– 管理用户:dba_admin、backup_admin、monitor_admin等
– 应用用户:app_user、web_user、batch_user等
– 开发用户:dev_user、test_user、qa_user等
– 只读用户:read_user、report_user等
#
# 2. 用户命名规范
– 系统用户:使用系统默认名称
– 管理用户:admin_xxx
– 应用用户:app_xxx
– 开发用户:dev_xxx
– 只读用户:read_xxx
#
# 3. 用户密码策略
– 密码长度:至少8位
– 密码复杂度:包含大小写字母、数字、特殊字符 学习交流加群风哥微信: itpux-com
– 密码有效期:90天
– 密码失败次数:5次
– 密码锁定时间:1天
#
# 4. 用户状态管理
– 活跃用户:正常使用的用户
– 锁定用户:暂时不需要使用的用户
– 过期用户:密码过期的用户
– 禁用用户:永久不需要使用的用户
#
# 5. 用户空间管理
– 默认表空间:为每个用户指定默认表空间
– 临时表空间:为每个用户指定临时表空间
– 空间限额:为每个用户设置表空间限额
#
# 6. 用户审计
– 登录审计:记录用户登录情况
– 操作审计:记录用户操作情况
– 权限变更审计:记录用户权限变更情况
2.2 DM数据库权限规划
生产环境DM数据库权限规划:
权限规划:
- 最小权限原则:只授予用户必要的权限
- 权限分离:将不同功能的权限分离,避免权限集中
- 权限继承:通过角色实现权限继承,简化权限管理
- 权限审计:定期审计用户权限,发现和修复权限问题
- 权限回收:及时回收不必要的权限,减少安全风险
2.3 DM数据库角色规划
生产环境DM数据库角色规划:
# 角色规划
#
# 1. 角色分类
– 管理角色:dba_role、backup_role、monitor_role等
– 应用角色:app_role、web_role、batch_role等
– 开发角色:dev_role、test_role、qa_role等
– 只读角色:read_role、report_role等
#
# 2. 角色权限配置
– 管理角色:授予管理相关的系统权限和对象权限 学习交流加群风哥QQ113257174
– 应用角色:授予应用所需的系统权限和对象权限
– 开发角色:授予开发所需的系统权限和对象权限
– 只读角色:只授予查询权限
#
# 3. 角色层次结构
– 基础角色:包含基本的权限,如CONNECT角色
– 功能角色:基于功能划分的角色,如read_role、write_role等
– 管理角色:包含管理权限的角色,如dba_role
#
# 4. 角色分配策略
– 基于用户职责分配角色
– 基于应用需求分配角色
– 基于安全级别分配角色
#
# 5. 角色审计
– 定期审计角色权限
– 定期审计角色分配情况
– 及时调整角色权限
#
# 1. 角色分类
– 管理角色:dba_role、backup_role、monitor_role等
– 应用角色:app_role、web_role、batch_role等
– 开发角色:dev_role、test_role、qa_role等
– 只读角色:read_role、report_role等
#
# 2. 角色权限配置
– 管理角色:授予管理相关的系统权限和对象权限 学习交流加群风哥QQ113257174
– 应用角色:授予应用所需的系统权限和对象权限
– 开发角色:授予开发所需的系统权限和对象权限
– 只读角色:只授予查询权限
#
# 3. 角色层次结构
– 基础角色:包含基本的权限,如CONNECT角色
– 功能角色:基于功能划分的角色,如read_role、write_role等
– 管理角色:包含管理权限的角色,如dba_role
#
# 4. 角色分配策略
– 基于用户职责分配角色
– 基于应用需求分配角色
– 基于安全级别分配角色
#
# 5. 角色审计
– 定期审计角色权限
– 定期审计角色分配情况
– 及时调整角色权限
Part03-生产环境项目实施方案
3.1 DM数据库用户管理实施
3.1.1 用户创建与管理
# 用户创建与管理
#
# 1. 创建用户
##
# 创建用户
$ disql SYSDBA/SYSDBA
SQL> create user fgedu identified by “Fgedu123” default tablespace fgedutbs temporary tablespace temp;
##
# 创建用户并指定空间限额
SQL> create user fgedu01 identified by “Fgedu0123” default tablespace fgedutbs temporary tablespace temp quota 100M on fgedutbs;
##
# 创建用户并设置密码有效期
SQL> create user fgedu02 identified by “Fgedu0234” default tablespace fgedutbs temporary tablespace temp password expire;
#
# 2. 查看用户信息
##
# 查看所有用户
SQL> select username, account_status, default_tablespace, temporary_tablespace from dba_users;
##
# 查看用户详细信息
SQL> select * from dba_users where username = ‘FGEDU’;
##
# 查看用户权限
SQL> select * from dba_sys_privs where grantee = ‘FGEDU’;
##
# 查看用户角色
SQL> select * from dba_role_privs where grantee = ‘FGEDU’;
#
# 3. 修改用户
##
# 修改用户密码 更多视频教程www.fgedu.net.cn
SQL> alter user fgedu identified by “Fgedu456”;
##
# 修改用户默认表空间
SQL> alter user fgedu default tablespace users;
##
# 修改用户临时表空间
SQL> alter user fgedu temporary tablespace temp;
##
# 修改用户空间限额
SQL> alter user fgedu quota 200M on fgedutbs;
##
# 修改用户状态
SQL> alter user fgedu account lock;
SQL> alter user fgedu account unlock;
SQL> alter user fgedu password expire;
#
# 4. 删除用户
##
# 删除用户(不级联删除)
SQL> drop user fgedu;
##
# 删除用户(级联删除)
SQL> drop user fgedu cascade;
#
# 1. 创建用户
##
# 创建用户
$ disql SYSDBA/SYSDBA
SQL> create user fgedu identified by “Fgedu123” default tablespace fgedutbs temporary tablespace temp;
##
# 创建用户并指定空间限额
SQL> create user fgedu01 identified by “Fgedu0123” default tablespace fgedutbs temporary tablespace temp quota 100M on fgedutbs;
##
# 创建用户并设置密码有效期
SQL> create user fgedu02 identified by “Fgedu0234” default tablespace fgedutbs temporary tablespace temp password expire;
#
# 2. 查看用户信息
##
# 查看所有用户
SQL> select username, account_status, default_tablespace, temporary_tablespace from dba_users;
##
# 查看用户详细信息
SQL> select * from dba_users where username = ‘FGEDU’;
##
# 查看用户权限
SQL> select * from dba_sys_privs where grantee = ‘FGEDU’;
##
# 查看用户角色
SQL> select * from dba_role_privs where grantee = ‘FGEDU’;
#
# 3. 修改用户
##
# 修改用户密码 更多视频教程www.fgedu.net.cn
SQL> alter user fgedu identified by “Fgedu456”;
##
# 修改用户默认表空间
SQL> alter user fgedu default tablespace users;
##
# 修改用户临时表空间
SQL> alter user fgedu temporary tablespace temp;
##
# 修改用户空间限额
SQL> alter user fgedu quota 200M on fgedutbs;
##
# 修改用户状态
SQL> alter user fgedu account lock;
SQL> alter user fgedu account unlock;
SQL> alter user fgedu password expire;
#
# 4. 删除用户
##
# 删除用户(不级联删除)
SQL> drop user fgedu;
##
# 删除用户(级联删除)
SQL> drop user fgedu cascade;
3.1.2 用户认证管理
# 用户认证管理
#
# 1. 密码策略配置
##
# 查看当前密码策略
SQL> select * from v$parameter where name like ‘%PWD%’;
##
# 修改密码策略
SQL> alter system set ‘PWD_POLICY’ = 3 scope=spfile;
— 3:密码复杂度要求(包含大小写字母、数字、特殊字符)
SQL> alter system set ‘PWD_MIN_LEN’ = 8 scope=spfile;
— 密码最小长度为8
SQL> alter system set ‘PWD_EXPIRE_TIME’ = 90 scope=spfile;
— 密码有效期为90天
SQL> alter system set ‘PWD_MAX_FAIL_TIMES’ = 5 scope=spfile;
— 密码最大失败次数为5次
SQL> alter system set ‘PWD_LOCK_TIME’ = 1 scope=spfile;
— 密码锁定时间为1天
##
# 重启实例使参数生效
$ /dm/app/bin/DmServicefgedudb restart
#
# 2. 登录认证
##
# 本地认证
$ disql fgedu/Fgedu123
##
# 远程认证 更多学习教程公众号风哥教程itpux_com
$ disql fgedu/Fgedu123@192.168.1.100:5236
##
# 密码验证
SQL> select user from dual;
#
# 3. 认证失败处理
##
# 查看认证失败记录
SQL> select * from sysaudit.sys_audit_session where result = ‘FAILED’ order by audit_time desc;
##
# 解锁被锁定的用户
SQL> alter user fgedu account unlock;
##
# 重置用户密码
SQL> alter user fgedu identified by “Fgedu789”;
#
# 1. 密码策略配置
##
# 查看当前密码策略
SQL> select * from v$parameter where name like ‘%PWD%’;
##
# 修改密码策略
SQL> alter system set ‘PWD_POLICY’ = 3 scope=spfile;
— 3:密码复杂度要求(包含大小写字母、数字、特殊字符)
SQL> alter system set ‘PWD_MIN_LEN’ = 8 scope=spfile;
— 密码最小长度为8
SQL> alter system set ‘PWD_EXPIRE_TIME’ = 90 scope=spfile;
— 密码有效期为90天
SQL> alter system set ‘PWD_MAX_FAIL_TIMES’ = 5 scope=spfile;
— 密码最大失败次数为5次
SQL> alter system set ‘PWD_LOCK_TIME’ = 1 scope=spfile;
— 密码锁定时间为1天
##
# 重启实例使参数生效
$ /dm/app/bin/DmServicefgedudb restart
#
# 2. 登录认证
##
# 本地认证
$ disql fgedu/Fgedu123
##
# 远程认证 更多学习教程公众号风哥教程itpux_com
$ disql fgedu/Fgedu123@192.168.1.100:5236
##
# 密码验证
SQL> select user from dual;
#
# 3. 认证失败处理
##
# 查看认证失败记录
SQL> select * from sysaudit.sys_audit_session where result = ‘FAILED’ order by audit_time desc;
##
# 解锁被锁定的用户
SQL> alter user fgedu account unlock;
##
# 重置用户密码
SQL> alter user fgedu identified by “Fgedu789”;
3.1.3 用户空间管理
# 用户空间管理
#
# 1. 表空间创建
##
# 创建表空间
SQL> create tablespace fgedutbs datafile ‘/dm/fgdata/fgedudb/fgedutbs01.dbf’ size 10G autoextend on next 1G maxsize 50G;
#
# 2. 用户空间分配
##
# 为用户分配表空间
SQL> alter user fgedu default tablespace fgedutbs;
##
# 为用户分配临时表空间
SQL> alter user fgedu temporary tablespace temp;
##
# 为用户设置空间限额
SQL> alter user fgedu quota 100M on fgedutbs;
SQL> alter user fgedu quota unlimited on fgedutbs;
#
# 3. 空间使用监控
##
# 查看用户空间使用情况
SQL> select tablespace_name, username, bytes/1024/1024 as used_mb, max_bytes/1024/1024 as max_mb from dba_ts_quotas where username = ‘FGEDU’;
##
# 查看表空间使用情况
SQL> select tablespace_name, sum(bytes)/1024/1024 as used_mb, sum(maxbytes)/1024/1024 as max_mb from dba_data_files group by tablespace_name; from DB视频:www.itpux.com
##
# 查看临时表空间使用情况
SQL> select tablespace_name, sum(bytes)/1024/1024 as used_mb from dba_temp_files group by tablespace_name;
#
# 4. 空间管理
##
# 扩展表空间
SQL> alter tablespace fgedutbs add datafile ‘/dm/fgdata/fgedudb/fgedutbs02.dbf’ size 10G autoextend on next 1G maxsize 50G;
##
# 调整数据文件大小
SQL> alter database datafile ‘/dm/fgdata/fgedudb/fgedutbs01.dbf’ resize 20G;
##
# 清理表空间碎片
SQL> alter tablespace fgedutbs coalesce;
#
# 1. 表空间创建
##
# 创建表空间
SQL> create tablespace fgedutbs datafile ‘/dm/fgdata/fgedudb/fgedutbs01.dbf’ size 10G autoextend on next 1G maxsize 50G;
#
# 2. 用户空间分配
##
# 为用户分配表空间
SQL> alter user fgedu default tablespace fgedutbs;
##
# 为用户分配临时表空间
SQL> alter user fgedu temporary tablespace temp;
##
# 为用户设置空间限额
SQL> alter user fgedu quota 100M on fgedutbs;
SQL> alter user fgedu quota unlimited on fgedutbs;
#
# 3. 空间使用监控
##
# 查看用户空间使用情况
SQL> select tablespace_name, username, bytes/1024/1024 as used_mb, max_bytes/1024/1024 as max_mb from dba_ts_quotas where username = ‘FGEDU’;
##
# 查看表空间使用情况
SQL> select tablespace_name, sum(bytes)/1024/1024 as used_mb, sum(maxbytes)/1024/1024 as max_mb from dba_data_files group by tablespace_name; from DB视频:www.itpux.com
##
# 查看临时表空间使用情况
SQL> select tablespace_name, sum(bytes)/1024/1024 as used_mb from dba_temp_files group by tablespace_name;
#
# 4. 空间管理
##
# 扩展表空间
SQL> alter tablespace fgedutbs add datafile ‘/dm/fgdata/fgedudb/fgedutbs02.dbf’ size 10G autoextend on next 1G maxsize 50G;
##
# 调整数据文件大小
SQL> alter database datafile ‘/dm/fgdata/fgedudb/fgedutbs01.dbf’ resize 20G;
##
# 清理表空间碎片
SQL> alter tablespace fgedutbs coalesce;
3.2 DM数据库权限管理实施
3.2.1 系统权限管理
# 系统权限管理
#
# 1. 授予系统权限
##
# 授予用户系统权限
$ disql SYSDBA/SYSDBA
SQL> grant create session, create table to fgedu;
##
# 授予用户多个系统权限
SQL> grant create session, create table, create view, create procedure to fgedu;
##
# 授予用户带admin option的系统权限
SQL> grant create user to fgedu with admin option;
#
# 2. 回收系统权限
##
# 回收用户系统权限
SQL> revoke create table from fgedu;
##
# 回收用户多个系统权限
SQL> revoke create view, create procedure from fgedu;
#
# 3. 查看系统权限
##
# 查看用户系统权限
SQL> select * from dba_sys_privs where grantee = ‘FGEDU’;
##
# 查看角色系统权限
SQL> select * from dba_sys_privs where grantee = ‘FGEDU_ROLE’;
##
# 查看系统权限列表
SQL> select * from system_privilege_map;
#
# 4. 系统权限审计
##
# 启用系统权限审计
SQL> alter system set ‘AUDIT_SYS_OPER’ = 1 scope=spfile;
##
# 重启实例使参数生效
$ /dm/app/bin/DmServicefgedudb restart
##
# 查看系统权限审计记录
SQL> select * from sysaudit.sys_audit where audit_type = ‘GRANT’ or audit_type = ‘REVOKE’ order by audit_time desc;
#
# 1. 授予系统权限
##
# 授予用户系统权限
$ disql SYSDBA/SYSDBA
SQL> grant create session, create table to fgedu;
##
# 授予用户多个系统权限
SQL> grant create session, create table, create view, create procedure to fgedu;
##
# 授予用户带admin option的系统权限
SQL> grant create user to fgedu with admin option;
#
# 2. 回收系统权限
##
# 回收用户系统权限
SQL> revoke create table from fgedu;
##
# 回收用户多个系统权限
SQL> revoke create view, create procedure from fgedu;
#
# 3. 查看系统权限
##
# 查看用户系统权限
SQL> select * from dba_sys_privs where grantee = ‘FGEDU’;
##
# 查看角色系统权限
SQL> select * from dba_sys_privs where grantee = ‘FGEDU_ROLE’;
##
# 查看系统权限列表
SQL> select * from system_privilege_map;
#
# 4. 系统权限审计
##
# 启用系统权限审计
SQL> alter system set ‘AUDIT_SYS_OPER’ = 1 scope=spfile;
##
# 重启实例使参数生效
$ /dm/app/bin/DmServicefgedudb restart
##
# 查看系统权限审计记录
SQL> select * from sysaudit.sys_audit where audit_type = ‘GRANT’ or audit_type = ‘REVOKE’ order by audit_time desc;
3.2.2 对象权限管理
# 对象权限管理
#
# 1. 授予对象权限
##
# 授予用户对象权限
$ disql SYSDBA/SYSDBA
SQL> grant select, insert, update, delete on fgedu.t_user to fgedu;
##
# 授予用户带grant option的对象权限
SQL> grant select on fgedu.t_user to fgedu with grant option;
##
# 授予角色对象权限
SQL> grant select, insert, update, delete on fgedu.t_user to fgedu_role;
#
# 2. 回收对象权限
##
# 回收用户对象权限
SQL> revoke delete on fgedu.t_user from fgedu;
##
# 回收角色对象权限
SQL> revoke update, delete on fgedu.t_user from fgedu_role;
#
# 3. 查看对象权限
##
# 查看用户对象权限
SQL> select * from dba_tab_privs where grantee = ‘FGEDU’;
##
# 查看角色对象权限
SQL> select * from dba_tab_privs where grantee = ‘FGEDU_ROLE’;
##
# 查看对象权限列表
SQL> select * from table_privilege_map;
#
# 4. 对象权限审计
##
# 启用对象权限审计
SQL> alter system set ‘AUDIT_DML’ = 1 scope=spfile;
##
# 重启实例使参数生效
$ /dm/app/bin/DmServicefgedudb restart
##
# 查看对象权限审计记录
SQL> select * from sysaudit.sys_audit_object where obj_name = ‘T_USER’ order by audit_time desc;
#
# 1. 授予对象权限
##
# 授予用户对象权限
$ disql SYSDBA/SYSDBA
SQL> grant select, insert, update, delete on fgedu.t_user to fgedu;
##
# 授予用户带grant option的对象权限
SQL> grant select on fgedu.t_user to fgedu with grant option;
##
# 授予角色对象权限
SQL> grant select, insert, update, delete on fgedu.t_user to fgedu_role;
#
# 2. 回收对象权限
##
# 回收用户对象权限
SQL> revoke delete on fgedu.t_user from fgedu;
##
# 回收角色对象权限
SQL> revoke update, delete on fgedu.t_user from fgedu_role;
#
# 3. 查看对象权限
##
# 查看用户对象权限
SQL> select * from dba_tab_privs where grantee = ‘FGEDU’;
##
# 查看角色对象权限
SQL> select * from dba_tab_privs where grantee = ‘FGEDU_ROLE’;
##
# 查看对象权限列表
SQL> select * from table_privilege_map;
#
# 4. 对象权限审计
##
# 启用对象权限审计
SQL> alter system set ‘AUDIT_DML’ = 1 scope=spfile;
##
# 重启实例使参数生效
$ /dm/app/bin/DmServicefgedudb restart
##
# 查看对象权限审计记录
SQL> select * from sysaudit.sys_audit_object where obj_name = ‘T_USER’ order by audit_time desc;
3.2.3 权限审计
# 权限审计
#
# 1. 启用权限审计
##
# 启用系统操作审计
$ disql SYSDBA/SYSDBA
SQL> alter system set ‘AUDIT_SYS_OPER’ = 1 scope=spfile;
##
# 启用DDL操作审计
SQL> alter system set ‘AUDIT_DDL’ = 1 scope=spfile;
##
# 启用DML操作审计
SQL> alter system set ‘AUDIT_DML’ = 1 scope=spfile;
##
# 重启实例使参数生效
$ /dm/app/bin/DmServicefgedudb restart
#
# 2. 查看权限审计记录
##
# 查看系统权限审计记录
SQL> select * from sysaudit.sys_audit where audit_type = ‘GRANT’ or audit_type = ‘REVOKE’ order by audit_time desc;
##
# 查看对象权限审计记录
SQL> select * from sysaudit.sys_audit_object order by audit_time desc;
##
# 查看登录审计记录
SQL> select * from sysaudit.sys_audit_session order by audit_time desc;
#
# 3. 权限审计报告
##
# 生成权限审计报告脚本
#!/bin/bash
# permission_audit.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
export DM_HOME=/dm/app
export PATH=$PATH:$DM_HOME/bin
DATE=$(date +%Y%m%d)
OUTPUT_DIR=/dm/audit/report
mkdir -p $OUTPUT_DIR
disql SYSDBA/SYSDBA << EOF spool $OUTPUT_DIR/permission_audit_$DATE.txt select '=== 系统权限变更记录 ===' from dual; select audit_time, user_name, audit_type, obj_name from sysaudit.sys_audit where audit_type = 'GRANT' or audit_type = 'REVOKE' order by audit_time desc; select '=== 对象权限操作记录 ===' from dual; select audit_time, user_name, audit_type, obj_name from sysaudit.sys_audit_object order by audit_time desc; select '=== 登录记录 ===' from dual; select audit_time, user_name, client_ip, result from sysaudit.sys_audit_session order by audit_time desc; spool off EOF echo "权限审计报告已生成:$OUTPUT_DIR/permission_audit_$DATE.txt" # # 4. 权限审计分析 ## # 分析权限变更趋势 - 统计权限变更次数 - 分析权限变更类型 - 识别异常权限变更 ## # 分析登录情况 - 统计登录失败次数 - 分析登录来源IP - 识别异常登录行为 ## # 分析对象操作 - 统计对象操作次数 - 分析对象操作类型 - 识别异常对象操作
#
# 1. 启用权限审计
##
# 启用系统操作审计
$ disql SYSDBA/SYSDBA
SQL> alter system set ‘AUDIT_SYS_OPER’ = 1 scope=spfile;
##
# 启用DDL操作审计
SQL> alter system set ‘AUDIT_DDL’ = 1 scope=spfile;
##
# 启用DML操作审计
SQL> alter system set ‘AUDIT_DML’ = 1 scope=spfile;
##
# 重启实例使参数生效
$ /dm/app/bin/DmServicefgedudb restart
#
# 2. 查看权限审计记录
##
# 查看系统权限审计记录
SQL> select * from sysaudit.sys_audit where audit_type = ‘GRANT’ or audit_type = ‘REVOKE’ order by audit_time desc;
##
# 查看对象权限审计记录
SQL> select * from sysaudit.sys_audit_object order by audit_time desc;
##
# 查看登录审计记录
SQL> select * from sysaudit.sys_audit_session order by audit_time desc;
#
# 3. 权限审计报告
##
# 生成权限审计报告脚本
#!/bin/bash
# permission_audit.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
export DM_HOME=/dm/app
export PATH=$PATH:$DM_HOME/bin
DATE=$(date +%Y%m%d)
OUTPUT_DIR=/dm/audit/report
mkdir -p $OUTPUT_DIR
disql SYSDBA/SYSDBA << EOF spool $OUTPUT_DIR/permission_audit_$DATE.txt select '=== 系统权限变更记录 ===' from dual; select audit_time, user_name, audit_type, obj_name from sysaudit.sys_audit where audit_type = 'GRANT' or audit_type = 'REVOKE' order by audit_time desc; select '=== 对象权限操作记录 ===' from dual; select audit_time, user_name, audit_type, obj_name from sysaudit.sys_audit_object order by audit_time desc; select '=== 登录记录 ===' from dual; select audit_time, user_name, client_ip, result from sysaudit.sys_audit_session order by audit_time desc; spool off EOF echo "权限审计报告已生成:$OUTPUT_DIR/permission_audit_$DATE.txt" # # 4. 权限审计分析 ## # 分析权限变更趋势 - 统计权限变更次数 - 分析权限变更类型 - 识别异常权限变更 ## # 分析登录情况 - 统计登录失败次数 - 分析登录来源IP - 识别异常登录行为 ## # 分析对象操作 - 统计对象操作次数 - 分析对象操作类型 - 识别异常对象操作
3.3 DM数据库角色管理实施
3.3.1 角色创建与管理
# 角色创建与管理
#
# 1. 创建角色
##
# 创建角色
$ disql SYSDBA/SYSDBA
SQL> create role fgedu_role;
##
# 创建带密码的角色
SQL> create role fgedu_role identified by “Role123”;
#
# 2. 授予角色权限
##
# 授予角色系统权限
SQL> grant create session, create table, create view to fgedu_role;
##
# 授予角色对象权限
SQL> grant select, insert, update, delete on fgedu.t_user to fgedu_role;
##
# 授予角色其他角色
SQL> grant connect, resource to fgedu_role;
#
# 3. 将角色授予用户
##
# 将角色授予用户
SQL> grant fgedu_role to fgedu;
##
# 将角色授予用户并允许传递
SQL> grant fgedu_role to fgedu with admin option;
#
# 4. 查看角色信息
##
# 查看所有角色
SQL> select * from dba_roles;
##
# 查看角色权限
SQL> select * from dba_sys_privs where grantee = ‘FGEDU_ROLE’;
SQL> select * from dba_tab_privs where grantee = ‘FGEDU_ROLE’;
##
# 查看角色被授予情况
SQL> select * from dba_role_privs where granted_role = ‘FGEDU_ROLE’;
##
# 查看用户拥有的角色
SQL> select * from dba_role_privs where grantee = ‘FGEDU’;
#
# 5. 修改角色
##
# 修改角色密码
SQL> alter role fgedu_role identified by “NewRole123”;
##
# 移除角色密码
SQL> alter role fgedu_role not identified;
#
# 6. 删除角色
##
# 删除角色
SQL> drop role fgedu_role;
#
# 1. 创建角色
##
# 创建角色
$ disql SYSDBA/SYSDBA
SQL> create role fgedu_role;
##
# 创建带密码的角色
SQL> create role fgedu_role identified by “Role123”;
#
# 2. 授予角色权限
##
# 授予角色系统权限
SQL> grant create session, create table, create view to fgedu_role;
##
# 授予角色对象权限
SQL> grant select, insert, update, delete on fgedu.t_user to fgedu_role;
##
# 授予角色其他角色
SQL> grant connect, resource to fgedu_role;
#
# 3. 将角色授予用户
##
# 将角色授予用户
SQL> grant fgedu_role to fgedu;
##
# 将角色授予用户并允许传递
SQL> grant fgedu_role to fgedu with admin option;
#
# 4. 查看角色信息
##
# 查看所有角色
SQL> select * from dba_roles;
##
# 查看角色权限
SQL> select * from dba_sys_privs where grantee = ‘FGEDU_ROLE’;
SQL> select * from dba_tab_privs where grantee = ‘FGEDU_ROLE’;
##
# 查看角色被授予情况
SQL> select * from dba_role_privs where granted_role = ‘FGEDU_ROLE’;
##
# 查看用户拥有的角色
SQL> select * from dba_role_privs where grantee = ‘FGEDU’;
#
# 5. 修改角色
##
# 修改角色密码
SQL> alter role fgedu_role identified by “NewRole123”;
##
# 移除角色密码
SQL> alter role fgedu_role not identified;
#
# 6. 删除角色
##
# 删除角色
SQL> drop role fgedu_role;
3.3.2 角色层次结构设计
# 角色层次结构设计
#
# 1. 基础角色
##
# 创建基础角色
$ disql SYSDBA/SYSDBA
SQL> create role base_role;
SQL> grant create session to base_role;
#
# 2. 功能角色
##
# 创建只读角色
SQL> create role read_role;
SQL> grant base_role to read_role;
SQL> grant select any table to read_role;
##
# 创建读写角色
SQL> create role write_role;
SQL> grant base_role to write_role;
SQL> grant select any table, insert any table, update any table, delete any table to write_role;
##
# 创建开发角色
SQL> create role dev_role;
SQL> grant write_role to dev_role;
SQL> grant create table, create view, create procedure to dev_role;
#
# 3. 管理角色
##
# 创建DBA角色
SQL> create role dba_role;
SQL> grant dev_role to dba_role;
SQL> grant create user, drop user, alter user to dba_role;
#
# 4. 应用角色
##
# 创建应用角色
SQL> create role app_role;
SQL> grant read_role to app_role;
SQL> grant select, insert, update, delete on fgedu.t_user to app_role;
SQL> grant select, insert, update, delete on fgedu.t_order to app_role;
#
# 5. 角色分配
##
# 将角色分配给用户
SQL> grant read_role to fgedu_read;
SQL> grant write_role to fgedu_write;
SQL> grant dev_role to fgedu_dev;
SQL> grant dba_role to fgedu_admin;
SQL> grant app_role to fgedu_app;
#
# 6. 角色管理最佳实践
##
# 角色命名规范
– 基础角色:base_xxx
– 功能角色:func_xxx
– 管理角色:admin_xxx
– 应用角色:app_xxx
##
# 角色权限管理
– 定期审查角色权限
– 及时调整角色权限
– 避免角色权限过大
##
# 角色继承管理
– 合理设计角色层次结构
– 避免角色循环依赖
– 确保角色权限清晰
#
# 1. 基础角色
##
# 创建基础角色
$ disql SYSDBA/SYSDBA
SQL> create role base_role;
SQL> grant create session to base_role;
#
# 2. 功能角色
##
# 创建只读角色
SQL> create role read_role;
SQL> grant base_role to read_role;
SQL> grant select any table to read_role;
##
# 创建读写角色
SQL> create role write_role;
SQL> grant base_role to write_role;
SQL> grant select any table, insert any table, update any table, delete any table to write_role;
##
# 创建开发角色
SQL> create role dev_role;
SQL> grant write_role to dev_role;
SQL> grant create table, create view, create procedure to dev_role;
#
# 3. 管理角色
##
# 创建DBA角色
SQL> create role dba_role;
SQL> grant dev_role to dba_role;
SQL> grant create user, drop user, alter user to dba_role;
#
# 4. 应用角色
##
# 创建应用角色
SQL> create role app_role;
SQL> grant read_role to app_role;
SQL> grant select, insert, update, delete on fgedu.t_user to app_role;
SQL> grant select, insert, update, delete on fgedu.t_order to app_role;
#
# 5. 角色分配
##
# 将角色分配给用户
SQL> grant read_role to fgedu_read;
SQL> grant write_role to fgedu_write;
SQL> grant dev_role to fgedu_dev;
SQL> grant dba_role to fgedu_admin;
SQL> grant app_role to fgedu_app;
#
# 6. 角色管理最佳实践
##
# 角色命名规范
– 基础角色:base_xxx
– 功能角色:func_xxx
– 管理角色:admin_xxx
– 应用角色:app_xxx
##
# 角色权限管理
– 定期审查角色权限
– 及时调整角色权限
– 避免角色权限过大
##
# 角色继承管理
– 合理设计角色层次结构
– 避免角色循环依赖
– 确保角色权限清晰
3.3.3 角色使用与监控
# 角色使用与监控
#
# 1. 角色使用
##
# 激活角色
$ disql fgedu/Fgedu123
SQL> set role fgedu_role identified by “Role123”;
##
# 查看当前激活的角色
SQL> select * from session_roles;
##
# 查看用户默认角色
SQL> select * from dba_role_privs where grantee = ‘FGEDU’ and default_role = ‘YES’;
#
# 2. 角色监控
##
# 监控角色使用情况
SQL> select granted_role, count(*) as user_count from dba_role_privs group by granted_role order by user_count desc;
##
# 监控角色权限变更
SQL> select * from sysaudit.sys_audit where audit_type = ‘GRANT’ or audit_type = ‘REVOKE’ order by audit_time desc;
##
# 监控角色继承关系
SQL> select * from dba_role_privs where granted_role in (select role from dba_roles);
#
# 3. 角色优化
##
# 角色权限优化
– 移除不必要的权限
– 添加缺失的权限
– 调整权限粒度
##
# 角色结构优化
– 合并相似角色
– 拆分复杂角色
– 调整角色层次结构
##
# 角色分配优化
– 基于用户职责调整角色分配
– 基于应用需求调整角色分配
– 基于安全级别调整角色分配
#
# 4. 角色审计
##
# 角色权限审计
– 审查角色权限是否符合最小权限原则
– 审查角色权限是否存在安全风险
– 审查角色权限是否满足业务需求
##
# 角色分配审计
– 审查角色分配是否合理
– 审查角色分配是否符合权限分离原则
– 审查角色分配是否满足业务需求
##
# 角色使用审计
– 审查角色使用情况
– 审查角色激活情况
– 审查角色权限使用情况
#
# 1. 角色使用
##
# 激活角色
$ disql fgedu/Fgedu123
SQL> set role fgedu_role identified by “Role123”;
##
# 查看当前激活的角色
SQL> select * from session_roles;
##
# 查看用户默认角色
SQL> select * from dba_role_privs where grantee = ‘FGEDU’ and default_role = ‘YES’;
#
# 2. 角色监控
##
# 监控角色使用情况
SQL> select granted_role, count(*) as user_count from dba_role_privs group by granted_role order by user_count desc;
##
# 监控角色权限变更
SQL> select * from sysaudit.sys_audit where audit_type = ‘GRANT’ or audit_type = ‘REVOKE’ order by audit_time desc;
##
# 监控角色继承关系
SQL> select * from dba_role_privs where granted_role in (select role from dba_roles);
#
# 3. 角色优化
##
# 角色权限优化
– 移除不必要的权限
– 添加缺失的权限
– 调整权限粒度
##
# 角色结构优化
– 合并相似角色
– 拆分复杂角色
– 调整角色层次结构
##
# 角色分配优化
– 基于用户职责调整角色分配
– 基于应用需求调整角色分配
– 基于安全级别调整角色分配
#
# 4. 角色审计
##
# 角色权限审计
– 审查角色权限是否符合最小权限原则
– 审查角色权限是否存在安全风险
– 审查角色权限是否满足业务需求
##
# 角色分配审计
– 审查角色分配是否合理
– 审查角色分配是否符合权限分离原则
– 审查角色分配是否满足业务需求
##
# 角色使用审计
– 审查角色使用情况
– 审查角色激活情况
– 审查角色权限使用情况
Part04-生产案例与实战讲解
4.1 DM数据库用户管理案例
以下是一个用户管理的案例:
#
# 用户管理案例
##
# 场景描述
某企业需要为不同部门创建DM数据库用户,并设置相应的权限和空间限额。
##
# 实施步骤
# 1. 用户规划
#
# 确定用户需求
– 技术部门:需要开发和测试权限
– 业务部门:需要读写权限
– 财务部门:需要只读权限
– 管理部门:需要管理权限
#
# 设计用户方案
– 技术部门:fgedu_dev(开发用户)、fgedu_test(测试用户)
– 业务部门:fgedu_biz(业务用户)
– 财务部门:fgedu_fin(财务用户)
– 管理部门:fgedu_admin(管理用户)
# 2. 表空间创建
#
# 创建表空间
$ disql SYSDBA/SYSDBA
SQL> create tablespace fgedutbs datafile ‘/dm/fgdata/fgedudb/fgedutbs01.dbf’ size 10G autoextend on next 1G maxsize 50G;
SQL> create tablespace fgedu_dev_tbs datafile ‘/dm/fgdata/fgedudb/fgedu_dev_tbs01.dbf’ size 5G autoextend on next 500M maxsize 20G;
SQL> create tablespace fgedu_biz_tbs datafile ‘/dm/fgdata/fgedudb/fgedu_biz_tbs01.dbf’ size 20G autoextend on next 2G maxsize 100G;
# 3. 用户创建
#
# 创建管理用户
SQL> create user fgedu_admin identified by “Admin123” default tablespace fgedutbs temporary tablespace temp;
#
# 创建开发用户
SQL> create user fgedu_dev identified by “Dev123” default tablespace fgedu_dev_tbs temporary tablespace temp quota 5G on fgedu_dev_tbs;
#
# 创建测试用户
SQL> create user fgedu_test identified by “Test123” default tablespace fgedu_dev_tbs temporary tablespace temp quota 2G on fgedu_dev_tbs;
#
# 创建业务用户
SQL> create user fgedu_biz identified by “Biz123” default tablespace fgedu_biz_tbs temporary tablespace temp quota 10G on fgedu_biz_tbs;
#
# 创建财务用户
SQL> create user fgedu_fin identified by “Fin123” default tablespace fgedutbs temporary tablespace temp;
# 4. 角色创建与权限分配
#
# 创建角色
SQL> create role admin_role;
SQL> create role dev_role;
SQL> create role test_role;
SQL> create role biz_role;
SQL> create role fin_role;
#
# 授予角色权限
SQL> grant dba to admin_role;
SQL> grant create session, create table, create view, create procedure to dev_role;
SQL> grant create session, select any table, insert any table, update any table, delete any table to test_role;
SQL> grant create session, select any table, insert any table, update any table, delete any table to biz_role;
SQL> grant create session, select any table to fin_role;
#
# 将角色授予用户
SQL> grant admin_role to fgedu_admin;
SQL> grant dev_role to fgedu_dev;
SQL> grant test_role to fgedu_test;
SQL> grant biz_role to fgedu_biz;
SQL> grant fin_role to fgedu_fin;
# 5. 用户状态管理
#
# 查看用户状态
SQL> select username, account_status from dba_users where username like ‘FGEDU%’;
#
# 锁定测试用户
SQL> alter user fgedu_test account lock;
#
# 解锁测试用户
SQL> alter user fgedu_test account unlock;
#
# 密码过期处理
SQL> alter user fgedu_biz password expire;
# 6. 用户空间管理
#
# 查看用户空间使用情况
SQL> select username, tablespace_name, bytes/1024/1024 as used_mb, max_bytes/1024/1024 as max_mb from dba_ts_quotas where username like ‘FGEDU%’;
#
# 调整用户空间限额
SQL> alter user fgedu_dev quota 10G on fgedu_dev_tbs;
#
# 扩展表空间
SQL> alter tablespace fgedu_biz_tbs add datafile ‘/dm/fgdata/fgedudb/fgedu_biz_tbs02.dbf’ size 20G autoextend on next 2G maxsize 100G;
# 7. 用户审计
#
# 启用审计
SQL> alter system set ‘AUDIT_TRAIL’ = 1 scope=spfile;
SQL> alter system set ‘AUDIT_SYS_OPER’ = 1 scope=spfile;
SQL> alter system set ‘AUDIT_DDL’ = 1 scope=spfile;
SQL> alter system set ‘AUDIT_DML’ = 1 scope=spfile;
#
# 重启实例使参数生效
$ /dm/app/bin/DmServicefgedudb restart
#
# 查看用户操作审计
SQL> select * from sysaudit.sys_audit where user_name like ‘FGEDU%’ order by audit_time desc;
# 8. 效果评估
#
# 用户创建成功
– 所有用户已创建
– 所有用户状态正常
– 所有用户权限已分配
#
# 权限管理有效
– 不同部门用户具有不同权限
– 权限符合最小权限原则
– 权限分配合理
#
# 空间管理有效
– 所有用户有足够的空间
– 空间使用情况正常
– 表空间扩展正常
#
# 审计功能正常
– 审计记录完整
– 审计数据可查询
– 审计功能有效
# 用户管理案例
##
# 场景描述
某企业需要为不同部门创建DM数据库用户,并设置相应的权限和空间限额。
##
# 实施步骤
# 1. 用户规划
#
# 确定用户需求
– 技术部门:需要开发和测试权限
– 业务部门:需要读写权限
– 财务部门:需要只读权限
– 管理部门:需要管理权限
#
# 设计用户方案
– 技术部门:fgedu_dev(开发用户)、fgedu_test(测试用户)
– 业务部门:fgedu_biz(业务用户)
– 财务部门:fgedu_fin(财务用户)
– 管理部门:fgedu_admin(管理用户)
# 2. 表空间创建
#
# 创建表空间
$ disql SYSDBA/SYSDBA
SQL> create tablespace fgedutbs datafile ‘/dm/fgdata/fgedudb/fgedutbs01.dbf’ size 10G autoextend on next 1G maxsize 50G;
SQL> create tablespace fgedu_dev_tbs datafile ‘/dm/fgdata/fgedudb/fgedu_dev_tbs01.dbf’ size 5G autoextend on next 500M maxsize 20G;
SQL> create tablespace fgedu_biz_tbs datafile ‘/dm/fgdata/fgedudb/fgedu_biz_tbs01.dbf’ size 20G autoextend on next 2G maxsize 100G;
# 3. 用户创建
#
# 创建管理用户
SQL> create user fgedu_admin identified by “Admin123” default tablespace fgedutbs temporary tablespace temp;
#
# 创建开发用户
SQL> create user fgedu_dev identified by “Dev123” default tablespace fgedu_dev_tbs temporary tablespace temp quota 5G on fgedu_dev_tbs;
#
# 创建测试用户
SQL> create user fgedu_test identified by “Test123” default tablespace fgedu_dev_tbs temporary tablespace temp quota 2G on fgedu_dev_tbs;
#
# 创建业务用户
SQL> create user fgedu_biz identified by “Biz123” default tablespace fgedu_biz_tbs temporary tablespace temp quota 10G on fgedu_biz_tbs;
#
# 创建财务用户
SQL> create user fgedu_fin identified by “Fin123” default tablespace fgedutbs temporary tablespace temp;
# 4. 角色创建与权限分配
#
# 创建角色
SQL> create role admin_role;
SQL> create role dev_role;
SQL> create role test_role;
SQL> create role biz_role;
SQL> create role fin_role;
#
# 授予角色权限
SQL> grant dba to admin_role;
SQL> grant create session, create table, create view, create procedure to dev_role;
SQL> grant create session, select any table, insert any table, update any table, delete any table to test_role;
SQL> grant create session, select any table, insert any table, update any table, delete any table to biz_role;
SQL> grant create session, select any table to fin_role;
#
# 将角色授予用户
SQL> grant admin_role to fgedu_admin;
SQL> grant dev_role to fgedu_dev;
SQL> grant test_role to fgedu_test;
SQL> grant biz_role to fgedu_biz;
SQL> grant fin_role to fgedu_fin;
# 5. 用户状态管理
#
# 查看用户状态
SQL> select username, account_status from dba_users where username like ‘FGEDU%’;
#
# 锁定测试用户
SQL> alter user fgedu_test account lock;
#
# 解锁测试用户
SQL> alter user fgedu_test account unlock;
#
# 密码过期处理
SQL> alter user fgedu_biz password expire;
# 6. 用户空间管理
#
# 查看用户空间使用情况
SQL> select username, tablespace_name, bytes/1024/1024 as used_mb, max_bytes/1024/1024 as max_mb from dba_ts_quotas where username like ‘FGEDU%’;
#
# 调整用户空间限额
SQL> alter user fgedu_dev quota 10G on fgedu_dev_tbs;
#
# 扩展表空间
SQL> alter tablespace fgedu_biz_tbs add datafile ‘/dm/fgdata/fgedudb/fgedu_biz_tbs02.dbf’ size 20G autoextend on next 2G maxsize 100G;
# 7. 用户审计
#
# 启用审计
SQL> alter system set ‘AUDIT_TRAIL’ = 1 scope=spfile;
SQL> alter system set ‘AUDIT_SYS_OPER’ = 1 scope=spfile;
SQL> alter system set ‘AUDIT_DDL’ = 1 scope=spfile;
SQL> alter system set ‘AUDIT_DML’ = 1 scope=spfile;
#
# 重启实例使参数生效
$ /dm/app/bin/DmServicefgedudb restart
#
# 查看用户操作审计
SQL> select * from sysaudit.sys_audit where user_name like ‘FGEDU%’ order by audit_time desc;
# 8. 效果评估
#
# 用户创建成功
– 所有用户已创建
– 所有用户状态正常
– 所有用户权限已分配
#
# 权限管理有效
– 不同部门用户具有不同权限
– 权限符合最小权限原则
– 权限分配合理
#
# 空间管理有效
– 所有用户有足够的空间
– 空间使用情况正常
– 表空间扩展正常
#
# 审计功能正常
– 审计记录完整
– 审计数据可查询
– 审计功能有效
4.2 DM数据库权限管理案例
以下是一个权限管理的案例:
#
# 权限管理案例
##
# 场景描述
某企业需要为不同角色的用户分配不同的权限,确保数据安全和操作合规。
##
# 实施步骤
# 1. 权限规划
#
# 确定权限需求
– 管理员:需要所有权限
– 开发人员:需要开发相关权限
– 业务用户:需要业务操作权限
– 报表用户:需要只读权限
#
# 设计权限方案
– 管理员:DBA权限
– 开发人员:CREATE TABLE, CREATE VIEW, CREATE PROCEDURE等权限
– 业务用户:SELECT, INSERT, UPDATE, DELETE等权限
– 报表用户:SELECT权限
# 2. 角色创建
#
# 创建角色
$ disql SYSDBA/SYSDBA
SQL> create role admin_role;
SQL> create role dev_role;
SQL> create role biz_role;
SQL> create role report_role;
# 3. 权限分配
#
# 授予管理员角色权限
SQL> grant dba to admin_role;
#
# 授予开发人员角色权限
SQL> grant create session, create table, create view, create procedure, create sequence, create index to dev_role;
SQL> grant select any table, insert any table, update any table, delete any table to dev_role;
#
# 授予业务用户角色权限
SQL> grant create session to biz_role;
SQL> grant select, insert, update, delete on fgedu.t_user to biz_role;
SQL> grant select, insert, update, delete on fgedu.t_order to biz_role;
SQL> grant select, insert, update, delete on fgedu.t_product to biz_role;
#
# 授予报表用户角色权限
SQL> grant create session to report_role;
SQL> grant select on fgedu.t_user to report_role;
SQL> grant select on fgedu.t_order to report_role;
SQL> grant select on fgedu.t_product to report_role;
# 4. 用户创建与角色分配
#
# 创建用户
SQL> create user fgedu_admin identified by “Admin123”;
SQL> create user fgedu_dev identified by “Dev123”;
SQL> create user fgedu_biz identified by “Biz123”;
SQL> create user fgedu_report identified by “Report123”;
#
# 分配角色
SQL> grant admin_role to fgedu_admin;
SQL> grant dev_role to fgedu_dev;
SQL> grant biz_role to fgedu_biz;
SQL> grant report_role to fgedu_report;
# 5. 权限验证
#
# 验证管理员权限
$ disql fgedu_admin/Admin123
SQL> create table test_admin (id int, name varchar(50));
SQL> drop table test_admin;
#
# 验证开发人员权限
$ disql fgedu_dev/Dev123
SQL> create table test_dev (id int, name varchar(50));
SQL> insert into fgedu.t_user values (1, ‘Test’);
SQL> select * from fgedu.t_user;
#
# 验证业务用户权限
$ disql fgedu_biz/Biz123
SQL> select * from fgedu.t_user;
SQL> insert into fgedu.t_user values (2, ‘Biz’);
SQL> update fgedu.t_user set name = ‘Biz Updated’ where id = 2;
SQL> delete from fgedu.t_user where id = 2;
#
# 验证报表用户权限
$ disql fgedu_report/Report123
SQL> select * from fgedu.t_user;
SQL> insert into fgedu.t_user values (3, ‘Report’);
— 预期错误:权限不足
# 6. 权限审计
#
# 启用权限审计
SQL> alter system set ‘AUDIT_TRAIL’ = 1 scope=spfile;
SQL> alter system set ‘AUDIT_SYS_OPER’ = 1 scope=spfile;
SQL> alter system set ‘AUDIT_DDL’ = 1 scope=spfile;
SQL> alter system set ‘AUDIT_DML’ = 1 scope=spfile;
#
# 重启实例使参数生效
$ /dm/app/bin/DmServicefgedudb restart
#
# 查看权限审计记录
SQL> select * from sysaudit.sys_audit where audit_type = ‘GRANT’ or audit_type = ‘REVOKE’ order by audit_time desc;
SQL> select * from sysaudit.sys_audit_object where user_name like ‘FGEDU%’ order by audit_time desc;
# 7. 权限调整
#
# 调整开发人员权限
SQL> revoke delete any table from dev_role;
#
# 调整业务用户权限
SQL> grant select on fgedu.t_product to biz_role;
#
# 调整报表用户权限
SQL> grant select on fgedu.t_order to report_role;
# 8. 效果评估
#
# 权限分配合理
– 不同角色用户具有不同权限
– 权限符合最小权限原则
– 权限满足业务需求
#
# 权限验证通过
– 管理员可以执行所有操作
– 开发人员可以执行开发相关操作
– 业务用户可以执行业务操作
– 报表用户只能执行查询操作
#
# 权限审计有效
– 权限变更有审计记录
– 操作有审计记录
– 审计数据可查询
#
# 权限调整及时
– 权限调整符合业务需求
– 权限调整有审计记录
– 权限调整生效
# 权限管理案例
##
# 场景描述
某企业需要为不同角色的用户分配不同的权限,确保数据安全和操作合规。
##
# 实施步骤
# 1. 权限规划
#
# 确定权限需求
– 管理员:需要所有权限
– 开发人员:需要开发相关权限
– 业务用户:需要业务操作权限
– 报表用户:需要只读权限
#
# 设计权限方案
– 管理员:DBA权限
– 开发人员:CREATE TABLE, CREATE VIEW, CREATE PROCEDURE等权限
– 业务用户:SELECT, INSERT, UPDATE, DELETE等权限
– 报表用户:SELECT权限
# 2. 角色创建
#
# 创建角色
$ disql SYSDBA/SYSDBA
SQL> create role admin_role;
SQL> create role dev_role;
SQL> create role biz_role;
SQL> create role report_role;
# 3. 权限分配
#
# 授予管理员角色权限
SQL> grant dba to admin_role;
#
# 授予开发人员角色权限
SQL> grant create session, create table, create view, create procedure, create sequence, create index to dev_role;
SQL> grant select any table, insert any table, update any table, delete any table to dev_role;
#
# 授予业务用户角色权限
SQL> grant create session to biz_role;
SQL> grant select, insert, update, delete on fgedu.t_user to biz_role;
SQL> grant select, insert, update, delete on fgedu.t_order to biz_role;
SQL> grant select, insert, update, delete on fgedu.t_product to biz_role;
#
# 授予报表用户角色权限
SQL> grant create session to report_role;
SQL> grant select on fgedu.t_user to report_role;
SQL> grant select on fgedu.t_order to report_role;
SQL> grant select on fgedu.t_product to report_role;
# 4. 用户创建与角色分配
#
# 创建用户
SQL> create user fgedu_admin identified by “Admin123”;
SQL> create user fgedu_dev identified by “Dev123”;
SQL> create user fgedu_biz identified by “Biz123”;
SQL> create user fgedu_report identified by “Report123”;
#
# 分配角色
SQL> grant admin_role to fgedu_admin;
SQL> grant dev_role to fgedu_dev;
SQL> grant biz_role to fgedu_biz;
SQL> grant report_role to fgedu_report;
# 5. 权限验证
#
# 验证管理员权限
$ disql fgedu_admin/Admin123
SQL> create table test_admin (id int, name varchar(50));
SQL> drop table test_admin;
#
# 验证开发人员权限
$ disql fgedu_dev/Dev123
SQL> create table test_dev (id int, name varchar(50));
SQL> insert into fgedu.t_user values (1, ‘Test’);
SQL> select * from fgedu.t_user;
#
# 验证业务用户权限
$ disql fgedu_biz/Biz123
SQL> select * from fgedu.t_user;
SQL> insert into fgedu.t_user values (2, ‘Biz’);
SQL> update fgedu.t_user set name = ‘Biz Updated’ where id = 2;
SQL> delete from fgedu.t_user where id = 2;
#
# 验证报表用户权限
$ disql fgedu_report/Report123
SQL> select * from fgedu.t_user;
SQL> insert into fgedu.t_user values (3, ‘Report’);
— 预期错误:权限不足
# 6. 权限审计
#
# 启用权限审计
SQL> alter system set ‘AUDIT_TRAIL’ = 1 scope=spfile;
SQL> alter system set ‘AUDIT_SYS_OPER’ = 1 scope=spfile;
SQL> alter system set ‘AUDIT_DDL’ = 1 scope=spfile;
SQL> alter system set ‘AUDIT_DML’ = 1 scope=spfile;
#
# 重启实例使参数生效
$ /dm/app/bin/DmServicefgedudb restart
#
# 查看权限审计记录
SQL> select * from sysaudit.sys_audit where audit_type = ‘GRANT’ or audit_type = ‘REVOKE’ order by audit_time desc;
SQL> select * from sysaudit.sys_audit_object where user_name like ‘FGEDU%’ order by audit_time desc;
# 7. 权限调整
#
# 调整开发人员权限
SQL> revoke delete any table from dev_role;
#
# 调整业务用户权限
SQL> grant select on fgedu.t_product to biz_role;
#
# 调整报表用户权限
SQL> grant select on fgedu.t_order to report_role;
# 8. 效果评估
#
# 权限分配合理
– 不同角色用户具有不同权限
– 权限符合最小权限原则
– 权限满足业务需求
#
# 权限验证通过
– 管理员可以执行所有操作
– 开发人员可以执行开发相关操作
– 业务用户可以执行业务操作
– 报表用户只能执行查询操作
#
# 权限审计有效
– 权限变更有审计记录
– 操作有审计记录
– 审计数据可查询
#
# 权限调整及时
– 权限调整符合业务需求
– 权限调整有审计记录
– 权限调整生效
4.3 DM数据库角色管理案例
以下是一个角色管理的案例:
#
# 角色管理案例
##
# 场景描述
某企业需要设计和实施DM数据库角色管理,实现权限的层次化管理和简化权限管理。
##
# 实施步骤
# 1. 角色规划
#
# 确定角色需求
– 基础角色:提供基本的连接权限
– 功能角色:提供特定功能的权限
– 管理角色:提供管理权限
– 应用角色:提供应用特定的权限
#
# 设计角色层次结构
– 基础角色 → 功能角色 → 管理角色
– 基础角色 → 应用角色
# 2. 角色创建
#
# 创建基础角色
$ disql SYSDBA/SYSDBA
SQL> create role base_role;
SQL> grant create session to base_role;
#
# 创建功能角色
SQL> create role read_role;
SQL> grant base_role to read_role;
SQL> grant select any table to read_role;
SQL> create role write_role;
SQL> grant base_role to write_role;
SQL> grant select any table, insert any table, update any table, delete any table to write_role;
SQL> create role dev_role;
SQL> grant write_role to dev_role;
SQL> grant create table, create view, create procedure, create sequence, create index to dev_role;
#
# 创建管理角色
SQL> create role admin_role;
SQL> grant dev_role to admin_role;
SQL> grant create user, drop user, alter user, create tablespace, drop tablespace, alter tablespace to admin_role;
#
# 创建应用角色
SQL> create role app_role;
SQL> grant base_role to app_role;
SQL> grant select, insert, update, delete on fgedu.t_user to app_role;
SQL> grant select, insert, update, delete on fgedu.t_order to app_role;
# 3. 角色分配
#
# 创建用户
SQL> create user fgedu_read identified by “Read123”;
SQL> create user fgedu_write identified by “Write123”;
SQL> create user fgedu_dev identified by “Dev123”;
SQL> create user fgedu_admin identified by “Admin123”;
SQL> create user fgedu_app identified by “App123”;
#
# 分配角色
SQL> grant read_role to fgedu_read;
SQL> grant write_role to fgedu_write;
SQL> grant dev_role to fgedu_dev;
SQL> grant admin_role to fgedu_admin;
SQL> grant app_role to fgedu_app;
# 4. 角色验证
#
# 验证只读用户
$ disql fgedu_read/Read123
SQL> select * from fgedu.t_user;
SQL> insert into fgedu.t_user values (1, ‘Test’);
— 预期错误:权限不足
#
# 验证读写用户
$ disql fgedu_write/Write123
SQL> select * from fgedu.t_user;
SQL> insert into fgedu.t_user values (1, ‘Test’);
SQL> update fgedu.t_user set name = ‘Test Updated’ where id = 1;
SQL> delete from fgedu.t_user where id = 1;
#
# 验证开发用户
$ disql fgedu_dev/Dev123
SQL> create table test_dev (id int, name varchar(50));
SQL> insert into test_dev values (1, ‘Test’);
SQL> select * from test_dev;
#
# 验证管理用户
$ disql fgedu_admin/Admin123
SQL> create user test_user identified by “Test123”;
SQL> drop user test_user;
#
# 验证应用用户
$ disql fgedu_app/App123
SQL> select * from fgedu.t_user;
SQL> insert into fgedu.t_user values (1, ‘App’);
SQL> update fgedu.t_user set name = ‘App Updated’ where id = 1;
SQL> delete from fgedu.t_user where id = 1;
# 5. 角色管理
#
# 查看角色信息
SQL> select * from dba_roles where role like ‘BASE_%’ or role like ‘READ_%’ or role like ‘WRITE_%’ or role like ‘DEV_%’ or role like ‘ADMIN_%’ or role like ‘APP_%’;
#
# 查看角色权限
SQL> select * from dba_sys_privs where grantee like ‘BASE_%’ or grantee like ‘READ_%’ or grantee like ‘WRITE_%’ or grantee like ‘DEV_%’ or grantee like ‘ADMIN_%’ or grantee like ‘APP_%’;
#
# 查看角色分配
SQL> select * from dba_role_privs where granted_role like ‘BASE_%’ or granted_role like ‘READ_%’ or granted_role like ‘WRITE_%’ or granted_role like ‘DEV_%’ or granted_role like ‘ADMIN_%’ or granted_role like ‘APP_%’;
# 6. 角色调整
#
# 调整只读角色权限
SQL> grant select any view to read_role;
#
# 调整开发角色权限
SQL> revoke delete any table from dev_role;
#
# 调整应用角色权限
SQL> grant select on fgedu.t_product to app_role;
# 7. 角色审计
#
# 启用角色审计
SQL> alter system set ‘AUDIT_TRAIL’ = 1 scope=spfile;
SQL> alter system set ‘AUDIT_SYS_OPER’ = 1 scope=spfile;
#
# 重启实例使参数生效
$ /dm/app/bin/DmServicefgedudb restart
#
# 查看角色审计记录
SQL> select * from sysaudit.sys_audit where audit_type = ‘GRANT’ or audit_type = ‘REVOKE’ order by audit_time desc;
# 8. 效果评估
#
# 角色设计合理
– 角色层次结构清晰
– 角色权限分配合理
– 角色满足业务需求
#
# 角色管理有效
– 角色创建成功
– 角色分配成功
– 角色权限调整成功
#
# 角色验证通过
– 不同角色用户具有不同权限
– 权限符合最小权限原则
– 权限满足业务需求
#
# 角色审计有效
– 角色变更有审计记录
– 角色操作有审计记录
– 审计数据可查询
# 角色管理案例
##
# 场景描述
某企业需要设计和实施DM数据库角色管理,实现权限的层次化管理和简化权限管理。
##
# 实施步骤
# 1. 角色规划
#
# 确定角色需求
– 基础角色:提供基本的连接权限
– 功能角色:提供特定功能的权限
– 管理角色:提供管理权限
– 应用角色:提供应用特定的权限
#
# 设计角色层次结构
– 基础角色 → 功能角色 → 管理角色
– 基础角色 → 应用角色
# 2. 角色创建
#
# 创建基础角色
$ disql SYSDBA/SYSDBA
SQL> create role base_role;
SQL> grant create session to base_role;
#
# 创建功能角色
SQL> create role read_role;
SQL> grant base_role to read_role;
SQL> grant select any table to read_role;
SQL> create role write_role;
SQL> grant base_role to write_role;
SQL> grant select any table, insert any table, update any table, delete any table to write_role;
SQL> create role dev_role;
SQL> grant write_role to dev_role;
SQL> grant create table, create view, create procedure, create sequence, create index to dev_role;
#
# 创建管理角色
SQL> create role admin_role;
SQL> grant dev_role to admin_role;
SQL> grant create user, drop user, alter user, create tablespace, drop tablespace, alter tablespace to admin_role;
#
# 创建应用角色
SQL> create role app_role;
SQL> grant base_role to app_role;
SQL> grant select, insert, update, delete on fgedu.t_user to app_role;
SQL> grant select, insert, update, delete on fgedu.t_order to app_role;
# 3. 角色分配
#
# 创建用户
SQL> create user fgedu_read identified by “Read123”;
SQL> create user fgedu_write identified by “Write123”;
SQL> create user fgedu_dev identified by “Dev123”;
SQL> create user fgedu_admin identified by “Admin123”;
SQL> create user fgedu_app identified by “App123”;
#
# 分配角色
SQL> grant read_role to fgedu_read;
SQL> grant write_role to fgedu_write;
SQL> grant dev_role to fgedu_dev;
SQL> grant admin_role to fgedu_admin;
SQL> grant app_role to fgedu_app;
# 4. 角色验证
#
# 验证只读用户
$ disql fgedu_read/Read123
SQL> select * from fgedu.t_user;
SQL> insert into fgedu.t_user values (1, ‘Test’);
— 预期错误:权限不足
#
# 验证读写用户
$ disql fgedu_write/Write123
SQL> select * from fgedu.t_user;
SQL> insert into fgedu.t_user values (1, ‘Test’);
SQL> update fgedu.t_user set name = ‘Test Updated’ where id = 1;
SQL> delete from fgedu.t_user where id = 1;
#
# 验证开发用户
$ disql fgedu_dev/Dev123
SQL> create table test_dev (id int, name varchar(50));
SQL> insert into test_dev values (1, ‘Test’);
SQL> select * from test_dev;
#
# 验证管理用户
$ disql fgedu_admin/Admin123
SQL> create user test_user identified by “Test123”;
SQL> drop user test_user;
#
# 验证应用用户
$ disql fgedu_app/App123
SQL> select * from fgedu.t_user;
SQL> insert into fgedu.t_user values (1, ‘App’);
SQL> update fgedu.t_user set name = ‘App Updated’ where id = 1;
SQL> delete from fgedu.t_user where id = 1;
# 5. 角色管理
#
# 查看角色信息
SQL> select * from dba_roles where role like ‘BASE_%’ or role like ‘READ_%’ or role like ‘WRITE_%’ or role like ‘DEV_%’ or role like ‘ADMIN_%’ or role like ‘APP_%’;
#
# 查看角色权限
SQL> select * from dba_sys_privs where grantee like ‘BASE_%’ or grantee like ‘READ_%’ or grantee like ‘WRITE_%’ or grantee like ‘DEV_%’ or grantee like ‘ADMIN_%’ or grantee like ‘APP_%’;
#
# 查看角色分配
SQL> select * from dba_role_privs where granted_role like ‘BASE_%’ or granted_role like ‘READ_%’ or granted_role like ‘WRITE_%’ or granted_role like ‘DEV_%’ or granted_role like ‘ADMIN_%’ or granted_role like ‘APP_%’;
# 6. 角色调整
#
# 调整只读角色权限
SQL> grant select any view to read_role;
#
# 调整开发角色权限
SQL> revoke delete any table from dev_role;
#
# 调整应用角色权限
SQL> grant select on fgedu.t_product to app_role;
# 7. 角色审计
#
# 启用角色审计
SQL> alter system set ‘AUDIT_TRAIL’ = 1 scope=spfile;
SQL> alter system set ‘AUDIT_SYS_OPER’ = 1 scope=spfile;
#
# 重启实例使参数生效
$ /dm/app/bin/DmServicefgedudb restart
#
# 查看角色审计记录
SQL> select * from sysaudit.sys_audit where audit_type = ‘GRANT’ or audit_type = ‘REVOKE’ order by audit_time desc;
# 8. 效果评估
#
# 角色设计合理
– 角色层次结构清晰
– 角色权限分配合理
– 角色满足业务需求
#
# 角色管理有效
– 角色创建成功
– 角色分配成功
– 角色权限调整成功
#
# 角色验证通过
– 不同角色用户具有不同权限
– 权限符合最小权限原则
– 权限满足业务需求
#
# 角色审计有效
– 角色变更有审计记录
– 角色操作有审计记录
– 审计数据可查询
Part05-风哥经验总结与分享
5.1 DM数据库用户管理经验总结
基于多年DM数据库运维经验,总结以下用户管理经验:
- 用户规划:根据业务需求和安全要求,合理规划用户类型和数量
- 用户命名规范:使用统一的命名规范,便于管理和识别
- 密码策略:使用强密码策略,定期更换密码,限制登录失败次数
- 用户状态管理:及时锁定或删除不需要的用户,避免安全风险
- 用户空间管理:合理分配表空间,设置空间限额,避免空间浪费
- 用户审计:启用用户操作审计,及时发现和处理异常操作
- 用户培训:对用户进行安全培训,提高安全意识
- 用户支持:及时解决用户问题,提供技术支持
- 用户监控:监控用户登录和操作情况,及时发现异常
- 用户生命周期管理:建立用户生命周期管理流程,从创建到删除的全过程管理
生产环境建议:用户管理是数据库安全的基础,需要定期审查和优化,确保用户管理的有效性和安全性。
5.2 DM数据库权限管理经验总结
基于多年DM数据库运维经验,总结以下权限管理经验:
- 最小权限原则:只授予用户必要的权限,避免权限过大
- 权限分离:将不同功能的权限分离,避免权限集中
- 权限继承:通过角色实现权限继承,简化权限管理
- 权限审计:定期审计用户权限,发现和修复权限问题
- 权限回收:及时回收不必要的权限,减少安全风险
- 权限监控:监控权限使用情况,及时发现异常
- 权限文档:建立权限管理文档,记录权限分配情况
- 权限培训:对管理员进行权限管理培训,提高权限管理水平
- 权限测试:定期测试权限设置,确保权限有效
- 权限优化:根据业务需求变化,及时调整权限设置
5.3 DM数据库角色管理经验总结
基于多年DM数据库运维经验,总结以下角色管理经验:
- 角色规划:根据业务需求和权限管理需要,合理规划角色
- 角色层次结构:设计清晰的角色层次结构,便于权限管理
- 角色命名规范:使用统一的命名规范,便于识别和管理
- 角色权限管理:合理分配角色权限,避免权限过大或过小
- 角色分配:根据用户职责和需求,合理分配角色
- 角色审计:定期审计角色权限和分配情况,发现和修复问题
- 角色调整:根据业务需求变化,及时调整角色权限和分配
- 角色文档:建立角色管理文档,记录角色设计和分配情况
- 角色培训:对管理员进行角色管理培训,提高角色管理水平
- 角色优化:定期优化角色设计和权限分配,提高权限管理效率
风哥提示:用户权限管理是数据库安全的重要组成部分,通过合理的用户规划、权限分配和角色管理,可以提高数据库的安全性和可靠性。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
