如何利用oracle 10g的列值掩码技术隐藏敏感数据
- 格式:doc
- 大小:23.50 KB
- 文档页数:2
加密算法概述在介绍oracle中的加密算法之前,大家首先要对加密算法有一个大致的了解,懂得为什么加密,如何加密,加密算法的分类。
一,为什么加密我们的系统中会存在一些极其敏感的数据,这些数据涉及到公司的机密。
自然这些是不想让其他公司或竞争对手看到的,所以就需要一种方法来对数据进行“包装”。
包装后的数据就象是增加了一层坚固的外壳,其他人很难看到壳内的敏感数据。
这种“包装”就是加密。
可见加密对于敏感数据的重要意义。
二,如何加密所谓“加密”,就是对原内容为明文的文件或数据按某种算法进行处理,使其成为不可读的代码,经过这样处理的数据通常称为“密文”,密文只能在经过相对应的反向算法处理后才能恢复原来的内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的,而将该编码信息转化为其原来数据的过程,就是“解密”。
最简单的加密就是通过改变明文中的字符位置来实现。
举个简单的例子,比如说welcome这个字符串,我通过交换相邻位置的字符位置来实现最简单的加密。
加密后的字符串变成ewclmoe。
这是简单的加密方式,可以说没有任何的安全性,但是可以说明加密的原理,就是通过一定的处理让明文转变成很难读懂的密文。
现在流行的加密算法是利用一复杂的密钥通过某种加密的算法将明文转化为密文。
既然是进行加密,那么和加密相关的密钥和加密算法自然也是需要保护的。
算法的保密性可以分为基于保持算法的秘密和基于保持密钥的秘密。
如果算法的保密性是基于保持算法的秘密,这种算法称为受限制的算法。
受限制的算法具有历史意义,但按现在的标准,它们的保密性已远远不够。
大的或经常变换的用户组织不能使用它们,因为每有一个用户离开这个组织,其它的用户就必须改换另外不同的算法。
如果有人无意暴露了这个秘密,所有人都必须改变他们的算法。
更糟的是,受限制的密码算法不可能进行质量控制或标准化。
每个用户组织必须有他们自己的唯一算法。
这样的组织不可能采用流行的硬件或软件产品。
使用ORACLE透明敏感数据保护(TSDP)目录关于TSDP (2)限制条件 (2)使用TSDP的步骤 (2)需要的权限 (3)涉及表/视图 (3)创建TSDP-ODR策略(脱敏效果) (4)显示效果 (4)说明 (4)配置策略 (4)1. 创建敏感类型 (4)2. 标识敏感列 (5)3. 创建TSDP保护策略 (6)4. 关联策略与类型 (7)5. 启用策略保护 (7)6. 删除策略 (8)创建TSDP-VPD策略(权控效果) (8)显示效果 (8)说明 (8)配置策略 (10)创建TSDP参数化脱敏策略 (12)效果 (12)配置策略 (12)测试语句如下 (14)注意: (14)创建TSDP-TDECE(列加密)策略 (14)说明 (14)策略配置 (16)创建TSDP-Unified Auditing(统一审计)策略 (18)审计效果 (18)说明 (18)配置策略 (20)可能错误 (22)PLS-00302&PLS-00201:必须声明‘PARENT_SCHEMA’组件 (22)ORA-45618:未能对一个或多个列强制执行策略 (22)ORA-00905: missing keyword during CREATE AUDIT POLICY (23)创建TSDP-FGA审计策略 (23)参考 (23)附件一 (24)关于TSDP透明敏感数据保护(Transparent Sensitive Data Protection)是一种查找和分类包含敏感列信息的方法。
此功能使您能够在数据库中快速找到包含敏感数据的表列,对这些数据进行分类,然后创建一个策略来保护给定分类的全部数据。
例如信用卡号码或社会保险号码。
然后,TSDP策略使用Oracle Data Redaction 或者Oracle Virtual Private Database 来保护这些敏感数据。
TSDP策略作用于特定的数据类型的列上,例如所有包含信用卡信息的NUMBER类型数据列。
第一种:数据库表保存密钥我要介绍的是oracle10g的数据加密处理,也就是通常的密码的加密处理,要用到DECRYPT方法对数据解密和ENCRYPT方法加密1.首先通过sys用户登录到oracle数据库,因为我们要通过这个用户来设置一些高级权限grant execute on DBMS_crypto to userName;这句是为了能让用户使用dbms这个方法,能够让我们sql语句种直接简单的调用就可以了,否则我们将无法使用加密和解密,数据库也会报错,不过我忘了是什么错误了,userName就是你通过程序访问数据库时的用户名,2.然后要建立一张表,这张表里就一个字段是用来存放一个key值,这个key值是要在接下来建立的方法种使用到的固定值CREATE TABLE KEYINFOMTBL(KEYCODE RAW(32) NOT NULL,CONSTRAINT KEYINFOMTBL_P PRIMARY KEY (KEYCODE)USING INDEX)/INSERT INTO KEYINFOMTBL V ALUES ( DBMS_CRYPTO.RANDOMBYTES (32) )通过这个两个sql语句建立表,并给表插入一条数据,注意字段的类型是raw型的,这个也是oracle数据库种加密要用的字段类型。
3.就是要建立一个方法,要对数据进行加密处理了,这也是关键的一个部分,我以前在网上看到很多文章来说明这个过程,但试了很多都不好用,我现在给出的例子完全好用,这也是我现在做的项目中使用的CREATE OR REPLACE FUNCTION ENCRYPT(INPUT_STRING V ARCHAR2)RETURN RAWISENCRYPTED_RAW RAW (4000);KEY_BYTES_RAW RAW (32);ENCRYPTION_TYPE PLS_INTEGER :=DBMS_CRYPTO.ENCRYPT_AES256+ DBMS_CRYPTO.CHAIN_CBC+ DBMS_CRYPTO.PAD_PKCS5;BEGINSELECT KEYCODE INTO KEY_BYTES_RAW FROM KEYINFOMTBL; ENCRYPTED_RAW := DBMS_CRYPTO.ENCRYPT(SRC => UTL_I18N.STRING_TO_RAW (INPUT_STRING, 'AL32UTF8'),TYP => ENCRYPTION_TYPE,KEY => KEY_BYTES_RAW);RETURN ENCRYPTED_RAW;END;这个方法为什么这样写,还要请oracle的高手来说明了,本人也不是很了解啊!嘿嘿4.就是要建立一个解密的方法了,CREATE OR REPLACE FUNCTION DECRYPT(INPUT_RAW RAW)RETURN V ARCHAR2ISOUTPUT_STRING V ARCHAR2(4000);DECRYPTED_RAW RAW (4000);KEY_BYTES_RAW RAW (32);ENCRYPTION_TYPE PLS_INTEGER :=DBMS_CRYPTO.ENCRYPT_AES256+ DBMS_CRYPTO.CHAIN_CBC+ DBMS_CRYPTO.PAD_PKCS5;BEGINSELECT KEYCODE INTO KEY_BYTES_RAW FROM KEYINFOMTBL;DECRYPTED_RAW := DBMS_CRYPTO.DECRYPT(SRC => INPUT_RAW,TYP => ENCRYPTION_TYPE,KEY => KEY_BYTES_RAW);OUTPUT_STRING := UTL_I18N.RAW_TO_CHAR (DECRYPTED_RAW, 'AL32UTF8');RETURN OUTPUT_STRING;END;/5.我现在要给出一个可以应用这个两个加密和解密的小的例子,可以很明显的看到是如何应用的你可以通过这个sql语句看一下我们在KEYINFOMTBL表种存的那个字段值是什么select UTL_I18N.RAW_TO_CHAR (KEYCODE, 'AL32UTF8') from KEYINFOMTBL;create table testpw(password raw(20))/使用插入的时候只要用ENCRYPT() 就可以将你的字符串加密了insert into testpw values ( ENCRYPT('nvgwngw383$') );你可以通过这个sql语句看到加密以后的数据效果select UTL_I18N.RAW_TO_CHAR (password, 'AL32UTF8') from testpw;通过下面的sql语句就可以将数据进行解密处理select DECRYPT(password) from testpw;第二种:写死密钥1.首先通过sys用户登录到oracle数据库,因为我们要通过这个用户来设置一些高级权限grant execute on DBMS_crypto to userName;这句是为了能让用户使用dbms这个方法,能够让我们sql语句种直接简单的调用就可以了,否则我们将无法使用加密和解密,数据库也会报错,不过我忘了是什么错误了,userName就是你通过程序访问数据库时的用户名2.执行sql,得到keycodeselect DBMS_CRYPTO.RANDOMBYTES(32)from dual3.就是要建立一个方法,要对数据进行加密处理了,这也是关键的一个部分,我以前在网上看到很多文章来说明这个过程,但试了很多都不好用,我现在给出的例子完全好用,这也是我现在做的项目中使用的CREATE OR REPLACE FUNCTION ENCRYPT(INPUT_STRING VARCHAR2)RETURN RAWISENCRYPTED_RAW RAW(4000);KEY_BYTES_RAWRAW(32):='42067A1A927255777EB3C7E6317C255B6C7372A1AFB2379A8ECBE6B9B09 4AC4A';--第二步生成的keycode就是替换这里的ENCRYPTION_TYPE PLS_INTEGER:=DBMS_CRYPTO.ENCRYPT_AES256+DBMS_CRYPTO.CHAIN_CBC+DBMS_CRYPTO.PAD_PKCS5;BEGINENCRYPTED_RAW :=DBMS_CRYPTO.ENCRYPT(SRC => UTL_I18N.STRING_TO_RAW (INPUT_STRING,'AL32UTF8'),TYP => ENCRYPTION_TYPE,KEY=> KEY_BYTES_RAW);RETURN ENCRYPTED_RAW;END;/这个方法为什么这样写,还要请oracle的高手来说明了,本人也不是很了解啊!嘿嘿4.就是要建立一个解密的方法了,CREATE OR REPLACE FUNCTION DECRYPT(INPUT_RAW RAW)RETURN VARCHAR2ISOUTPUT_STRING VARCHAR2(4000);DECRYPTED_RAW RAW(4000);KEY_BYTES_RAWRAW(32):='42067A1A927255777EB3C7E6317C255B6C7372A1AFB2379A8ECBE6B9B09 4AC4A'; --第二步生成的keycode就是替换这里的,与第三步要相同ENCRYPTION_TYPE PLS_INTEGER:=DBMS_CRYPTO.ENCRYPT_AES256+DBMS_CRYPTO.CHAIN_CBC+DBMS_CRYPTO.PAD_PKCS5;BEGINDECRYPTED_RAW :=DBMS_CRYPTO.DECRYPT(SRC => INPUT_RAW,TYP => ENCRYPTION_TYPE,KEY=> KEY_BYTES_RAW);OUTPUT_STRING := UTL_I18N.RAW_TO_CHAR (DECRYPTED_RAW,'AL32UTF8');RETURN OUTPUT_STRING;END;/5.我现在要给出一个可以应用这个两个加密和解密的小的例子,可以很明显的看到是如何应用的你可以通过这个sql语句看一下我们在KEYINFOMTBL表种存的那个字段值是什么select UTL_I18N.RAW_TO_CHAR (KEYCODE, 'AL32UTF8') from KEYINFOMTBL;create table testpw(password raw(20))/使用插入的时候只要用ENCRYPT() 就可以将你的字符串加密了insert into testpw values ( ENCRYPT('nvgwngw383$') );你可以通过这个sql语句看到加密以后的数据效果select UTL_I18N.RAW_TO_CHAR (password, 'AL32UTF8') from testpw;通过下面的sql语句就可以将数据进行解密处理select DECRYPT(password) from testpw;第三种: 密钥的保存不管我们用什么样的加密算法,有一点非常重要的是: 密钥的保存.密钥就是一把钥匙,因为加密算法是公开的,所以你无论如何加密,只要我知道你的密钥,我就可以解密,那么你的加密就没有效果.在本文中, 我们的密钥是这样定义的:-KEY_BYTES_RAWRAW(32):='42067A1A927255777EB3C7E6317C255B6C7372A1AFB2379A8ECBE6B9B09 4AC4A';42067A1A927255777EB3C7E6317C255B6C7372A1AFB2379A8ECBE6B9B094AC4A就是我们的密钥.所以,如果只是简单地把以上程序在oracle上运行一下就使用,那么任何有权限登陆的人看到这个程序,就可以知道密钥. 所以简单的做法是利用Oracle提供的WRAP把整个程序加密,用加密后的文本创建程序. 这样别人就看不到你的源代码了.把程序保存为source.sql,在Dos命令下输入:-Wrap iname=source.sql oname=target.sql就可以了,然后SQL Plus运行target.sql.当然了, 这里讲的密钥保存还是很简单的. 并不是百分百保险. 大家可以自己想想如何更安全地保持你的密钥.。
Oracle数据安全解决方案透明数据加密TDE这可能是你的公司最恐怖的噩梦:有人偷走了数据库的备份磁带!当然,你可能构造了一个安全的系统,加密了最敏感的资产,然后围绕数据库服务器建了一圈防火墙来保护。
但是,小偷却采取了最简单的方法:他偷走了备份磁带,在另外一个服务器上恢复数据库、启动了数据库,然后他就可以边喝咖啡边从容的浏览数据了。
保护数据以防这种小偷不只是一个好的实践,同时也是很多法律、规则、方针的要求,你如何保护你的数据库以防止这种漏洞呢?一种解决方法是在数据库中将敏感数据加密,然后将加密密钥存储在一个不同的地方,这样即使数据被盗也是没有用的。
然而,你必须在两个互相矛盾的概念间进行平衡:应用程序访问加密密钥的方便性、防止密钥被盗的安全性。
为了能够遵从公司和政府的规章制度,你需要一个快速的解决方案,而不需要进行复杂的编码。
Oracle 10g R2提供了一个新的特性,让你只需要做如下动作:你可以不写一行代码,只需要声明你需要加密某列。
当用户插入数据的时候,数据库透明的加密数据然后存储加密后的数据。
同样的,当用户读取数据时,数据库自动进行解密。
由于加解密操作对应用程序来说都是透明的,不需要应用程序修改代码,因此这个特性就叫做:透明数据加密(TDE)。
1 TDE如何工作?我在January/February 2005 issue of Oracle Magazine上提到了Oracle 10g数据库加密的基本原理。
现在我们概述一下关键点:加密时你需要应用一个加密算法和一个加密密钥对明文输入的数据进行加解密操作;为了能够成功的解密,你必须知道加密采用的算法和密钥。
在那篇文章中,我描述了如何使用Oracle提供的加密工具来构建一个加密框架。
然而,使用Oracle 10g R2数据库和TDE,你将不需要自己构建这样一个框架。
你所要做的只是定义需要加密的列,Oracle 10g数据库将为包含加密列的表创建一个私密(译者注:用户不需要知道)的安全加密密钥,然后采用你指定的加密算法加密指定列的明文数据。
Excel中如何进行数据的逻辑隐藏和条件隐藏的高级高级隐私保护Excel中如何进行数据的逻辑隐藏和条件隐藏的高级隐私保护Excel是一款非常强大的电子表格软件,广泛用于数据处理和分析。
在处理敏感数据时,保护数据的隐私和安全至关重要。
Excel提供了几种高级隐私保护的方法,其中包括数据的逻辑隐藏和条件隐藏。
本文将介绍如何在Excel中使用这些方法来保护数据的隐私和安全。
一、数据的逻辑隐藏数据的逻辑隐藏是指根据某些条件将数据隐藏起来,只有满足条件的数据才会显示出来。
下面是一个使用数据逻辑隐藏的示例:假设我们有一个销售数据表格,包含销售日期、销售人员和销售金额等信息。
我们希望只显示在某个日期范围内的销售数据,其他日期的销售数据需要隐藏起来。
1. 首先,在销售数据表格中添加一个新的列,命名为“逻辑隐藏”。
2. 在“逻辑隐藏”列中,使用IF函数来判断每条销售数据是否在日期范围内。
例如,假设我们希望只显示1月1日至1月31日的销售数据,可以使用如下公式:=IF(AND(A2>=DATE(2022,1,1),A2<=DATE(2022,1,31)),"显示","隐藏")其中,A2表示销售日期所在的单元格,DATE(2022,1,1)和DATE(2022,1,31)分别表示日期范围的开始和结束日期。
3. 将公式拖动至所有销售数据的“逻辑隐藏”列中,Excel会根据条件判断结果自动显示“显示”或“隐藏”。
4. 最后,隐藏原始的销售日期列,只保留逻辑隐藏列即可。
这样,只有在日期范围内的销售数据会显示出来,其他数据则隐藏起来。
通过数据的逻辑隐藏,我们可以根据不同的条件隐藏特定的数据,保护数据的隐私和安全。
二、条件隐藏条件隐藏是指根据某些条件将整个行或列的数据隐藏起来。
下面是一个使用条件隐藏的示例:假设我们有一个学生成绩表格,包含学生姓名、科目和成绩等信息。
我们希望只显示某个科目的成绩,其他科目的成绩需要隐藏起来。
用Oracle10g列值掩码技术隐藏敏感数据问题:1、同时安装Desktop、Engine,Engine部分控件不能用,老是提示要授权。
2、将Desktop卸载,Engine大多数控件能用,少部分不能用。
问题关键:Engine授权文件有问题。
现在网上Engine9.0的授权文件版本太多了,但有些可以,有些是不能用的。
其实我就是被这个问题所困,迟迟不能解决,现将可用的Engine9.0授权文件公布如下(绝对可用):3dengine,9,ecp 379783729,none,D7MGJE2110L5J9HSX169designer,9,ecp240010879,none,GB20C3RM03HXNTNE9005gdbedit,9,ecp180013971,none,PMYP34S0PBAM2T8AG239spatialengine,9,ecp339810398,none,8SJA84S0PDJ94P7EJ048standardengine,9,ecp100001222,none,6PC42XLJH4C5LMZ59217streetmapengine,9,ecp299948323,none,1JHDJK988L2MC2EN0146解决方法:1、安装Desktop,配置License Manager,过程我就不说了吧;2、安装Engine,用以上授权文件注册。
3、此时部分控件仍然不能用。
4、请将license.dat中的Feature Designe项删除并保存,重启License Manager;5、问题解决。
解决Oracle 9i和Tomcat端口冲突(转载)方案一:新装了系统后,发现在调试程序时TOMCAT提示8080端口已被占用,于是运行NETSTAT -ANO查看端口使用情况,发现8080端口被ORACLE的监听器给占用了,于是结合上网查到方法,将ORACLE XDB的HTTP服务端口改成8081,问题解决。
基于OracleVPD技术实现系统可配置数据屏蔽本次研究基于Oracle VPD技术基础之上,改变了传统的建立视图屏蔽敏感数据的方法,实现了系统可配置数据屏蔽策略。
简述Oracle VPD技术在运用中针对系统配置数据的屏蔽需求,及该技术的运用系统功能需求。
在实现Oracle VPD技术控制的方案策略研究下,实现配置数据的有效屏蔽,满足我院对敏感数据的屏蔽需求。
Abstract:Based on the Oracle VPD technology,this study changed the traditional method of establishing view masking sensitive data and realized the system configurable data masking strategy. Briefly describe the shielding requirements of Oracle VPD technology for system configuration data,and the system function requirements of the technology. Under the research of the solution strategy of implementing Oracle VPD technology control,the effective shielding of configuration data is realized to meet the shielding requirements of sensitive data in our hospital.Key words:Oracle VPD technology;System configuration;Data masking随着各项新型技术设备的不断创新研发,被较为广泛的应用于我国医院的绝大多数日常工作中。
Oracle隐含参数解析⼀ audit_trail审计(Audit )⽤于监视⽤户所执⾏的数据库操作,审计记录可存在数据字典表,当数据库的审计是开启时,在语句执⾏阶段产⽣审计记录。
由于审计表(AUD$ )存放在SYSTEM 表空间,因此为了不影响系统的性能,保护SYSTEM 表空间,建议把AUD$ 移动到其他的表空间上,或者关闭审计。
参考命令:alter system set audit_trail='NONE' #INSTANCE# scope=spfile;⼆ _optimizer_adaptive_cursor_sharing隐含参数 _optimizer_adaptive_cursor_sharing 能控制⾃适应式游标共享的部分⾏为,由 Oracle ⾃适应的处理绑定变量的窥探,但这可能会触发性能问题。
Oracle 建议在⾮技术指导下,将其关闭掉。
参考命令:alter system set "_optimizer_adaptive_cursor_sharing"=FALSE #INSTANCE#;三 _optimizer_extended_cursor_sharing建议禁⽤⾃适应游标共享,将隐含参数_optimizer_extended_cursor_sharing 设置为 NONE 。
参考命令:alter system set "_optimizer_extended_cursor_sharing"='NONE' #INSTANCE#;四 _optimizer_extended_cursor_sharing_rel建议禁⽤⾃适应游标共享,将隐含参数_optimizer_extended_cursor_sharing_rel 设置为 NONE 。
参考命令:alter system set "_optimizer_extended_cursor_sharing_rel"='NONE' #INSTANCE#;五 parallel_force_local为了降低集群间的数据交互,建议并⾏进程强制在本地实例分配,以便降低集群间的数据交互。
数据管理与储存的数据脱敏与加密方法随着数字时代的来临,数据管理与储存已经成为了各个行业不可或缺的重要环节。
然而,伴随着数据的广泛应用和共享,数据安全和隐私保护问题也日益引起人们的关注。
数据脱敏和数据加密作为常见的数据保护方法,被广泛应用于各个领域。
本文将着重介绍数据脱敏与数据加密的原理、方法和应用。
一、数据脱敏的原理与方法数据脱敏是指将敏感信息中的个人隐私部分进行处理,使其无法识别个体身份,从而保护数据隐私。
数据脱敏主要采用替换、隐藏和混淆等手段进行,下面将具体介绍几种常见的数据脱敏方法。
1.1 插值脱敏方法插值脱敏是指将原始数据替换为伪造的数据,以隐藏原始数据的真实价值。
其中,最常见的是使用随机数进行插值。
例如,将电话号码中的几个数字替换为随机的数字,使得原始电话号码难以追踪。
1.2 字段加盐脱敏方法在密码学中,加盐是指在原始数据之前或之后加入一串随机数据,以增加破解难度。
字段加盐脱敏方法则是将一些随机数据与原始数据进行组合运算,使得被脱敏后的数据更加难以还原。
例如,在用户名中添加一个随机生成的字符串,使得攻击者无法通过分析数据关系来还原用户名。
1.3 日期脱敏方法日期脱敏是将日期数据进行转换或者截断,以隐藏原始日期的具体细节。
例如,将出生日期中的年份调整为固定值,或者将具体的日期信息删除,只保留年月信息。
这样可以在保护隐私的同时,保留一定的数据分析价值。
二、数据加密的原理与方法数据加密是指根据一定的加密算法,将原始数据转化为不可读的密文,防止未经授权的人员获取敏感信息。
数据加密通常包括对称加密和非对称加密两种方法。
2.1 对称加密对称加密使用相同的密钥对数据进行加密和解密。
加密过程中,将原始数据与密钥进行计算,生成密文。
解密过程中,将密文与密钥进行计算,还原为原始数据。
常见的对称加密算法有DES、AES等。
对称加密具有高效性和速度快的优点,但对密钥的管理和分发存在一定的挑战。
2.2 非对称加密非对称加密采用不同的密钥进行加密和解密。
Oracle的虚拟私有数据库特性(也称作细颗粒度存取控制)对诸如SELECT等数据管理语言DML语句提供行级安全性检查。
PL/SQL策略函数和某个数据表相关联,这个函数可以检查当前用户的上下文背景并添加查询中WHERE语句的条件(断言),一个用户或者应用可以这样来写:
SELECT * FROM employees;
但是实际上oracle将会执行这样的语句:
SELECT * FROM employees
WHERE department_id = 60;
因此,只有在查寻范围之内的行(在department数据表中的前60行)才会被查询语句返回。
利用oracle 10g中的新选项可以让oracle返回所有行,而不仅仅是被授权的行。
然而,未被授权行中包含的某些列(称为安全相关列)将显示NULL来代替实际数据,而其它的列值将会正常显示。
要想使用列值掩码必须在虚拟私有数据库策略中做两件事。
首先必须创建一个列级策略来设计某些列为安全相关列.其次必须在查询中包含ALL_ROWS选项以用来返回所有行。
这两个参数的结合就可以实现列值掩码。
列表A显示了一个称为rls_dept的策略函数。
它返回断言“department_id=60”,用来设定对于EMPLOYEES表中60行之内的department字段。
(实际上,这个函数并不返回一个静态表,它可以确定当前用户是谁,并据此返回给该用户正确的部门值。
)
列表B显示了如何应用列表A中的函数创建列值掩码。
在DBMS_RLS包中的过程ADD_POLICY创建一个称为restrict_dept_policy的新策略。
参数sec_relevant_cols表明字段salary 和commission_pct是安全相关列。
一个包含上述两个字段的查询将会应用到该策略函数,不包含的查询就不会应用该策略。
最后,参数sec_relevant_cols_opts设定为常量ALL_ROWS。
列值掩码应用于SELECT语句,无论哪个客户访问数据库都可以实施列值掩码,诸如SQL *Plus、.NET应用或者其它工具。
列表A:
CREATE OR REPLACE
FUNCTION rls_dept (obj_owner IN VARCHAR2, obj_name IN
VARCHAR2)
RETURN VARCHAR2
AS
predicate
VARCHAR2 (200);
BEGIN
predicate := 'department_id = 60';
RETURN (predicate);
END rls_dept;
/
列表B:
BEGIN
DBMS_RLS.ADD_POLICY(object_schema=>'HR',
object_name=>'EMPLOYEES',
policy_name=>'restrict_dept_policy',
function_schema=>'HR',
policy_function=>'rls_dept',
sec_relevant_cols=>'salary,commission_pct',
sec_relevant_cols_opt=>dbms_rls.ALL_ROWS);
END;
/
来源:网络编辑:联动北方技术论坛。