create or replace function f_policy
(
p_owner in varchar2,--兩個參數必須要有,名字可以不一樣
p_object in varchar2
) return varchar2 as
v_sql varchar2(2000);
begin
v_sql := lower(sys_context('USERENV', 'CURRENT_SQL', 4000));
if instr(v_sql, ' where ') = 0 then
return 'deptno=10';
--raise_application_error(-20001, '未包含where條件');
end if;
return '';
end;
添加策略(需在sys下添加):
begin dbms_rls.add_policy(object_schema => 'scott', object_name => 'emp', policy_name => 'sal', function_schema => 'scott', policy_function => 'f_policy', sec_relevant_cols => 'sal'); end;
該策略和函數搭配,限制了如果關於emp表的dml語句中未包含where下自動添加where dept=10的條件,示例如下: select * from emp;
刪除策略:
begin
sys.dbms_rls.drop_policy(object_schema => 'scott',
object_name => 'emp',
policy_name => 'sal');
end;