oracle vdp 策略_第1页
oracle vdp 策略_第2页
oracle vdp 策略_第3页
oracle vdp 策略_第4页
oracle vdp 策略_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracle10g 中的虚拟专用数据库 VPD 什么是什么是 VPD 所谓虚拟专用数据库 VPD 指的是 通过在数据库里进行配置 从而让不同的用户只能 查看某个表里的部分数据 VPD 分为以下两个级别 行级别 在该级别下 可以控制某些用户只能查看到某些行数据 例如对于销售数据表来 说 每一名销售人员仅仅能检索自己的销售数据 而不能检索其他用户的销售数据 列级别 在该级别下 可以控制某些用户不能检索某些列的数据 例如 HR 用户下的 EMPLOYEES 表 包含 salary 这一个列 表示工资 由于该列不允许任何用户都可以看到 所以可以在这个列上使用一些设置 这样其他一些用户查看这一列信息时 其数值均为 NULL 利用 Oracle 的细粒度访问控制 可用一种非常复杂的方式调整安全策略 可将细粒度访问 控制用于以下目的 l 通过 SELECT INSERT UPDATE DELETE 语句实施行访问控制 l 建立一个安全策略 它基于某个列的特定值控制访问 l 创建与查询执行中动态更改策略相同的方式使用的策略 l 创建一组安全策略 成为策略组 基于行的基于行的 VPD 基于行的 VPD 也叫做 Fine Grained Access Control 即 FGAC FGAC 通过定义规则来实现 规则的集合叫做 FGAC 政策 Policy 如果对某个表设置了 FGAC 则当用户对该表发 出查询或者 DML 语句时 Oracle 都会根据定义的 FGAC 政策 而自动改写这些 SQL 语句 其改写方式为自动在 SQL 语句后面添加 where 条件 使用 FGAC 策略来限定返回记录的方式具有很多优点 例如 不需要改写应用程序 对用 户完全透明 集中设置 便于管理等 在使用 FGAC 时 会涉及到应用程序上下文 Application Context 的概念 使用应用程序 上下文可以简化 FGAC 管理的实现 应用程序上下文是一个数据库对象 可以把它理解为 数据库里的每一个 session 的全局环境变量 一旦用户登录到数据库 从而创建出 session 以后 应用程序上下文就在整个 session 的生命周期里可用 在应用程序上下文里可以定义 多个属性 并为这些属性设置具体的值 而用户不能直接修改属性的值 只能通过程序包 来修改属性值 应用程序上下文总是有用户 SYS 拥有的 例如 对于用户 HR 的 EMPLOYEES 表而言 我们可以创建一个应用程序上下文 当用户 登录时 将该用户的 ID 号作为一个属性值放入该应用程序上下文中 然后再定义 FGAC 政策的时候 将该用户 ID 号取出 并作为限定条件短语返回给 Oracle 从而实现 FGAC 在 Oracle 数据库中 已经为每一个 session 都预先建立了一个应用程序上下文 userenv 查看方法 通过下面的查询可以看到 select sys context userenv ip address as IP sys context userenv db name as DB from dual SQL select sys context userenv terminal as application ctx from dual application ctx 646C3C9C9D8E4DA 下表列出了 USERENV 命名空间中常用的预定义属性 属性说明 Instance实例 ID Entryid审计条目标识 Current user启动会话的用户名称 Session user数据库用户名 当前用户通过它进行认证 Proxy user为会话用户打开一个会话的中间层次名称 Db name数据库名称 Host数据库在其上运行的主机名 Os user操作系统帐号名 Terminal用来访问数据库的客户机终端 Ip address客户机的 IP 地址 External name数据库用户的外部名称 在用户登录时 识别用户的类型和获得关键的用户属性非常重要 以后可将这些信息用于 附加到数据库对象的安全策略中 将内建的 USERENV 命名空间用来获得这些信息是很理 想的 USERENV 命名空间仅是可用的应用环境命名空间之一 你还必须创建自己的应用环境 以便能够规定在设置自己的安全策略时需要使用哪些属性 为了定义自己的应用环境 还 需要做以下工作 1 创建一个利用各种函数的帮助设置环境的 PLSQL 程序包 2 创建一个使用所创建的程序包的应用环境 l 创建设置环境的程序包创建设置环境的程序包 如果要为用户 hr 设置应用环境 需要创建一个 PLSQL 程序包 下面的代码说明如何创建一个名为 HR CONTEXT 的设置应用环境的简单程序包 此程序 包包含一个过程 它选择 employee id 列的值到 empnum 变量 因为这条 SELECT 语句基 于一条 WHERE 子句根据 SESSION USER 属性确定雇员的 last namae 所以此 employee id 将是数据库用来认证当前用户的用户名的 employee id SQL SQL connconn hr hr hr hr 已连接 已连接 createcreate oror replacereplace packagepackage hr context isis Author BURKE Created 2008 4 26 17 02 34 Purpose procedureprocedure select emp no endend hr context createcreate oror replacereplace packagepackage bodybody hr context isis procedureprocedure select emp no isis empnum numbernumber beginbegin selectselect employee id intointo empnum fromfrom employees wherewhere upper last name sys context USERENV SESSION USER dbms session set context employee info emp num empnum endend select emp no endend hr context l 创建应用环境创建应用环境 一旦创建了帮助设置应用环境的程序包 HR CONTEXT 则可以如下创建应用环境本 身 请注意 hr 用户使用前一节创建的程序包创建 employee info 应用环境 connectconnect system sysadmin burke asas sysdba grant createcreate anyany contextcontext toto hr conn hr hr CREATECREATE CONTEXTCONTEXT employee info USINGUSING hr contextcontext SQL CREATE CONTEXT employee info USING hr context 上下文已创建 上下文已创建 可以用两种方法设置一个用户的应用环境 第一种方法是通过它自身实现一个应用环境 没有 FGA 的访问控制 为完成此工作 创建一个用户登录时的事件触发器 这样用户在登 录数据库时将调用属于 HR CONTEXT 程序包的 SELECT EMP ON 过程 Conn system sysadmin burke as sysdba createcreate oror replacereplace triggertrigger hr security context afterafter logon onon databasedatabase declaredeclare local variables here beginbegin hr context select emp no endend security context 通过登录触发器使用了程序包的过程 它用来获取用户的 employee id 并存储到 emp num 变量 第二种设置或引用应用环境的方法是利用 VPD 的完成成分 它使用一个策略函数来实现 FGA 的访问控制 实现实现 FGA 的访问控制的访问控制 在一些场合下 我们可能想限制某些用户对应用程序数据的访问 当然 可以通过视图来 达到这一目的 但管理视图也会带来一些问题 如维护和审计等问题 FGA 允许限制 Oracle 用户 使得他们只能使用你让他们访问和修改的数据 使用策略函数 policy function 有助于 FGAC 策略函数附加到想要保护的表或者视图上 它使用动态 可修改的语句将用户约束或者限制在表 视图或同义词的某些部分中 在分析用户的 SQL 语句时 FGAC 让 Oracle 自动估计策略函数 一个表可以附加不止一个策略 Oracle 将 在动态修改查询 如果有必要 后执行它 注解 FGAC 允许实现细颗粒度数据安全 使用这个特性 可实施行级安全策略 FGAC 涉及以下步骤 1 创建给用户的 DML 语句动态增加一个谓词的策略函数 谓词是基于某个操作符的 WHERE 子句 Cust no Select custno from orders whre custname SYS CONTEXT USERENV SESSION USER 实现安全策略的程序包将动态的附加一个词到 ORDERS 表上的所有 SELECT 语句中 只 返回与该用户的客户名 cust no 有关的那些订单 2 用户输入下面这样一条语句 SELECT FROM ORDERS 3 Oracle 将使用你创建的策略函数动态修改用户的语句 例如步骤 2 中的语句将被步骤 1 中的策略函数修改如下 selectselect fromfrom orders wherewhere custno selectselect custno fromfrom customers wherewhere custname SYS context USERENV SESSION USER 4 Oracle 使用 SYS context USERENV SESSION USER 返回的用户名对原查询进行修改 从而限制从 ORDERS 表返回的数据仅为该用户的数据 创建创建 hr securityhr security 程序包程序包 createcreate oror replacereplace packagepackage HR SECURITY isis Author BURKE Created 2008 4 26 18 23 47 Purpose functionfunction empnum sec a1 varchar2varchar2 a2 varchar2varchar2 returnreturn varchar2varchar2 endend HR SECURITY createcreate oror replacereplace packagepackage bodybody HR SECURITY isis functionfunction empnum sec a1 varchar2varchar2 a2 varchar2varchar2 returnreturn varchar2varchar2 isis d predicate varchar2varchar2 2000 beginbegin d predicate employee id SYS CONTEXT EMPLOYEE INFO EMP NUM RETURNRETURN d predicate endend endend HR SECURITY 上面的程序包 hr security 将使用 employee info 环境获取 emp num 变量 HR SECURITY 包中的 d predicate 谓词指出 这种变换应该用于其 employee id 与从 employee info 环境取得的 emp num 变量想匹配的任何雇员的查询 例如 如果用户 salapati 发布下面的命令 selectselect fromfrom employees 它将被我们的谓词修改为 selectselect fromfrom employees wherewhere employee id SYS CONTEXT EMPLOYEE INFO EMP NUM 创建安全策略创建安全策略 前一小节创建的程序包附加了一个动态谓词到某些 SQL 语句 这些 SQL 语句是 employee id 与用 employee info 应用环境导出的 emp num 想匹配的雇员使用的 但是 我 们仍然没有给 EMPLOYEES 表附加安全策略 也就是说 我们现在必须准确地指出 HR SECURITY 程序包将应用于何种 SQL 语句 什么样的表 在 Oracle10gR2 版本中 可以使用 dbms pls add policy 过程为 POLICY TYPE 参数指定以 下 5 种类型的安全策略 l 动态 l 静态 l 共享静态 l 环境敏感 l 共享环境敏感 静态策略类型 对于静态策略类型 我们可以将参数 POLICY TYPE 的值指定为 DBMS RLS STATIC 在静态的策略类型中 谓词在不同运行环境下都是相同的 静态策略函数运行一次 并且 被缓存到 SGA 这样静态策略函数就非常快 访问相同对象的语句不需要重复运行策略函 数 当然根据 SYS CONTEXT 和 SYSDATE 这样的属性不同 每次运行也可以产生不同 的结果 共享 静态策略类型 当一个函数用于多个策略中的时候 我们称之为共享策略 共享策略可以在多个对象的业 务处理策略相 同的时候 不必为每个对象都创建一个策略函数 我们应该将 POLICY TYPE 设置为 DBMS RLS SHARED STATIC 它的处理方式与 STATIC 相同 环境敏感策略 我们需要将参数 POLICY TYPE 的值指定为 DBMS RLS CONTEXT SENSITIVE 如果 数据库发现自上 次使用以后 运行的上下文环境发生了变化 那么就会对上下文敏感策略 函数重新求值 共享 环境敏感策略类型 与环境敏感策略类似 只不过函数是可以共享的 我们需要将 POLICY TYPE 指定为 DBMS RLS SHARED CONTEXT SENSTIVE BEGINBEGIN DBMS RLS ADD POLICY object schema hr object name employees policy name manager policy function schema hr policy function hr security empnum sec statement types select ENDEND 可以通过下面的查询验证新策略是否确实已经成功创建 selectselect object name policy name sel ins upd del enable fromfrom all policies SQL select object name policy name sel ins upd del enable 2 from all policies OBJECT NAME POLICY NAME SEL INS UPD DEL ENA EMPLOYEES MANAGER POLICY YES NO NO NO YES 删除策略 beginbegin dbms rls drop policy object schema hr object name employees policy name manager policy endend 查询结果表明针对 EMPLOYEES 表的所有 select 语句现在由 MANAGER POLICY 安全策 略控制

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论