知识大全 实现数据行的权限控制(Policy的应用)

Posted 视图

篇首语:如果惧怕前面跌宕的山岩,生命就永远只能是死水一潭。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 实现数据行的权限控制(Policy的应用)相关的知识,希望对你有一定的参考价值。

实现数据行的权限控制(Policy的应用)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   前言  数据访问权限控制 是一个古老而又实际的问题   在大部份系统中 权限控制主要定义为模块进入权限的控制和数据列访问权限的控制(如 某某人可以进入某个控制 仓库不充许查看有关金额的字段等等)   但在某些系统中 权限控制又必须定义到数据行访问权限的控制 此需求一般出现在同一系统 不同的相对独立机构使用的情况 (如 集团下属多个子公司 所有子公司使用同一套数据表 但不同子公司的数据相对隔离)  当然 绝大多数人会选择在View加上Where子句来进行数据隔离 此方法编码工作量大 系统适应用户管理体系的弹性空间较小 一旦权限逻辑发生变动 就可能需要修改权限体系 导致所有的View都必须修改   本文探讨的使用Oracle提供的Policy管理方法来实现数据行的隔离     特别感谢Javac兄提出的此解决方案!     实现   Oracle Policy的简单说明  Policy应用于数据行访问权限控制时 其作用简而言之 就是在查询数据表时 自动在查询结果上加上一个Where子句 如果该查询已有where子句 则在该Where子句后面加上 And   由Oracle Policy自动加入的Where子句的内容 通常由一个函数来实现 而进行数据行访问权限控制算法实现的结果 也是通过该函数返回      Oracle Policy的语法简述   新增Policy  Dbms_Rls Add_Policy(Object_Schema 数据表(或视图)所在的Schema名称   Object_Name 数据表(或视图)的名称   Policy_Name POLICY的名称 主要用于将来对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   );  注 如果Update_Check设为 True 则用户插入的值不符合Policy_Function返回条件时 该DML执行返回错误信息    删除Policy  Dbms_Rls drop_policy(object_schema 要删除的Policy所在的Schema   object_name 要删除Policy的数据表(或视图)名称   policy_name 要删除的Policy名称  );     设定Policy状态  Dbms_Rls Enable_Policy(object_schema 要删除的Policy所在的Schema   object_name 要删除Policy的数据表(或视图)名称   policy_name 要删除的Policy名称   Enable 是否启用 值为 True 或 False   );     Policy使用特性及使用建议  ● 一个数据表(或视图)可以有多个Policy 但Policy的名称在整个Schema范围内不允许重复   ● 如果将Policy指定到视图 则删除Policy后 应重新编译该视图 否则User_Updatable_Columns系统字典表返回的是否可新增修改删除的信息可能会全部为 NOT   ● 通过Policy可以限制用户对数据表记录的操作范围 如果Policy加在数据表 则由于前台涉及的数据源(通常是视图)往往涉及许多张数据表 权限控制难度很大 建议将Policy加在视图      Oracle Policy 应用实例   创建测试数据表  Create Table T_Policy(T Varchar ( ) T Number( ));   创建测试的Policy函数  CREATE OR REPLACE Function Fn_GetPolicy (P_Schema In Varchar    P_Object In Varchar )  Return Varchar   Is  Begin  Return T = ;  End;     插入测试数据  Insert Into T_Policy Values( a );  Insert Into T_Policy Values( b );  Insert Into T_Policy Values( c );  Commit;   加入Policy  Begin  Dbms_Rls Add_Policy(Object_Schema => Scott    Object_Name => T_Policy    Policy_Name => T_TestPolicy    Function_Schema => Scott    Policy_Function => Fn_GetPolicy    Statement_Types => Select Insert Update Delete    Update_Check => True    Enable => True   );  End;   测试Policy  Select * From T_Policy;  Insert Into T_Policy Values ( d );  Insert Into T_Policy Values ( d );  Commit;     查看Policyy设定情况  Select * From user_policies;     重要提示 执行Dbms_Rls Add_Policy时 必须将执行Dbms_Rls包执行的权限授予Scott 测试时也可能使用其它Schema 最简单的方法是将测试的Schame设为 DBA 权限 cha138/Article/program/Oracle/201311/16724

相关参考

知识大全 控制数据表中的字段权限及单元格权限

  我们习惯了在页面上有几个按钮控制这几个按钮的权限都做得都很熟练例如有btnAdd添加按钮btnEdit编辑按钮btnDelete删除按钮此页面是学生基本信息管理页面frmStudentManage

知识大全 为tomcat页面设置访问权限

  在web应用中对页面的访问控制通常通过程序来控制流程为登录>设置session>访问受限页面时检查session是否存在如果不存在禁止访问  对于较小型的web应用可以通过tomcat

计算机控制系统检修时,软件检查项由()组成。

计算机控制系统检修时,软件检查项由()组成。A、操作系统、应用软件及其完整性检查B、权限设置检查C、数据库检查D、软件备份检查参考答案:ABC

计算机控制系统检修时,软件检查项由()组成。

计算机控制系统检修时,软件检查项由()组成。A、操作系统、应用软件及其完整性检查B、权限设置检查C、数据库检查D、软件备份检查参考答案:ABC

知识大全 企业内部网中使用Policy文件来设置Java的安全策略

企业内部网中使用Policy文件来设置Java的安全策略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 经典的用户权限管理数据结构分析设计

  实现业务系统中的用户权限管理设计篇  B/S系统中的权限比C/S中的更显的重要C/S系统因为具有特殊的客户端所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现而B/S中浏览器是每

知识大全 ORACLE数据库中权限和角色的全面解析

ORACLE数据库中权限和角色的全面解析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Orac

知识大全 取消用户自定义数据库对象的公共读取权限

SQL技巧:取消用户自定义数据库对象的公共读取权限  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 SQL数据库中批量分配权限的有关问题

SQL数据库中批量分配权限的有关问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  分配用户us

知识大全 三招解决SQL Server数据库权限冲突

三招解决SQLServer数据库权限冲突  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在SQL