vpd虚拟专用数据库

前段时间接手了个小开发工作,自己jsp技术太烂,太耗时间了。以至于都没空写oracle日志了,也没keep studying on my oracle

到年底了,学校放寒假了,最近几个出差的哥们也不用出差了,因此晚上大家可以聚到一起happy了,所以也没有时间学习oracle,有时候即使学习了也没空写成日志。

今天周末,小年,出生以来的第一个没有在家过的小年,中午5个人去百年肥羊把上次吃饭赠送的代金券给花费了,还倒贴进去100多(这种营销方式真不错,招揽回头客)。下午叫上同学B一起整到晚上9点,太累了,说要歇歇了,一块出去吃了饭,他们回去睡觉了,我也有空来写点东西。。。

言归正传,vpd技术即虚拟专用数据库(应该是virtual private database),通过它可以对指定的用户隐藏你不想让他看到的数据。类似于,在别人访问这个表的时候,你自动在后面追加上你隐含添加的条件。比如,select * from test用户请求的这个sql直接透明转换成select  * from test where id=?这种形式然后把结果返还给用户。这种方式可以不用修改应用程序,安全,也便于整体管理。有基于行和基于列两种类型的vpd,基于行一般用在“只允许用户看到属于自己的数据,其他用户的数据不可见”;基于列的一般用在“隐藏某项敏感的数据(比如密码、工资等)”。

昨天对这两种方法进行了测试使用,确实很好使,很简单。详细步骤如下:
1、创建一个策略函数,传入的参数有两个,第一个是schema_name,第二个是object_name,返回值就是需要在sql语句中隐含添加的那个条件。

2、创建添加策略dbms_rls.add_policy
SQL> desc dbms_rls.add_policy
Parameter             Type           Mode Default?
--------------------- -------------- ---- --------
OBJECT_SCHEMA         VARCHAR2       IN   Y       
OBJECT_NAME           VARCHAR2       IN           
POLICY_NAME           VARCHAR2       IN           
FUNCTION_SCHEMA       VARCHAR2       IN   Y       
POLICY_FUNCTION       VARCHAR2       IN           
STATEMENT_TYPES       VARCHAR2       IN   Y       
UPDATE_CHECK          BOOLEAN        IN   Y       
ENABLE                BOOLEAN        IN   Y       
STATIC_POLICY         BOOLEAN        IN   Y       
POLICY_TYPE           BINARY_INTEGER IN   Y       
LONG_PREDICATE        BOOLEAN        IN   Y       
SEC_RELEVANT_COLS     VARCHAR2       IN   Y       
SEC_RELEVANT_COLS_OPT BINARY_INTEGER IN   Y       
 ------------------------------------------
  --   object_schema   - schema owning the table/view, current user if NULL
  --   object_name     - name of table or view
  --   policy_name     - name of policy to be added
  --   function_schema - schema of the policy function, current user if NULL
  --   policy_function - function to generate predicates for this policy
  --   statement_types - statement type that the policy apply, default is any
  --   update_check    - policy checked against updated or inserted value?
  --   enable          - policy is enabled?
  --   static_policy   - policy is static (predicate is always the same)?
  --   policy_type     - policy type - overwrite static_policy if non-null
  --   long_predicate  - max predicate length 4000 bytes (default) or 32K
  --   sec_relevant_cols - list of security relevant columns
  --   sec_relevant_cols_opt - security relevant column option

3、添加过策略之后,符合策略中条件的session在访问指定表的时候将按照策略函数返回的条件隐含添加到sql语句中,达到隐藏数据的目的。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13890753/viewspace-541367/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13890753/viewspace-541367/

你可能感兴趣的:(vpd虚拟专用数据库)