Skip to content

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 安装与配置

安装前提条件

  1. 已安装 Oracle 数据库(19c 或 21c)
  2. 已安装 Oracle 高级安全选项
  3. 数据库处于归档模式
  4. 已配置 TDE 钱包(可选但推荐)
  5. 具有 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) 安装:

  1. 启动 DBCA:dbca
  2. 选择 "配置数据库选件"
  3. 选择目标数据库
  4. 在 "选件" 页面,勾选 "Oracle Database Vault"
  5. 输入 Vault 所有者密码和 Vault 账号密码
  6. 完成安装

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 基于上下文的访问控制

最佳实践

  1. 规划先行: 在实施前制定详细的 Database Vault 策略和规划
  2. 从小规模开始: 先在非关键系统上实施,测试后再推广到生产环境
  3. 分离职责: 确保不同角色之间的职责分离
  4. 最小权限原则: 仅授予必要的权限
  5. 定期审查: 定期审查 Vault 配置和审计日志
  6. 测试紧急访问流程: 定期测试紧急访问流程,确保在紧急情况下可以正常访问
  7. 培训和意识: 对 DBA 和开发人员进行 Database Vault 培训
  8. 监控和告警: 配置实时监控和告警,及时发现异常活动
  9. 与其他安全措施结合: 结合 TDE、Data Redaction、Audit 等安全措施
  10. 文档化: 详细记录 Vault 配置和策略

Database Vault 实施案例

案例:保护 HR 数据

需求: 保护 HR 部门的敏感数据,防止 DBA 未经授权访问。

实施步骤:

  1. 创建领域: 创建 HR_DATA_REALM,保护 HR schema
  2. 添加授权用户: 仅允许 HR_MANAGER 和 DV_ADMIN 访问 HR schema
  3. 配置命令规则: 限制对 HR 表的 DROP 和 ALTER 命令
  4. 配置因素: 仅允许从公司网络访问 HR 数据
  5. 启用审计: 审计所有对 HR 数据的访问

实施效果:

  • DBA 无法直接访问 HR 数据
  • 所有对 HR 数据的访问都被审计
  • 仅授权用户可以访问 HR 数据
  • 仅从公司网络可以访问 HR 数据

案例:限制 DBA 权限

需求: 限制 DBA 用户的权限,防止滥用。

实施步骤:

  1. 创建命令规则: 限制 ALTER SYSTEM、DROP DATABASE 等危险命令
  2. 配置规则集: 仅允许在特定时间执行危险命令
  3. 配置因素: 仅允许从特定 IP 执行危险命令
  4. 启用审计: 审计所有 DBA 活动

实施效果:

  • DBA 无法随意执行危险命令
  • 所有 DBA 活动都被审计
  • 仅在特定时间和地点可以执行危险命令

总结

Oracle Database Vault 是增强 Oracle 数据库安全性的重要工具,特别是对于保护敏感数据和防止特权用户滥用权限。它通过实施分离职责和最小权限原则,提供了细粒度的访问控制。Oracle 21c 提供了更强大的 Database Vault 功能,包括简化的安装和配置、增强的安全特性、改进的监控和审计以及增强的合规性支持。实施 Database Vault 时,需要根据业务需求和合规要求设计合适的策略,并与其他安全措施结合使用,以提供全面的数据库安全保护。