- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- LeadershipandmanagementWeek.doc
- LEADCompetencyModel.doc
- LeadResourceController.doc
- leadsoft成套电器报价系统Winner.doc
- lectpptConvertor.doc
- LearningAttribute-to-FeatureMappingsforCold-StartRecommendations.doc
- lecture-stillmadeinjapan.doc
- Lecture++是非曲直关系,英语专考试词汇复习.doc
- LectureAttributiveClause定语从句详解.doc
- LectureLecture:FOREIGNEXCHANGEMARKET(国际金融-南开,胡春田).doc
文档评论(0)