- 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);