外观
Oracle 数据库 Vault 配置
Oracle Database Vault 概述
Database Vault 定义
Oracle Database Vault 是 Oracle 高级安全选项的一部分,用于控制对数据库的访问,防止特权用户(如 DBA)滥用权限。它通过实施分离职责和最小权限原则,增强数据库的安全性。
Database Vault 的核心功能
- 分离职责(SOD): 防止单一用户拥有过多权限
- 特权用户控制: 限制 DBA 等特权用户的访问
- 细粒度访问控制: 基于上下文的访问控制
- 实时监控: 监控和审计特权用户活动
- 合规性支持: 满足 GDPR、PCI DSS、HIPAA 等合规要求
Database Vault 架构
| 组件 | 描述 |
|---|---|
| Vault 管理器 | 管理 Vault 策略和配置 |
| 规则集 | 定义访问控制规则的集合 |
| 命令规则 | 控制特定 SQL 命令的执行 |
| 因素 | 基于上下文的访问条件(如时间、地点) |
| 领域 | 保护特定 schema、表或角色 |
| 审计 | 记录 Vault 相关活动 |
Database Vault 安装与配置
安装前提条件
- 已安装 Oracle 数据库(19c 或 21c)
- 已安装 Oracle 高级安全选项
- 数据库处于归档模式
- 已配置 TDE 钱包(可选但推荐)
- 具有 SYSDBA 权限
安装步骤
1. 检查 Database Vault 是否已安装
sql
-- 检查 Database Vault 状态
SELECT * FROM v$option WHERE parameter = 'Oracle Database Vault';
-- 检查 DVSYS 用户是否存在
SELECT username FROM dba_users WHERE username = 'DVSYS';2. 安装 Database Vault(如果未安装)
使用 Oracle Database Configuration Assistant (DBCA) 安装:
- 启动 DBCA:
dbca - 选择 "配置数据库选件"
- 选择目标数据库
- 在 "选件" 页面,勾选 "Oracle Database Vault"
- 输入 Vault 所有者密码和 Vault 账号密码
- 完成安装
3. 启用 Database Vault
sql
-- 以 SYS 用户登录
CONNECT SYS AS SYSDBA;
-- 关闭数据库
SHUTDOWN IMMEDIATE;
-- 启动到 mount 模式
STARTUP MOUNT;
-- 启用 Vault
ALTER DATABASE ARCHIVELOG;
ALTER SYSTEM SET ENABLE_DV = TRUE SCOPE=SPFILE;
-- 重启数据库
SHUTDOWN IMMEDIATE;
STARTUP;
-- 验证 Vault 是否已启用
SELECT * FROM v$option WHERE parameter = 'Oracle Database Vault';Database Vault 核心配置
1. 创建 Vault 管理员账号
sql
-- 以 DVOWNER 身份登录
CONNECT dvowner/password;
-- 创建 Vault 管理员
EXEC DBMS_MACADM.CREATE_ADMIN_USER(
username => 'DV_ADMIN',
password => 'DvAdmin123!',
dv_admin => TRUE,
dv_account => TRUE
);
-- 授予必要的系统权限
GRANT CREATE SESSION TO DV_ADMIN;2. 配置规则集
规则集是一组规则的集合,用于定义访问控制条件:
sql
-- 创建规则(允许工作日 9:00-17:00 访问)
EXEC DBMS_MACADM.CREATE_RULE(
rule_name => 'WORKING_HOURS_RULE',
rule_expr => 'TO_CHAR(SYSDATE, ''HH24:MI'') BETWEEN ''09:00'' AND ''17:00'' AND TO_CHAR(SYSDATE, ''DY'') NOT IN (''SAT'', ''SUN'')'
);
-- 创建规则集
EXEC DBMS_MACADM.CREATE_RULE_SET(
rule_set_name => 'WORKING_HOURS_RULE_SET',
description => '允许工作日 9:00-17:00 访问',
eval_options => DBMS_MACADM.REQUIRE_ALL,
audit_options => DBMS_MACADM.AUDIT_ON_FAILURE,
fail_options => DBMS_MACADM.FAIL_ON_LAST_RULE
);
-- 将规则添加到规则集
EXEC DBMS_MACADM.ADD_RULE_TO_RULE_SET(
rule_set_name => 'WORKING_HOURS_RULE_SET',
rule_name => 'WORKING_HOURS_RULE'
);3. 配置命令规则
命令规则用于控制特定 SQL 命令的执行:
sql
-- 创建命令规则(限制 ALTER SYSTEM 命令)
EXEC DBMS_MACADM.CREATE_COMMAND_RULE(
command_rule_name => 'RESTRICT_ALTER_SYSTEM',
command => 'ALTER SYSTEM',
rule_set_name => 'WORKING_HOURS_RULE_SET',
object_owner => '%',
object_name => '%',
enabled => DBMS_MACUTL.G_YES
);
-- 创建命令规则(限制 DROP TABLE 命令)
EXEC DBMS_MACADM.CREATE_COMMAND_RULE(
command_rule_name => 'RESTRICT_DROP_TABLE',
command => 'DROP TABLE',
rule_set_name => 'WORKING_HOURS_RULE_SET',
object_owner => 'HR',
object_name => '%',
enabled => DBMS_MACUTL.G_YES
);4. 配置领域(Realm)
领域用于保护特定的 schema、表或角色:
sql
-- 创建领域(保护 HR schema)
EXEC DBMS_MACADM.CREATE_REALM(
realm_name => 'HR_DATA_REALM',
description => '保护 HR 部门数据',
enabled => DBMS_MACUTL.G_YES
);
-- 将 schema 添加到领域
EXEC DBMS_MACADM.ADD_OBJECT_TO_REALM(
realm_name => 'HR_DATA_REALM',
object_owner => 'HR',
object_name => '%',
object_type => 'SCHEMA'
);
-- 添加授权用户到领域
EXEC DBMS_MACADM.ADD_AUTH_TO_REALM(
realm_name => 'HR_DATA_REALM',
grantee => 'HR_MANAGER',
auth_options => DBMS_MACADM.AUTH_OWNER
);
EXEC DBMS_MACADM.ADD_AUTH_TO_REALM(
realm_name => 'HR_DATA_REALM',
grantee => 'DV_ADMIN',
auth_options => DBMS_MACADM.AUTH_MANAGE
);5. 配置因素(Factor)
因素用于基于上下文条件控制访问:
sql
-- 创建主机因素(基于客户端 IP)
EXEC DBMS_MACADM.CREATE_FACTOR(
factor_name => 'CLIENT_IP',
factor_type => DBMS_MACADM.FACTOR_TYPE_HOST,
factor_value_set => DBMS_MACADM.GET_HOST,
description => '客户端 IP 地址',
enabled => DBMS_MACUTL.G_YES
);
-- 创建因素规则(只允许特定 IP 访问)
EXEC DBMS_MACADM.CREATE_FACTOR_LINK(
factor_link_name => 'ALLOWED_IP_LINK',
factor_name => 'CLIENT_IP',
factor_value => '192.168.1.%',
rule_set_name => 'WORKING_HOURS_RULE_SET',
enabled => DBMS_MACUTL.G_YES
);Database Vault 监控与审计
监控 Vault 活动
sql
-- 查看 Vault 审计日志
SELECT timestamp, db_user, os_user, userhost, client_program,
object_schema, object_name, action_name,
return_code, comment_text
FROM dvf$audit_trail
ORDER BY timestamp DESC;
-- 查看领域违规
SELECT * FROM dba_dv_realm_violations ORDER BY violation_time DESC;
-- 查看命令规则违规
SELECT * FROM dba_dv_command_rule_violations ORDER BY violation_time DESC;审计 Vault 配置更改
sql
-- 查看 Vault 配置更改
SELECT * FROM dba_dv_config_changes ORDER BY change_time DESC;
-- 查看规则集执行情况
SELECT * FROM dba_dv_rule_set_executions ORDER BY execution_time DESC;Oracle 19c vs 21c Database Vault 差异
Oracle 19c Database Vault 特性
- 支持基本的领域、命令规则和因素配置
- 需要单独安装和配置
- 基本的监控和审计功能
- 有限的自动化能力
Oracle 21c Database Vault 增强
1. 简化的安装和配置
- 集成到 Oracle Database Configuration Assistant (DBCA)
- 简化的命令行界面
- 增强的图形化管理界面
2. 增强的安全特性
- 零信任访问控制: 基于多个因素的访问控制
- 增强的特权用户管理: 更细粒度的 DBA 权限控制
- 机器学习驱动的异常检测: 检测异常的特权用户活动
- 增强的领域保护: 支持更多对象类型和更细粒度的保护
3. 改进的监控和审计
- 实时监控和告警
- 增强的审计日志
- 与 Oracle Enterprise Manager 深度集成
- 更丰富的报表和可视化
4. 增强的合规性支持
- 预定义的合规性模板(GDPR、PCI DSS、HIPAA)
- 自动化的合规性报告生成
- 增强的审计跟踪
版本迁移注意事项
- 从 19c 升级到 21c 时,现有 Vault 配置会自动迁移
- 建议升级后重新评估 Vault 策略,利用新的安全特性
- 考虑启用新的机器学习驱动的异常检测功能
- 重新配置审计设置,利用增强的审计功能
Database Vault 与合规性
GDPR 合规性
- 增强的数据访问控制
- 细粒度的审计跟踪
- 支持数据主体权利
- 分离职责原则
PCI DSS 合规性
- 限制对持卡人数据的访问
- 监控特权用户活动
- 防止未授权的数据修改
- 增强的审计功能
HIPAA 合规性
- 保护电子健康记录(EHR)
- 细粒度的访问控制
- 完整的审计跟踪
- 分离职责原则
常见问题(FAQ)
Q: Database Vault 会影响数据库性能吗?
A: Database Vault 会对数据库性能产生轻微影响(通常在 5-10% 之间),主要取决于配置的规则集和命令规则数量。建议在实施前进行性能测试,优化规则集设计。
Q: 如何管理 Database Vault 的紧急访问?
A: 应该建立紧急访问流程:
- 创建紧急访问账号,仅在紧急情况下使用
- 严格控制紧急访问账号的使用
- 记录所有紧急访问活动
- 定期审查紧急访问日志
Q: Database Vault 可以防止所有类型的攻击吗?
A: Database Vault 主要防止特权用户滥用权限,但不能防止所有类型的攻击:
- 不能防止 SQL 注入攻击
- 不能防止网络层攻击
- 不能防止物理攻击
- 应该与其他安全措施结合使用
Q: 如何备份和恢复 Database Vault 配置?
A:
- 使用 Oracle Data Pump 备份 DVSYS 和 DVF schema
- 备份数据库时,Vault 配置会自动包含在备份中
- 恢复数据库时,Vault 配置会自动恢复
- 建议定期导出 Vault 配置:
expdp dvsys/password directory=DATA_PUMP_DIR dumpfile=dv_config.dmp schemas=DVSYS,DVF
Q: 如何禁用 Database Vault?
A:
sql
-- 以 SYS 用户登录
CONNECT SYS AS SYSDBA;
-- 关闭数据库
SHUTDOWN IMMEDIATE;
-- 启动到 mount 模式
STARTUP MOUNT;
-- 禁用 Vault
ALTER SYSTEM SET ENABLE_DV = FALSE SCOPE=SPFILE;
-- 重启数据库
SHUTDOWN IMMEDIATE;
STARTUP;
-- 验证 Vault 是否已禁用
SELECT * FROM v$option WHERE parameter = 'Oracle Database Vault';Q: Database Vault 与其他 Oracle 安全功能有什么关系?
A:
- TDE: 保护数据存储,Database Vault 保护数据访问
- Data Redaction: 实时数据遮罩,Database Vault 控制数据访问
- Audit: 记录活动,Database Vault 防止未授权活动
- Label Security: 基于标签的访问控制,Database Vault 基于上下文的访问控制
最佳实践
- 规划先行: 在实施前制定详细的 Database Vault 策略和规划
- 从小规模开始: 先在非关键系统上实施,测试后再推广到生产环境
- 分离职责: 确保不同角色之间的职责分离
- 最小权限原则: 仅授予必要的权限
- 定期审查: 定期审查 Vault 配置和审计日志
- 测试紧急访问流程: 定期测试紧急访问流程,确保在紧急情况下可以正常访问
- 培训和意识: 对 DBA 和开发人员进行 Database Vault 培训
- 监控和告警: 配置实时监控和告警,及时发现异常活动
- 与其他安全措施结合: 结合 TDE、Data Redaction、Audit 等安全措施
- 文档化: 详细记录 Vault 配置和策略
Database Vault 实施案例
案例:保护 HR 数据
需求: 保护 HR 部门的敏感数据,防止 DBA 未经授权访问。
实施步骤:
- 创建领域: 创建 HR_DATA_REALM,保护 HR schema
- 添加授权用户: 仅允许 HR_MANAGER 和 DV_ADMIN 访问 HR schema
- 配置命令规则: 限制对 HR 表的 DROP 和 ALTER 命令
- 配置因素: 仅允许从公司网络访问 HR 数据
- 启用审计: 审计所有对 HR 数据的访问
实施效果:
- DBA 无法直接访问 HR 数据
- 所有对 HR 数据的访问都被审计
- 仅授权用户可以访问 HR 数据
- 仅从公司网络可以访问 HR 数据
案例:限制 DBA 权限
需求: 限制 DBA 用户的权限,防止滥用。
实施步骤:
- 创建命令规则: 限制 ALTER SYSTEM、DROP DATABASE 等危险命令
- 配置规则集: 仅允许在特定时间执行危险命令
- 配置因素: 仅允许从特定 IP 执行危险命令
- 启用审计: 审计所有 DBA 活动
实施效果:
- DBA 无法随意执行危险命令
- 所有 DBA 活动都被审计
- 仅在特定时间和地点可以执行危险命令
总结
Oracle Database Vault 是增强 Oracle 数据库安全性的重要工具,特别是对于保护敏感数据和防止特权用户滥用权限。它通过实施分离职责和最小权限原则,提供了细粒度的访问控制。Oracle 21c 提供了更强大的 Database Vault 功能,包括简化的安装和配置、增强的安全特性、改进的监控和审计以及增强的合规性支持。实施 Database Vault 时,需要根据业务需求和合规要求设计合适的策略,并与其他安全措施结合使用,以提供全面的数据库安全保护。
