暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle数据安全组件OLS实践

IT那活儿 2021-12-27
1016
点击上方“IT那活儿”,关注后了解更多精彩内容!!
众所周知,GRANT是控制对象访问,之前介绍的TDE是控制列和表的访问,而这次介绍的OLS(Oracle Label Security)是对表的数据行进行控制访问。

OLS简介

Oracle Label Security 使用分配给特定单个表行和应用程序用户的标签来控制单个表行的显示。
Oracle Label Security 的工作原理是将行标签与用户的标签授权进行比较,将敏感信息对授权用户进行控制访问。这样,具有不同权限级别的用户(例如,经理和销售代表)可以访问表中的特定数据行。也可以将 Oracle Label Security 策略应用于一个或多个应用程序表。Oracle Label Security 的设计类似于 Oracle Virtual Private Database (VPD)。但是,与 VPD 不同的是,Oracle Label Security 提供了开箱即用的访问中介功能、数据字典表和基于策略的体系结构。
OLS标签包括level,compartment和group。
其中level是必选,compartment和group是可选。level表示敏感度级别,如果用户标签的值大于等于数据标签,则允许访问。compartment和group的比较就是看是否包含。

OLS前置检查

1. 组件安装检查:
2. 检查是否配置和激活:
该组件在很多地方是没有安装,如未安装需要手工运行catols.sql脚本进行安装,然后进行配置和激活。

创建安全策略(Policy)

策略是实现Oracle Label Security 的一组命名命令。行级别的数据标签和对这些行的模式访问总是与一个策略相关联。
以LBACSYS身份建立连接,然后执行创建命令。第一个参数是该策略的名字,第二个参数是一个列的名字,OLS将把该列添加到你将在标签控制下替换的表内。

定义一个级别(level)

1. policy创建后,然后创建level,level数值越大则越重要。
EXEC sa_components.create_level('HN_POLICY', 1000, 'LOW', 'LOW LEVEL');EXEC sa_components.create_level('HN_POLICY', 2000, 'MIDDLE', 'MIDDLE LEVEL');EXEC sa_components.create_level('HN_POLICY', 3000, 'HIGH', 'HIGH LEVEL');
2. 创建compartment(可选)。
区间能够对一行数据的访问精确限定在一个级别之内。
EXEC sa_components.create_compartment('HN_POLICY', 100, 'GENERAL', 'GENERAL COMP');EXEC sa_components.create_compartment('HN_POLICY', 200, 'IMPORTANT', 'IMPORTANT COMP');EXEC sa_components.create_compartment('HN_POLICY', 300, 'VIP', 'VIP COMP');
3. 接着创建group(可选)。
和使用区间类似,使用分组是将访问限制在一个级别内的另一个可选用的方法。
EXEC sa_components.create_group('HN_POLICY', 10, 'APP', 'APP GROUP');EXEC sa_components.create_group('HN_POLICY', 20, 'DB', 'DB GROUP');EXEC sa_components.create_group('HN_POLICY', 30, 'DEV', 'DEV GROUP');

OLS标签

OLS标签分为两类,用户和数据。标签使你能够将数据的不同用户所要求的各种不同类型访问迅速地组合在一起。
step1 创建标签,类似如法如下:
EXEC sa_label_admin.create_label('HN_POLICY', '10100', 'LOW:GENERAL:', TRUE);
label是允许的level,compartment和group的组合。
标签列的插入可以直接插入数字或者to_data_label。
step2 接着赋予用户label:
exec sa_user_admin.set_user_labels('HN_POLICY','user1','LOW:GENERAL:');exec sa_user_admin.set_user_labels('HN_POLICY','user2','MIDDLE');exec sa_user_admin.set_user_labels('HN_POLICY','user3','HIGH:VIP:DEV');
step3 然后对表应用标签:
exec sa_policy_admin.apply_table_policy('HN_POLICY','USER4','TTT','ALL_CONTROL');
user4.ttt表上多出一列HN_LABEL。
step4 开始验证:
step5 测试表总数据量12条。
分别用user1,user2,user3登入数据库查询,可以看到,只能看到满足标签的数据。

总结

一般来说,OLS总是将security policy column放在where条件中。
可与partitioning结合提升性能。

本 文 原 创 来 源:IT那活儿微信公众号(上海新炬王翦团队)


文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论