您现在的位置是:亿华云 > 人工智能
Oracle策略相关
亿华云2025-10-02 18:56:52【人工智能】7人已围观
简介Oracle策略可以限制查询、修改、删除、新增等操作,刚接触,对查询做一个测试:用法如下:begin-- Call the proceduresys.dbms_rls.add_policy(objec
Oracle策略可以限制查询、策略修改、相关删除、策略新增等操作,相关刚接触,策略对查询做一个测试:
用法如下:
begin
-- Call the procedure
sys.dbms_rls.add_policy(object_schema => :数据表(或视图)所在的相关Schema名称/用户,
object_name => :数据表(或视图)的名称,
policy_name => :policy的名称
function_schema => :返回Where子句的函数所在Schema名称/用户,
policy_function => :返回Where子句的函数名称,
statement_types => :要使用该Policy的DML类型,云南idc服务商如Select,策略Insert,Update,Delete,
update_check => 仅适用于Statement_Type为Insert,Update,值为True或False,相关
enable => 是否启用,值为True或False,策略
static_policy => 默认值为FALSE。如果它被设置为TRUE则所有用户启用该策略,相关sys或特权用户例外。策略
policy_type => :默认值是相关null,意味着static_policy的策略值决定,在这里指定任何策略将覆盖static_policy的网站模板相关值。
long_predicate => long_predicate,策略
sec_relevant_cols => :敏感的字段名称,
sec_relevant_cols_opt => :设置为dbms_rls.ALL_ROWS来显示所有的行,敏感的列的值为null);
end;
创建函数:
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;很赞哦!(9812)