oracle格式掩码:如何利用oracle 10g的列值掩码技术隐藏敏感数来源: 发布时间:星期日, 2009年2月22日 浏览:2次 评论:0
="t18">
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; / 0
相关文章读者评论发表评论 |
|