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');结尾;