内容简介:本文介绍Oracle数据库保险库(DV)中命令规则(Command Rules)的概念、组件和功能,以及如何在生产环境中创建和管理命令规则来控制SQL命令的执行。风哥教程参考Oracle官方文档Security部分。
Part01-基础概念与理论知识
1.1 DV命令规则概念
DV命令规则(Command Rules)是Oracle数据库保险库中的一个重要组件,用于控制特定SQL命令的执行权限。命令规则可以限制哪些用户和角色可以执行特定的SQL命令,以及在什么条件下可以执行这些命令。
命令规则的主要作用:
- 控制特权用户的SQL命令执行
- 实施职责分离
- 防止未授权的命令执行
- 满足合规要求
1.2 DV命令规则组件
DV命令规则包含以下组件:
- 命令规则名称:唯一标识命令规则的名称
- 命令类型:要控制的SQL命令类型,如ALTER SYSTEM、DROP TABLE等
- 授权用户和角色:被允许执行命令的用户和角色
- 规则集:控制命令执行的规则集合
- 命令规则描述:描述命令规则的目的和范围
1.3 DV命令规则功能
DV命令规则提供以下功能:
- 控制特定SQL命令的执行权限
- 基于规则集实施基于上下文的命令执行控制
- 记录命令规则的违反情况
- 与其他数据库保险库组件集成
更多视频教程www.fgedu.net.cn
Part02-生产环境规划与建议
2.1 DV命令规则规划
DV命令规则规划包括:
- 确定需要控制的SQL命令
- 识别需要执行这些命令的用户和角色
- 设计命令规则的规则集和访问控制策略
- 规划命令规则的实施顺序
- 测试命令规则的有效性
2.2 命令规则设计最佳实践
命令规则设计的最佳实践:
- 优先控制高风险命令,如ALTER SYSTEM、DROP TABLE、TRUNCATE TABLE等
- 遵循最小权限原则,只授权必要的用户和角色
- 使用规则集实施基于上下文的命令执行控制
- 定期审查和更新命令规则配置
- 确保命令规则不会影响正常的数据库操作
2.3 性能影响评估
DV命令规则对性能的影响:
- 对命令执行的额外检查会增加SQL命令的处理时间
- 规则集的评估会增加命令执行的开销
- 详细的审计日志会增加存储和I/O开销
- 命令规则数量过多会增加管理复杂性
学习交流加群风哥微信: itpux-com
Part03-生产环境项目实施方案
DV命令规则的实施步骤:
- 确定需要控制的SQL命令
- 创建命令规则
- 配置命令规则的授权用户和角色
- 配置命令规则的规则集
- 启用命令规则
- 测试和验证
Part04-生产案例与实战讲解
4.1 创建DV命令规则
sqlplus dv_admin/DVAdminPassword123!@fgedudb
# 创建ALTER SYSTEM命令规则
SQL> EXEC DBMS_MACADM.CREATE_COMMAND_RULE(‘ALTER_SYSTEM_RULE’, ‘ALTER SYSTEM’, ‘DV_ADMIN’, NULL, ‘允许DV_ADMIN执行ALTER SYSTEM命令’);PL/SQL procedure successfully completed.
# 创建DROP TABLE命令规则
SQL> EXEC DBMS_MACADM.CREATE_COMMAND_RULE(‘DROP_TABLE_RULE’, ‘DROP TABLE’, ‘DV_ADMIN’, NULL, ‘允许DV_ADMIN执行DROP TABLE命令’);PL/SQL procedure successfully completed.
# 创建TRUNCATE TABLE命令规则
SQL> EXEC DBMS_MACADM.CREATE_COMMAND_RULE(‘TRUNCATE_TABLE_RULE’, ‘TRUNCATE TABLE’, ‘DV_ADMIN’, NULL, ‘允许DV_ADMIN执行TRUNCATE TABLE命令’);PL/SQL procedure successfully completed.
# 查看已创建的命令规则
SQL> SELECT rule_name, command, grantee, status FROM dba_dv_cmd_rule;RULE_NAME COMMAND GRANTEE STATUS
——————- ————— ———- ——–
ALTER_SYSTEM_RULE ALTER SYSTEM DV_ADMIN DISABLED
DROP_TABLE_RULE DROP TABLE DV_ADMIN DISABLED
TRUNCATE_TABLE_RULE TRUNCATE TABLE DV_ADMIN DISABLED
4.2 配置命令规则的授权用户和角色
SQL> EXEC DBMS_MACADM.ALTER_COMMAND_RULE(‘ALTER_SYSTEM_RULE’, ‘ALTER SYSTEM’, ‘SYS, DV_ADMIN’, NULL, ‘允许SYS和DV_ADMIN执行ALTER SYSTEM命令’);PL/SQL procedure successfully completed.
# 创建新的DROP TABLE命令规则,授权给DBA角色
SQL> EXEC DBMS_MACADM.CREATE_COMMAND_RULE(‘DROP_TABLE_DBA_RULE’, ‘DROP TABLE’, ‘DBA’, NULL, ‘允许DBA执行DROP TABLE命令’);PL/SQL procedure successfully completed.
# 查看命令规则的授权用户
SQL> SELECT rule_name, command, grantee FROM dba_dv_cmd_rule WHERE rule_name IN (‘ALTER_SYSTEM_RULE’, ‘DROP_TABLE_DBA_RULE’);RULE_NAME COMMAND GRANTEE
——————- ————— ———-
ALTER_SYSTEM_RULE ALTER SYSTEM SYS, DV_ADMIN
DROP_TABLE_DBA_RULE DROP TABLE DBA
学习交流加群风哥QQ113257174
4.3 配置命令规则的规则集
SQL> EXEC DBMS_MACADM.CREATE_FACTOR(‘DAY_OF_WEEK’, ‘星期几’, DBMS_MACADM.DBMS_MACUTL.FACTOR_TYPE_ENVIRONMENT, ‘GET_DAY_OF_WEEK’);PL/SQL procedure successfully completed.
# 创建工作时间规则集
SQL> EXEC DBMS_MACADM.CREATE_RULE_SET(‘WORK_HOURS_RULESET’, ‘只允许在工作时间执行命令’, DBMS_MACADM.DBMS_MACUTL.RULESET_TYPE_LOGICAL, TRUE, TRUE, ‘工作时间限制’);PL/SQL procedure successfully completed.
# 向规则集添加规则(周一到周五,9:00-18:00)
SQL> EXEC DBMS_MACADM.ADD_RULE_TO_RULE_SET(‘WORK_HOURS_RULESET’, ‘DAY_OF_WEEK IN (”MONDAY”, ”TUESDAY”, ”WEDNESDAY”, ”THURSDAY”, ”FRIDAY”) AND TO_CHAR(SYSDATE, ”HH24”) BETWEEN ”09” AND ”18”’, ‘只允许在工作时间执行命令’);PL/SQL procedure successfully completed.
# 将规则集关联到DROP TABLE命令规则
SQL> EXEC DBMS_MACADM.ALTER_COMMAND_RULE(‘DROP_TABLE_RULE’, ‘DROP TABLE’, ‘DV_ADMIN’, ‘WORK_HOURS_RULESET’, ‘只允许DV_ADMIN在工作时间执行DROP TABLE命令’);PL/SQL procedure successfully completed.
# 查看命令规则的规则集
SQL> SELECT rule_name, command, rule_set_name FROM dba_dv_cmd_rule WHERE rule_name = ‘DROP_TABLE_RULE’;RULE_NAME COMMAND RULE_SET_NAME
—————– ———– —————
DROP_TABLE_RULE DROP TABLE WORK_HOURS_RULESET
4.4 启用命令规则
SQL> EXEC DBMS_MACADM.ENABLE_COMMAND_RULE(‘ALTER_SYSTEM_RULE’);PL/SQL procedure successfully completed.
# 启用DROP TABLE命令规则
SQL> EXEC DBMS_MACADM.ENABLE_COMMAND_RULE(‘DROP_TABLE_RULE’);PL/SQL procedure successfully completed.
# 启用TRUNCATE TABLE命令规则
SQL> EXEC DBMS_MACADM.ENABLE_COMMAND_RULE(‘TRUNCATE_TABLE_RULE’);PL/SQL procedure successfully completed.
# 查看命令规则状态
SQL> SELECT rule_name, command, grantee, status FROM dba_dv_cmd_rule;RULE_NAME COMMAND GRANTEE STATUS
——————- ————— ————- ——–
ALTER_SYSTEM_RULE ALTER SYSTEM SYS, DV_ADMIN ENABLED
DROP_TABLE_RULE DROP TABLE DV_ADMIN ENABLED
TRUNCATE_TABLE_RULE TRUNCATE TABLE DV_ADMIN ENABLED
DROP_TABLE_DBA_RULE DROP TABLE DBA DISABLED
风哥提示:命令规则可以基于多种因素(如时间、IP地址、应用程序)来控制SQL命令的执行,增强了命令执行的安全性。
4.5 测试命令规则
SQL> CONN test_user/TestPassword123!@fgedudb
Connected.
# 测试执行ALTER SYSTEM命令(应该失败)
SQL> ALTER SYSTEM SET log_archive_dest_1 = ‘LOCATION=/arch’;ERROR at line 1:
ORA-01031: insufficient privileges
# 以DV_ADMIN身份登录
SQL> CONN dv_admin/DVAdminPassword123!@fgedudb
Connected.
# 测试执行ALTER SYSTEM命令(应该成功)
SQL> ALTER SYSTEM SET log_archive_dest_1 = ‘LOCATION=/arch’;System altered.
# 测试执行DROP TABLE命令(如果在工作时间内应该成功)
SQL> CREATE TABLE test_table (id NUMBER);Table created.
SQL> DROP TABLE test_table;Table dropped.
# 以DBA身份登录
SQL> CONN sys/SystemPassword123!@fgedudb AS SYSDBA
Connected.
# 测试执行ALTER SYSTEM命令(应该成功,因为SYS在授权列表中)
SQL> ALTER SYSTEM SET log_archive_format = ‘%t_%s_%r.dbf’;System altered.
4.6 管理命令规则
SQL> EXEC DBMS_MACADM.DISABLE_COMMAND_RULE(‘ALTER_SYSTEM_RULE’);PL/SQL procedure successfully completed.
# 修改命令规则
SQL> EXEC DBMS_MACADM.ALTER_COMMAND_RULE(‘ALTER_SYSTEM_RULE’, ‘ALTER SYSTEM’, ‘SYS, DV_ADMIN, DBA’, NULL, ‘允许SYS、DV_ADMIN和DBA执行ALTER SYSTEM命令’);PL/SQL procedure successfully completed.
# 删除命令规则
SQL> EXEC DBMS_MACADM.DROP_COMMAND_RULE(‘TRUNCATE_TABLE_RULE’);PL/SQL procedure successfully completed.
# 查看命令规则状态
SQL> SELECT rule_name, command, grantee, status FROM dba_dv_cmd_rule;RULE_NAME COMMAND GRANTEE STATUS
——————- ————— ——————- ——–
ALTER_SYSTEM_RULE ALTER SYSTEM SYS, DV_ADMIN, DBA DISABLED
DROP_TABLE_RULE DROP TABLE DV_ADMIN ENABLED
DROP_TABLE_DBA_RULE DROP TABLE DBA DISABLED
更多学习教程公众号风哥教程itpux_com
Part05-风哥经验总结与分享
5.1 DV命令规则最佳实践
- 优先控制高风险命令,如ALTER SYSTEM、DROP TABLE、TRUNCATE TABLE等
- 遵循最小权限原则,只授权必要的用户和角色
- 使用规则集实施基于上下文的命令执行控制
- 定期审查和更新命令规则配置
- 确保命令规则不会影响正常的数据库操作
5.2 常见问题与解决方案
- 性能下降:优化命令规则设计,只控制必要的命令
- 管理复杂性增加:建立清晰的命令规则管理流程和文档
- 误报和漏报:定期测试和验证命令规则的有效性
- 兼容性问题:确保应用程序与命令规则兼容
5.3 风哥建议
在生产环境中实施DV命令规则时,建议:
- 先在测试环境验证命令规则的性能影响
- 制定详细的命令规则实施计划,包括时间安排和回滚方案
- 对数据库保险库管理员和安全管理员进行培训
- 定期备份数据库保险库配置
- 将命令规则与其他安全措施(如领域、TDE、审计)结合使用
from oracle:www.itpux.com
