Oraclehandbook系列之虚拟专用数据库VPD的使用详解.docVIP

Oraclehandbook系列之虚拟专用数据库VPD的使用详解.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Oraclehandbook系列之虚拟专用数据库VPD的使用详解

VPD, HYPERLINK Oracle Virtual Private Database,即Oracle虚拟专用数据库,是指通过应用一些策略,使得用户只能访问被允许访问的那部分数据。其原理相对简单,Oracle根据策略自动为相应用户提交的语句添加Where句,从而控制用户可以访问和操作的数据。 首先我们准备演示用的几张表,并插入少量的测试数据: CREATETABLEvpdsample_clothing( ? clothing_idNUMBER, ? typeVARCHAR2(30), ? brandVARCHAR2(30), ? descriptonVARCHAR2(100) ? ); ? -- ? INSERTINTOvpdsample_clothingVALUES(10002,jacket,ABC,autumnstyle); ? INSERTINTOvpdsample_clothingVALUES(10003,t-shirt,XYZ,summerstyle); ? commit; ? CREATETABLEvpdsample_books( ? book_idNUMBER, ? nameVARCHAR2(30), ? authorVARCHAR2(20) ? ); ? -- ? INSERTINTOvpdsample_booksVALUES(10005,CountryDriving,PeterHessler); ? INSERTINTOvpdsample_booksVALUES(10006,Lifewithoutlimits,NickVujicic); ? commit;? (以上两个表模拟一个简单的库存情况,库中有两类物品,服装、图书。这里我们需要满足两个表中的ID的唯一性(可以通过sequence来实现)。) CREATETABLEvpdsample_users( ? user_nameVARCHAR2(20), ? user_privilegeNUMBER ? ); ? -- ? INSERTINTOvpdsample_usersVALUES(Jack,1); ? INSERTINTOvpdsample_usersVALUES(Rose,2); ? COMMIT;? (这个表存储用户的权限信息,其中的权限即后表vpdsample_privileges中的权限ID字段。) (这个表存储每个权限ID对应的权限信息,即对哪些对象(服装或图书)有权限。) 第二步,我们要创建一个context(实际上是【context名称空间】)。可以简单地把context理解为一个定义在内存中的容器,在此容器中我们可以定义若干个键值对,这些键值对可以在一定的范围内被共享(比如同一个session中,或者同一个Oracle实例中) 首先,使用system用户登录,赋予创建者相应的权限:grant create any context to user1;然后通过:CREATE OR REPLACE CONTEXT VPD USING pkg_vpdsample ACCESSED GLOBALLY;这里我们创建了一个叫’vpd’的context,’using’后面的是一个PLSQL package的名字,出于安全性考虑,Oracle需要你在创建context时指定一个包名,表示后续对些context的修改只能通过此包中的存储过程???行修改,不能通过dbms_session.set_context()直接进行修改。创建context时,package不存在并不会导致编译错误。 最后’accessed globally’是一个可选项,如果未添加此项,表示此context使用范围是某一session;如果指定了此项,则表示该context可以在整个数据库实例范围内共享。 欲删除context同样需要赋予相应的权限: grant?drop?any?context?to?user1; ? drop?context?VPD;? 第三步,建立一个package(即上面的pkg_vpdsample),包中的各个函数及存储过程的作用会随后逐一给出: CREATEORREPLACEPACKAGEpkg_vpdsample ? IS ? PROCEDUREenable_vpd; ? PROCEDUREdisable_vpd; ? PROCEDUREset_context(p_user_nameINVARCHAR2); ? FUNCTIONgen_vpd_predicate(p_column_nameINVARCHAR2)RETURNVARCHAR2; ? FUNCTIONapply_vpd_clothing(p1invarchar2,p2invarcha

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档