内容简介:本文介绍Oracle数据库保险库(DV)中领域(Realm)的概念、组件和功能,以及如何在生产环境中创建和管理领域来保护敏感数据。风哥教程参考Oracle官方文档Security部分。
Part01-基础概念与理论知识
1.1 DV领域概念
DV领域(Realm)是Oracle数据库保险库中的一个核心组件,用于创建一个安全区域来保护数据库对象。领域可以包含表、视图、存储过程等数据库对象,只有授权的用户和角色才能访问这些对象。
领域的主要作用:
- 保护敏感数据免受未授权访问
- 实施职责分离
- 防止特权用户的滥用
- 满足合规要求
1.2 DV领域组件
DV领域包含以下组件:
- 领域名称:唯一标识领域的名称
- 领域描述:描述领域的目的和范围
- 关联对象:领域保护的数据库对象
- 授权用户和角色:被允许访问领域对象的用户和角色
- 规则集:控制对领域对象访问的规则集合
1.3 DV领域功能
DV领域提供以下功能:
- 保护数据库对象免受未授权访问
- 允许或拒绝特定用户和角色访问领域对象
- 基于规则集实施基于上下文的访问控制
- 记录对领域对象的访问活动
- 与其他数据库保险库组件集成
更多视频教程www.fgedu.net.cn
Part02-生产环境规划与建议
2.1 DV领域规划
DV领域规划包括:
- 确定需要保护的敏感数据和数据库对象
- 按业务功能或数据敏感度划分领域
- 识别需要访问领域对象的用户和角色
- 设计领域的层次结构(如果需要)
- 规划领域的规则集和访问控制策略
2.2 领域设计最佳实践
领域设计的最佳实践:
- 按业务功能划分领域,如HR、财务、客户数据等
- 只将真正敏感的对象添加到领域中
- 遵循最小权限原则,只授权必要的用户和角色
- 使用规则集实施基于上下文的访问控制
- 定期审查和更新领域配置
2.3 性能影响评估
DV领域对性能的影响:
- 对领域对象的访问会增加额外的权限检查
- 规则集的评估会增加访问控制的开销
- 详细的审计日志会增加存储和I/O开销
- 领域数量过多会增加管理复杂性
学习交流加群风哥微信: itpux-com
Part03-生产环境项目实施方案
DV领域的实施步骤:
- 确定需要保护的数据库对象
- 创建领域
- 向领域添加对象
- 向领域添加授权用户和角色
- 配置领域的规则集
- 启用领域
- 测试和验证
Part04-生产案例与实战讲解
4.1 创建DV领域
sqlplus dv_admin/DVAdminPassword123!@fgedudb
# 创建HR数据领域
SQL> EXEC DBMS_MACADM.CREATE_REALM(‘HR_DATA_REALM’, ‘保护HR部门敏感数据’, ‘HR’);PL/SQL procedure successfully completed.
# 创建财务数据领域
SQL> EXEC DBMS_MACADM.CREATE_REALM(‘FINANCE_DATA_REALM’, ‘保护财务部门敏感数据’, ‘FINANCE’);PL/SQL procedure successfully completed.
# 查看已创建的领域
SQL> SELECT realm_name, description, status FROM dba_dv_realm;REALM_NAME DESCRIPTION STATUS
——————– —————————— ——–
HR_DATA_REALM 保护HR部门敏感数据 DISABLED
FINANCE_DATA_REALM 保护财务部门敏感数据 DISABLED
4.2 向领域添加对象
SQL> EXEC DBMS_MACADM.ADD_OBJECT_TO_REALM(‘HR_DATA_REALM’, ‘HR’, ‘EMPLOYEES’, ‘TABLE’);PL/SQL procedure successfully completed.
SQL> EXEC DBMS_MACADM.ADD_OBJECT_TO_REALM(‘HR_DATA_REALM’, ‘HR’, ‘DEPARTMENTS’, ‘TABLE’);PL/SQL procedure successfully completed.
SQL> EXEC DBMS_MACADM.ADD_OBJECT_TO_REALM(‘HR_DATA_REALM’, ‘HR’, ‘EMPLOYEES_VIEW’, ‘VIEW’);PL/SQL procedure successfully completed.
# 向财务数据领域添加对象
SQL> EXEC DBMS_MACADM.ADD_OBJECT_TO_REALM(‘FINANCE_DATA_REALM’, ‘FINANCE’, ‘ACCOUNTS’, ‘TABLE’);PL/SQL procedure successfully completed.
SQL> EXEC DBMS_MACADM.ADD_OBJECT_TO_REALM(‘FINANCE_DATA_REALM’, ‘FINANCE’, ‘TRANSACTIONS’, ‘TABLE’);PL/SQL procedure successfully completed.
# 查看领域中的对象
SQL> SELECT realm_name, object_owner, object_name, object_type FROM dba_dv_realm_objects WHERE realm_name = ‘HR_DATA_REALM’;REALM_NAME OBJECT_OWNER OBJECT_NAME OBJECT_TYPE
——————– ———— —————- —————
HR_DATA_REALM HR EMPLOYEES TABLE
HR_DATA_REALM HR DEPARTMENTS TABLE
HR_DATA_REALM HR EMPLOYEES_VIEW VIEW
学习交流加群风哥QQ113257174
4.3 向领域添加授权用户和角色
SQL> EXEC DBMS_MACADM.ADD_AUTH_TO_REALM(‘HR_DATA_REALM’, ‘HR_MANAGER’, DBMS_MACADM.DBMS_MACUTL.GRANT_ACCESS);PL/SQL procedure successfully completed.
SQL> EXEC DBMS_MACADM.ADD_AUTH_TO_REALM(‘HR_DATA_REALM’, ‘HR_USER’, DBMS_MACADM.DBMS_MACUTL.GRANT_ACCESS);PL/SQL procedure successfully completed.
SQL> EXEC DBMS_MACADM.ADD_AUTH_TO_REALM(‘HR_DATA_REALM’, ‘DV_ADMIN’, DBMS_MACADM.DBMS_MACUTL.GRANT_ACCESS);PL/SQL procedure successfully completed.
# 向财务数据领域添加授权用户和角色
SQL> EXEC DBMS_MACADM.ADD_AUTH_TO_REALM(‘FINANCE_DATA_REALM’, ‘FINANCE_MANAGER’, DBMS_MACADM.DBMS_MACUTL.GRANT_ACCESS);PL/SQL procedure successfully completed.
SQL> EXEC DBMS_MACADM.ADD_AUTH_TO_REALM(‘FINANCE_DATA_REALM’, ‘FINANCE_USER’, DBMS_MACADM.DBMS_MACUTL.GRANT_ACCESS);PL/SQL procedure successfully completed.
# 查看领域的授权用户和角色
SQL> SELECT realm_name, grantee_name, grantee_type, authorization_type FROM dba_dv_realm_auths WHERE realm_name = ‘HR_DATA_REALM’;REALM_NAME GRANTEE_NAME GRANTEE_TYPE AUTHORIZATION_TYPE
——————– ————— ———— ——————–
HR_DATA_REALM HR_MANAGER ROLE ACCESS
HR_DATA_REALM HR_USER ROLE ACCESS
HR_DATA_REALM DV_ADMIN ROLE ACCESS
4.4 配置领域的规则集
SQL> EXEC DBMS_MACADM.CREATE_FACTOR(‘IP_ADDRESS’, ‘客户端IP地址’, DBMS_MACADM.DBMS_MACUTL.FACTOR_TYPE_HOST, ‘GET_HOST_IP’);PL/SQL procedure successfully completed.
# 创建规则集
SQL> EXEC DBMS_MACADM.CREATE_RULE_SET(‘RESTRICTED_IP_RULESET’, ‘只允许从特定IP地址访问’, DBMS_MACADM.DBMS_MACUTL.RULESET_TYPE_LOGICAL, TRUE, TRUE, ‘IP地址限制’);PL/SQL procedure successfully completed.
# 向规则集添加规则
SQL> EXEC DBMS_MACADM.ADD_RULE_TO_RULE_SET(‘RESTRICTED_IP_RULESET’, ‘IP_ADDRESS = ”192.168.1.100” OR IP_ADDRESS = ”192.168.1.101”’, ‘只允许从指定IP地址访问’);PL/SQL procedure successfully completed.
# 将规则集关联到HR数据领域
SQL> EXEC DBMS_MACADM.ADD_RULE_SET_TO_REALM(‘HR_DATA_REALM’, ‘RESTRICTED_IP_RULESET’);PL/SQL procedure successfully completed.
# 查看领域的规则集
SQL> SELECT realm_name, rule_set_name FROM dba_dv_realm_rulesets WHERE realm_name = ‘HR_DATA_REALM’;REALM_NAME RULE_SET_NAME
——————– —————
HR_DATA_REALM RESTRICTED_IP_RULESET
风哥提示:规则集可以基于多种因素(如IP地址、时间、应用程序)来控制对领域对象的访问,增强了访问控制的灵活性。
4.5 启用领域
SQL> EXEC DBMS_MACADM.ENABLE_REALM(‘HR_DATA_REALM’);PL/SQL procedure successfully completed.
# 启用财务数据领域
SQL> EXEC DBMS_MACADM.ENABLE_REALM(‘FINANCE_DATA_REALM’);PL/SQL procedure successfully completed.
# 查看领域状态
SQL> SELECT realm_name, description, status FROM dba_dv_realm;REALM_NAME DESCRIPTION STATUS
——————– —————————— ——–
HR_DATA_REALM 保护HR部门敏感数据 ENABLED
FINANCE_DATA_REALM 保护财务部门敏感数据 ENABLED
4.6 测试领域访问控制
SQL> CONN hr_manager/HRManagerPassword123!@fgedudb
Connected.
# 测试访问HR领域对象
SQL> SELECT * FROM hr.employees WHERE rownum <= 5;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME EMAIL PHONE_NUMBER HIRE_DATE JOB_ID SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID
----------- ---------- ------------- --------------- -------------------- ---------- ---------- ---------- -------------- ---------- ------------- 100 Steven King SKING 515.123.4567 17-JUN-03 AD_PRES 24000 0 90
101 Neena Kochhar NKOCHHAR 515.123.4568 21-SEP-05 AD_VP 17000 100 90
102 Lex De Haan LDEHAAN 515.123.4569 13-JAN-01 AD_VP 17000 100 90
103 Alexander Hunold AHUNOLD 590.423.4567 03-JAN-06 IT_PROG 9000 102 60
104 Bruce Ernst BERNST 590.423.4568 21-MAY-07 IT_PROG 6000 103 60
# 测试访问财务领域对象(应该失败)
SQL> SELECT * FROM finance.accounts WHERE rownum <= 5;ERROR at line 1:
ORA-01031: insufficient privileges
# 以FINANCE_MANAGER身份登录
SQL> CONN finance_manager/FinanceManagerPassword123!@fgedudb
Connected.
# 测试访问财务领域对象
SQL> SELECT * FROM finance.accounts WHERE rownum <= 5;ACCOUNT_ID ACCOUNT_NAME BALANCE
---------- -------------------- ----------
1 公司账户 1000000
2 运营账户 500000
3 工资账户 300000
4 备用金账户 100000
5 投资账户 2000000
# 测试访问HR领域对象(应该失败)
SQL> SELECT * FROM hr.employees WHERE rownum <= 5;ERROR at line 1:
ORA-01031: insufficient privileges
更多学习教程公众号风哥教程itpux_com
4.7 管理领域
SQL> EXEC DBMS_MACADM.DISABLE_REALM(‘HR_DATA_REALM’);PL/SQL procedure successfully completed.
# 从领域中移除对象
SQL> EXEC DBMS_MACADM.REMOVE_OBJECT_FROM_REALM(‘HR_DATA_REALM’, ‘HR’, ‘EMPLOYEES_VIEW’, ‘VIEW’);PL/SQL procedure successfully completed.
# 从领域中移除授权
SQL> EXEC DBMS_MACADM.REMOVE_AUTH_FROM_REALM(‘HR_DATA_REALM’, ‘HR_USER’);PL/SQL procedure successfully completed.
# 删除领域
SQL> EXEC DBMS_MACADM.DROP_REALM(‘HR_DATA_REALM’);PL/SQL procedure successfully completed.
# 查看领域状态
SQL> SELECT realm_name, description, status FROM dba_dv_realm;REALM_NAME DESCRIPTION STATUS
——————– —————————— ——–
FINANCE_DATA_REALM 保护财务部门敏感数据 ENABLED
Part05-风哥经验总结与分享
5.1 DV领域最佳实践
- 按业务功能划分领域,便于管理和维护
- 只将真正敏感的对象添加到领域中,减少性能影响
- 遵循最小权限原则,只授权必要的用户和角色
- 使用规则集实施基于上下文的访问控制
- 定期审查和更新领域配置,确保安全策略的有效性
5.2 常见问题与解决方案
- 性能下降:优化领域设计,只保护真正敏感的数据
- 管理复杂性增加:建立清晰的领域管理流程和文档
- 误报和漏报:定期测试和验证领域访问控制策略
- 兼容性问题:确保应用程序与领域访问控制兼容
5.3 风哥建议
在生产环境中实施DV领域时,建议:
- 先在测试环境验证领域的性能影响
- 制定详细的领域实施计划,包括时间安排和回滚方案
- 对数据库保险库管理员和安全管理员进行培训
- 定期备份数据库保险库配置
- 将领域与其他安全措施(如TDE、VPD、审计)结合使用
from oracle:www.itpux.com
