oracle vpd
一、基于行 的vpd
1、,创建 应用程序上下文,关联 设置上下文属性的程序包(可预先不存在),因为应用程序上下文为sys所有,所以要用sys用户创建。
2、创建设置应用程序上下文属性的程序包,在该程序包中调用dbms_session 程序包(该程序包只能在plsql中调用,而不能直接执行,否则会报错)。可以普通用户创建,但是要将程序包中设置应用程序上下文属性的过程的执行权限授予public,因为其他用户需要利用这个程序包中的这个过程来设置自己的应用程序上下文属性值。
3、创建用于fgac4策略的函数,可以放在设置应用程序上下文的程序包里,不需要授权,因为这个函数是给sys用户使用的。注意这种函数有固定的要求,就是必须要有两个传入的参数,但是调用的时候可以不写参数,因为在dbms_rls包中已经为它定义了参数了(个人认为)。
4、创建fgac规则,利用dbms_rls程序包,sys用户创建。
5、用sys用户写一个登录触发器,触发用户执行设置应用程序上下文属性的那个过程,当用户登录的时候,应用程序上下文就有值了,这个值可以被fgac策略所调用了。
二、基于列的vpd
和基于行的vpd一样,只不过在添加fgac策略的时候多了两个参数set_relevant_cols(屏蔽哪些列,以逗号隔开)和set_relevant_cols_opt (设置收到影响的记录范围,设置为all_rows表示对所有的数据行生效)