1. 什么是VPD

    note:从8i开始,Oracle提供Virtual private database来进行安全访问限制。从12c开始,Oracle介绍了RAS(Real Application Security),是VPD的替代产品。Oracle建议使用RAS。


    Oracle VPD可以创建安全策略,来控制对行或列的访问权限。

    本质上说,应用了VPD策略后,会给相应SQL语句动态的添加where条件。


  2. 根据条件控制隐藏策略


    使用sys账户或其他具有dbms_rls权限的用户进行创建函数及添加策略

    隐藏行


    隐藏列



  3. 添加/删除 示例

    --只有应用系统发起的查询才能看到密码列
    --以下操作需要在sys或其他具有dbms_rls执行权限的用户中进行,
    --创建函数
    create or replace function hide_ldap_pwd_column(v_schema  in varchar2,
                                                      v_objname in varchar2)
      return varchar2 as
      v_where varchar2(200);
    begin
      return ' SYS_CONTEXT(''USERENV'',''SESSION_USER'')=''APEX_PUBLIC_USER'' and SYS_CONTEXT(''USERENV'',''MODULE'') like ''BCSCM/APEX:APP 100:%'' and conf_name = ''LDAP'' ';
    end hide_ldap_pwd_column;
    /
    
      --添加策略
    begin
      dbms_rls.add_policy(
        object_schema => 'bcscm', 
        object_name => 'sys_configuration', 
        policy_name => 'hide_pwd', 
        policy_function => 'hide_ldap_pwd_column', 
        sec_relevant_cols => 'p9_value', 
        sec_relevant_cols_opt => dbms_rls.ALL_ROWS);
    end;
    /
    
      --删除策略方法:
    begin
        dbms_rls.drop_policy(
        object_schema => 'bcscm', 
        object_name => 'sys_configuration',
        policy_name => 'hide_pwd');
    end;
    /
    
    
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 0
  11. 11
  12. 12
  13. 13
  • No labels