1818IP-服务器技术教程,云服务器评测推荐,服务器系统排错处理,环境搭建,攻击防护等

当前位置:首页 - 数据库 - 正文

君子好学,自强不息!

Oracle策略相关

2022-11-22 | 数据库 | gtxyzz | 644°c
A+ A-

  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类型,如’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;

  创建函数:

createorreplacefunctionf_policy
(
p_ownerinvarchar2,--两个参数必须要有,名字可以不一样
p_objectinvarchar2
)returnvarchar2as
v_sqlvarchar2(2000);
begin
v_sql:=lower(sys_context('USERENV','CURRENT_SQL',4000));
ifinstr(v_sql,'where')=0then
return'deptno=10';
--raise_application_error(-20001,'未包含where条件');
endif;
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;

本文来源:1818IP

本文地址:https://www.1818ip.com/post/10782.html

免责声明:本文由用户上传,如有侵权请联系删除!

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。