当前位置: 首页 > 科技观察

Oracle策略相关

时间:2023-03-12 10:47:33 科技观察

Oracle策略可以对查询、修改、删除、添加等操作进行限制。刚接触,测试查询:  用法如下:  begin  --调用程序  sys.dbms_rls.add_policy(object_schema=>:theSchemaname/userwhere数据表(或视图)所在,  object_name=>:数据表(或视图)名称,  policy_name=>:策略名称  function_schema=>:返回Schema名称/userofthefunctionoftheWhereclause,  policy_function=>:返回Where子句的函数名,  statement_types=>:使用Policy的DML类型,如'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的值确定此处指定的任何策略都将覆盖tstatic_policy的值。  long_predicate=>long_predicate,  sec_relevant_cols=>:敏感字段名,  sec_relevant_cols_opt=>:设置为dbms_rls.ALL_ROWS显示所有行,敏感列值为null);  end;  创建函数:createorreplacefunctionf_policy(p_ownerinvarchar2,--两个参数必须有,名字可以不同p_objectinvarchar2)returnvarchar2asv_sqlvarchar2(2000);beginv_sql:=lower(sys_context('USERENV','CURRENT_SQL',4000));ifinstr(v_sql,'where')=0thenreturn'deptno=10';--raise_application_error(-20001,'where条件不包括');endif;return'';end;  添加策略(需要在sys下添加):begindbms_rls。add_policy(object_schema=>'scott',object_name=>'emp',policy_name=>'sal',function_schema=>'scott',policy_function=>'f_policy',sec_relevant_cols=>'sal');结尾;  此策略与函数的结合,限制了emp表的dml语句中不包含where的情况下自动添加wheredept=10的条件。示例如下:  select*fromemp;  删除策略:beginsys.dbms_rls。drop_policy(object_schema=>'scott',object_name=>'emp',policy_name=>'sal');结尾;