当前位置: 首页 > 图文教程 > 数据库 > Oracle > 用Oracle10g列值掩码技术隐藏敏感数据

Oracle
Excel VBA连接并操作Oracle
Oracle 外连接实现代码
oracle 存储过程和函数例子
Oracle 数据库操作类
ORACLE 分区表的设计
Oracle 用户权限管理方法
Oracle In和exists not in和not exists的比较分析
利用windows任务计划实现oracle的定期备份
ORACLE11g随RHEL5系统自动启动与关闭的设置方法
在oracle 数据库查询的select 查询字段中关联其他表的方法
plsql和tsql常用函数比对
plsql与tsql的语法不同
ASP.NET调用oracle存储过程实现快速分页
执行drop表操作后数据库无法起动
分析Oracle有时会用索引来查找数据的原因
数据从MySQL迁移到 Oracle的注意事项
快速理解Oracle归档模式的命令及参数
在Oracle里加快SQL执行的三种方法
几条常见的数据库分页 SQL 语句
Oracle9I OCP认证过程

用Oracle10g列值掩码技术隐藏敏感数据


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-31   浏览: 97 ::
收藏到网摘: n/a

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选项以用来返回所有行。这两个参数的结合就可以实现列值掩码。

CREATE OR REPLACEFUNCTION rls_dept (obj_owner IN VARCHAR2, obj_name IN VARCHAR2)RETURN VARCHAR2ASpredicate VARCHAR2 (200);BEGINpredicate := 'department_id = 60';RETURN (predicate);END rls_dept; /

列表A

列表A显示了一个称为rls_dept的策略函数。它返回断言“department_id=60”,用来设定对于EMPLOYEES表中60行之内的department字段。(实际上,这个函数并不返回一个静态表,它可以确定当前用户是谁,并据此返回给该用户正确的部门值。)

BEGINDBMS_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; /

列表B

列表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应用或者其它工具。