• FGAC는 row level로 security 및 context를 부여하는 것으로 결국 수행하는 SQL문장에 tranparent하게 where절 조건을 추가하는 것이다.
  • 이렇게 추가되는 where 조건을 predicate이라고 부른다.(나에게는 트리거의 확장판이라고도 느껴진다.)

grant execute on dbms_rls to scott;

create or replace function predicate
  (obj_schema varchar2, obj_name varchar2)
return varchar2 is 
d_predicate varchar2(2000);
BEGIN
  d_predicate := 'ename = sys_context (''USERENV'', ''SESSION_USER'')';
  RETURN d_predicate;
END predicate;
/

  • dbms_rls.add_policy를 사용할 때 일반적으로 주는 value값의 예제는 다음과 같다.
  • 이중 대부분은 default값을 이용하여, 일반적으로는 앞의 5개의 parameter만 value를 주면 된다.

SQL> exec DBMS_RLS.ADD_POLICY ( -
>    object_schema    => 'SCOTT', -
>    object_name      => 'EMP', -
>    policy_name      => 'POL1', -
>    function_schema  => 'SYS', -
>    policy_function  => 'PREDICATE', -
>    statement_types  => 'SELECT', -
>    static_policy    => false, -
>    policy_type      => DBMS_RLS.DYNAMIC
>    long_predicate   => false);