Oracle-VPD数据细粒度访问实现方案可编辑范本_第1页
Oracle-VPD数据细粒度访问实现方案可编辑范本_第2页
Oracle-VPD数据细粒度访问实现方案可编辑范本_第3页
Oracle-VPD数据细粒度访问实现方案可编辑范本_第4页
Oracle-VPD数据细粒度访问实现方案可编辑范本_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

OracleVPD数据细粒度访问实现方案背景为确保2011年XX系统各本地网数据省集中后,在后台数据库层面能有效地隔离各本地网的数据、方便各本地网DBA人员查看和修改自己所在本地网的数据和保证其他本地网数据的安全性。技术概述Oracle引进了VPD(虚拟私有数据库)来对数据库进行细密度的访问控制.VPD又称为精细存取控制(FGAC)、行级安全性控制(RLS),是指使用了行级安全保护能力和应用上下文的数据库,会透明地过滤记录。VPD的行级安全是通过RLS策略函数,在用户对数据库表或视图的查询中动态地使用谓词(WHERE子句),从而具有在系统执行查询运行时以变化的方式修改查询的能力。不像传统应用程序安全的设计,VPD的行级安全设计是在数据服务器端一次性地构建安全策略,而不是在应用服务器端为每一个应用程序实施安全策略,这就大大节省了设计成本,也消除了应用级安全问题。安全策略都被置于在数据库自身里,使得不同的应用程序将不会绕过安全策略,用户也就不再能绕过安全策略,因为无论用户使用何种应用程序,最终都会被数据服务器端的策略函数自动强制实施对用户的访问控制(如图).借助于VPD,用户可以将数据库安全性实施到表或者视图的更小粒度。VPD使得服务器的数据安全地和物理数据分离,每个用户只能访问到自己要访问的信息,就像有一个自己的数据库,其中只有他自己的信息,这种特性非常符合应用程序服务供应商的安全性需求。方案设计步骤定义安全策略目标结合综合资源系统省集中后,由于XX个本地网的数据都会在同一库中,从数据库层面维护和安全性角度来看是不太可取的,这样的话会有引起误操作和非法获取他人本地网数据信息。所以从上面2方面的考虑要求.可以简单定义独具特色的安全策略目标:在数据库层面上每个本地网只希望查到或修改自己本地网的数据和自己本地网数据不能被其他本地网的人查到或修改。创建访问的相应用户和赋予权限以DBA管理员身份登录例如:ConnectSys/**@sdhAsSysdba;创建访问的相应用户并赋权例如:以广州和江门为例。CreateUserXXjmIdentifiedByXXjmDefaultTablespacesdh_dataTemporaryTablespaceTemp;GrantConnect,ResourceToXXjm;grantcreateanysynonymtouser01;grantdropanysynonymtouser01;CreateUserXXgzIdentifiedByXXgzDefaultTablespacesdh_dataTemporaryTablespaceTemp;GrantConnect,ResourceToXXgz;grantcreateanysynonymtouser02;grantdropanysynonymtouser02;GrantExecuteOnDbms_RlsToPublic;授权省集中库创建应用上下文及同义词权限GrantCreateAnyContext,CreatePublicSynonymTo**0521;创建应用上下文应用程序上下文是内存中的一块暂存区域,用来存储实施安全策略需要的少量的信息,如用户名称、id号码等信息.这些信息作为应用程序上下文的安全属性被用于数据访问控制的程序设计,必须通过Oracle内置的DBMS—SESSION程序包才能对其进行设置和调用。应用程序上下文对整个数据库来说是全局的,一旦创建所有用户均能使用其属性,也可以创建本地上下文。默认的应用上下文空间是userenv,userenv属性在增强不同的数据库安全策略时,起着非常重要的作用。比如:可以利用用户的IP地址和身份验证模式,控制某用户的访问,userenv中的值可以通过数据库自动设置;可以通过SYS—CONTEXT函数访问所有的应用程序上下文属性,SYS—CONTEXT函数利用命名空间作为第一个参数,利用属性名作为第二个参数,返回相应的属性值;也可以把字符串长度值作为可选的第三个参数,并利用该参数对返回的属性值进行截取。以下代码创建包含SYS—CONTEXT函数返回结果的视图env洞时给public授权可以查看,并能创建同义词env。根据系统设计要求,可以在数据库中设计一个存储本地网区域编码的关系表Users(id,Ouser,AREACODE),根据关系表Users中的区域编码AREACODE设置上下文的值:例如:在XX0521用户下创建应用上下文DropContextXX0521;CreateContextXX0521UsingXX0521。Context_Package;CreateTableUsers(IdNumber(10)NotNull,OuserVarchar2(30)NotNull,AREACODEVarchar2(50)NotNull);/*CreateTableUser_Data(Column1Varchar2(50)NotNull,User_IdNumber(10),AREACODEVarchar2(50)NotNull);*/InsertIntoUsersValues(1,’XXJM',’975’);InsertIntoUsersValues(2,’XXGZ','970');Commit;GrantSelect,Insert,Update,DeleteOnUsersToXXjm,XXgz;GrantSelect,Insert,Update,DeleteOnUser_DataToXXjm,XXgz;创建设置上下文包以下显示如何使用默认的上下文获取当前会话的用户记属性,以设置区域编码上下文属性。CreateOrReplacePackageBodyContext_PackageIs--获取当前登陆用户名,并设置上下文中的变量AREACODE为当前用户的AREACODEProcedureSet_ContextIsv_OuserVarchar2(30);v_areacodeVarchar2(50);BeginDbms_Session。Set_Context('XX0521’,’SETUP','TRUE');v_Ouser:=Sys_Context('USERENV’,'SESSION_USER’);BeginSelectAREACODEIntov_areacodeFromusersWhereOuser=v_Ouser;Dbms_Session。Set_Context(‘XX0521’,'AREACODE',v_areacode);ExceptionWhenNo_Data_FoundThenDbms_Session.Set_Context(‘XX0521','AREACODE’,0);End;Dbms_Session。Set_Context(‘XX0521','SETUP',’FALSE');EndSet_Context;EndContext_Package;/GrantExecuteOnXX0521.Context_PackageToPublic;CreatePublicSynonymContext_PackageForXX0521.Context_Package;设置登录触发器以Sys数据库管理员身份登录创建:CreateOrReplaceTriggerXX0521.Set_Security_ContextﻩAfterLogonOnDatabaseBeginXX0521.Context_Package.Set_Context;End;/创建策略函数安全策略只是一个函数,用于返回一个谓词,在执行查询时动态地筛选数据.策略函数被激活时,需要由数据库传递两个参数:施以行级访问控制的对象模式名称和对象名称,利用这两个参数可以让安全策略知道是哪个受保护对象被激活。在XX0521用户下创建策略函数:CreateOrReplacePackageSecurity_PackageAs FunctionUser_Data_Select_Security(OwnerVarchar2,ObjnameVarchar2)ReturnVarchar2; FunctionUser_Data_Insert_Security(OwnerVarchar2,ObjnameVarchar2)ReturnVarchar2;ﻩFunctionUser_Data_Update_Security(OwnerVarchar2,ObjnameVarchar2)ReturnVarchar2;ﻩFunctionUser_Data_Delete_Security(OwnerVarchar2,ObjnameVarchar2)ReturnVarchar2;EndSecurity_Package;/CreateOrReplacePackageBodySecurity_PackageIsﻩFunctionUser_Data_Select_Security(OwnerVarchar2,ObjnameVarchar2)ReturnVarchar2Is ﻩPredicateVarchar2(2000); BeginﻩﻩPredicate:=’1=2’; If(Sys_Context('USERENV',’SESSION_USER’)='XX0521’)Then ﻩﻩPredicate:=Null;ﻩ Else ﻩPredicate:=’AREACODE=(SELECTAREACODEFROMUSERSWHEREOUSER=SYS_CONTEXT('’USERENV’’,'’SESSION_USER’’))'; ﻩEndIf;ﻩ ReturnPredicate; EndUser_Data_Select_Security; FunctionUser_Data_Insert_Security(OwnerVarchar2,ObjnameVarchar2)ReturnVarchar2IsﻩﻩPredicateVarchar2(2000); Beginﻩ Predicate:=’1=2'; ﻩIf(Sys_Context('USERENV’,'SESSION_USER’)='XX0521’)Thenﻩ ﻩPredicate:=Null;ﻩﻩElseﻩﻩ Predicate:='AREACODE=(SELECTAREACODEFROMUSERSWHEREOUSER=SYS_CONTEXT('’USERENV’’,’’SESSION_USER'’))'; EndIf; ReturnPredicate; EndUser_Data_Insert_Security; FunctionUser_Data_Update_Security(OwnerVarchar2,ObjnameVarchar2)ReturnVarchar2Is PredicateVarchar2(2000);ﻩBeginﻩﻩPredicate:='1=2’; ﻩIf(Sys_Context('USERENV’,’SESSION_USER')=’XX0521’)Then ﻩ Predicate:=Null; ﻩElseﻩﻩ Predicate:='AREACODE=(SELECTAREACODEFROMUSERSWHEREOUSER=SYS_CONTEXT(''USERENV'’,'’SESSION_USER''))’;ﻩﻩEndIf;ﻩﻩReturnPredicate; EndUser_Data_Update_Security;ﻩFunctionUser_Data_Delete_Security(OwnerVarchar2,ObjnameVarchar2)ReturnVarchar2Isﻩ PredicateVarchar2(2000);ﻩBeginﻩﻩPredicate:='1=2’; If(Sys_Context(’USERENV',’SESSION_USER’)=’XX0521’)ThenﻩﻩﻩPredicate:=Null;ﻩﻩElseﻩﻩﻩPredicate:=’AREACODE=(SELECTAREACODEFROMUSERSWHEREOUSER=SYS_CONTEXT('’USERENV’’,''SESSION_USER''))’; ﻩEndIf; ﻩReturnPredicate;ﻩEndUser_Data_Delete_Security;EndSecurity_Package;/-—授予公用执行权GrantExecuteOnXX0521.Security_PackageToPublic;--创建策略包的同义词CreatePublicSynonymSecurity_PackageForXX0521。Security_Package;应用策略到相应的表,使用RDBMS_RLS利用PLISQL程序包DBMS_RLS建立的查询策略如下:—-清理原因策略BeginﻩDbms_Rls.Drop_Policy(‘XX0521',’B1PORT’,’User_Data_SELECT_POLICY’); Dbms_Rls.Drop_Policy(‘XX0521','B1PORT',’User_Data_INSERT_POLICY'); Dbms_Rls。Drop_Policy(‘XX0521’,'B1PORT’,’User_Data_UPDATE_POLICY');Dbms_Rls.Drop_Policy(‘XX0521’,'B1PORT','User_Data_DELETE_POLICY'); End;/--应用新策略BeginﻩDbms_Rls.Add_Policy(‘XX0521’,'B1PORT’,'User_Data_SELECT_POLICY',‘XX0521’,'SECURITY_PACKAGE。User_Data_SELECT_SECURITY’,’SELECT’); Dbms_Rls.Add_Policy(‘XX0521’,'B1PORT’,’User_Data_INSERT_POLICY',‘XX0521’,’SECURITY_PACKAGE。User_Data_INSERT_SECURITY’,'INSERT',True); Dbms_Rls.Add_Policy(‘XX0521',’B1PORT','User_Data_UPDATE_POLICY’,‘XX0521’,’SECURITY_PACKAGE。User_Data_UPDATE_SECURITY’,’UPDATE’,True);Dbms_Rls。Add_Policy(‘XX0521’,’B1PORT',’User_Data_DELETE_POLICY',‘XX0521’,’SECURITY_PACKAGE.User_Data_DELETE_SECURITY','DELETE',True); End;/如果是其他表或视图,只需重复应用新策略,改变其中应用的Object参数为实际控制对象.以SYSTEM用户创建同义词为了方便本地网使用,在访问的相应用户下创建同义词.可执行如下过程:createorreplaceprocedureP_CreateTableSynonym(p_srcuservarchar2)isv_sqlstrvarchar2(2000);n_countnumber;beginforc1in(SELECTDISTINCTT.TABLE_NAMEFROMUSER_COL_COMMENTSTWHERET.COLUMN_NAME=’AREACODE'ANDT.TABLE_NAMELIKE’X%

温馨提示

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

评论

0/150

提交评论