




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Oracle VPD数据细粒度访问实现方案1. 背景为确保2011年XX系统各本地网数据省集中后,在后台数据库层面能有效地隔离各本地网的数据、方便各本地网DBA人员查看和修改自己所在本地网的数据和保证其他本地网数据的安全性。2. 技术概述Oracle引进了VPD(虚拟私有数据库)来对数据库进行细密度的访问控制。VPD又称为精细存取控制(FGAC)、行级安全性控制(RLS),是指使用了行级安全保护能力和应用上下文的数据库,会透明地过滤记录。VPD的行级安全是通过RLS策略函数,在用户对数据库表或视图的查询中动态地使用谓词(WHERE子句),从而具有在系统执行查询运行时以变化的方式修改查询的能力。
2、不像传统应用程序安全的设计,VPD的行级安全设计是在数据服务器端一次性地构建安全策略,而不是在应用服务器端为每一个应用程序实施安全策略,这就大大节省了设计成本,也消除了应用级安全问题。安全策略都被置于在数据库自身里,使得不同的应用程序将不会绕过安全策略,用户也就不再能绕过安全策略,因为无论用户使用何种应用程序,最终都会被数据服务器端的策略函数自动强制实施对用户的访问控制(如图)。借助于VPD,用户可以将数据库安全性实施到表或者视图的更小粒度。VPD使得服务器的数据安全地和物理数据分离,每个用户只能访问到自己要访问的信息,就像有一个自己的数据库,其中只有他自己的信息,这种特性非常符合应用程序服务
3、供应商的安全性需求。3. 方案设计步骤3.1. 定义安全策略目标结合综合资源系统省集中后,由于XX个本地网的数据都会在同一库中,从数据库层面维护和安全性角度来看是不太可取的,这样的话会有引起误操作和非法获取他人本地网数据信息。所以从上面2方面的考虑要求。可以简单定义独具特色的安全策略目标:在数据库层面上每个本地网只希望查到或修改自己本地网的数据和自己本地网数据不能被其他本地网的人查到或修改。3.2. 创建访问的相应用户和赋予权限 以DBA管理员身份登录例如:Connect Sys / *sdh As Sysdba; 创建访问的相应用户并赋权例如:以广州和江门为例。Create User XXj
4、m Identified By XXjm Default Tablespace sdh_data Temporary Tablespace Temp;Grant Connect, Resource To XXjm;grant create any synonym to user01;grant drop any synonym to user01;Create User XXgz Identified By XXgz Default Tablespace sdh_data Temporary Tablespace Temp;Grant Connect, Resource To XXgz;gra
5、nt create any synonym to user02;grant drop any synonym to user02;Grant Execute On Dbms_Rls To Public;授权省集中库创建应用上下文及同义词权限Grant Create Any Context, Create Public Synonym To *0521;3.3. 创建应用上下文应用程序上下文是内存中的一块暂存区域,用来存储实施安全策略需要的少量的信息,如用户名称、id号码等信息。这些信息作为应用程序上下文的安全属性被用于数据访问控制的程序设计,必须通过Oracle内置的DBMS-SESSION程
6、序包才能对其进行设置和调用。应用程序上下文对整个数据库来说是全局的,一旦创建所有用户均能使用其属性,也可以创建本地上下文。默认的应用上下文空间是userenv,userenv属性在增强不同的数据库安全策略时,起着非常重要的作用。比如:可以利用用户的IP地址和身份验证模式,控制某用户的访问,userenv中的值可以通过数据库自动设置;可以通过SYS-CONTEXT函数访问所有的应用程序上下文属性,SYS-CONTEXT函数利用命名空间作为第一个参数,利用属性名作为第二个参数,返回相应的属性值;也可以把字符串长度值作为可选的第三个参数,并利用该参数对返回的属性值进行截取。以下代码创建包含SYS-C
7、ONTEXT函数返回结果的视图env洞时给public授权可以查看,并能创建同义词env。根据系统设计要求,可以在数据库中设计一个存储本地网区域编码的关系表Users(id, Ouser, AREACODE),根据关系表Users中的区域编码AREACODE设置上下文的值:例如:在XX0521用户下创建应用上下文Drop Context XX0521;Create Context XX0521 Using XX0521.Context_Package;Create Table Users(Id Number(10) Not Null, Ouser Varchar2(30) Not Null,
8、AREACODE Varchar2(50) Not Null);/*Create Table User_Data(Column1 Varchar2(50) Not Null, User_Id Number(10) , AREACODE Varchar2(50) Not Null); */Insert Into Users Values (1, XXJM, 975);Insert Into Users Values (2, XXGZ, 970);Commit;Grant Select, Insert, Update, Delete On Users To XXjm, XXgz;Grant Sel
9、ect, Insert, Update, Delete On User_Data To XXjm, XXgz;3.4. 创建设置上下文包以下显示如何使用默认的上下文获取当前会话的用户记属性,以设置区域编码上下文属性。Create Or Replace Package Body Context_Package Is -获取当前登陆用户名,并设置上下文中的变量AREACODE为当前用户的AREACODE Procedure Set_Context Is v_Ouser Varchar2(30); v_areacode Varchar2(50); Begin Dbms_Session.Set_Con
10、text( XX0521, SETUP, TRUE); v_Ouser := Sys_Context(USERENV, SESSION_USER); Begin Select AREACODE Into v_areacode From users Where Ouser = v_Ouser; Dbms_Session.Set_Context(XX0521, AREACODE, v_areacode); Exception When No_Data_Found Then Dbms_Session.Set_Context(XX0521, AREACODE, 0); End; Dbms_Sessio
11、n.Set_Context(XX0521, SETUP, FALSE); End Set_Context;End Context_Package;/Grant Execute On XX0521.Context_Package To Public; Create Public Synonym Context_Package For XX0521.Context_Package;3.5. 设置登录触发器以Sys数据库管理员身份登录创建:Create Or Replace Trigger XX0521.Set_Security_ContextAfter Logon On DatabaseBegin
12、XX0521.Context_Package.Set_Context;End;/3.6. 创建策略函数安全策略只是一个函数,用于返回一个谓词,在执行查询时动态地筛选数据。策略函数被激活时,需要由数据库传递两个参数:施以行级访问控制的对象模式名称和对象名称,利用这两个参数可以让安全策略知道是哪个受保护对象被激活。在XX0521用户下创建策略函数:Create Or Replace Package Security_Package AsFunction User_Data_Select_Security(Owner Varchar2, Objname Varchar2) Return Varcha
13、r2;Function User_Data_Insert_Security(Owner Varchar2, Objname Varchar2) Return Varchar2;Function User_Data_Update_Security(Owner Varchar2, Objname Varchar2) Return Varchar2;Function User_Data_Delete_Security(Owner Varchar2, Objname Varchar2) Return Varchar2;End Security_Package;/ Create Or Replace P
14、ackage Body Security_Package IsFunction User_Data_Select_Security(Owner Varchar2, Objname Varchar2) Return Varchar2 IsPredicate Varchar2(2000);BeginPredicate := 1=2;If (Sys_Context(USERENV, SESSION_USER) = XX0521) ThenPredicate := Null;ElsePredicate := AREACODE = (SELECT AREACODE FROM USERS WHERE OU
15、SER = SYS_CONTEXT(USERENV,SESSION_USER);End If;Return Predicate;End User_Data_Select_Security;Function User_Data_Insert_Security(Owner Varchar2, Objname Varchar2) Return Varchar2 IsPredicate Varchar2(2000);BeginPredicate := 1=2;If (Sys_Context(USERENV, SESSION_USER) = XX0521) ThenPredicate := Null;E
16、lsePredicate := AREACODE = (SELECT AREACODE FROM USERS WHERE OUSER = SYS_CONTEXT(USERENV,SESSION_USER);End If;Return Predicate;End User_Data_Insert_Security;Function User_Data_Update_Security(Owner Varchar2, Objname Varchar2) Return Varchar2 IsPredicate Varchar2(2000);BeginPredicate := 1=2;If (Sys_C
17、ontext(USERENV, SESSION_USER) = XX0521) ThenPredicate := Null;ElsePredicate := AREACODE = (SELECT AREACODE FROM USERS WHERE OUSER = SYS_CONTEXT(USERENV,SESSION_USER);End If;Return Predicate;End User_Data_Update_Security;Function User_Data_Delete_Security(Owner Varchar2, Objname Varchar2) Return Varc
18、har2 IsPredicate Varchar2(2000);BeginPredicate := 1=2;If (Sys_Context(USERENV, SESSION_USER) = XX0521) ThenPredicate := Null;ElsePredicate := AREACODE = (SELECT AREACODE FROM USERS WHERE OUSER = SYS_CONTEXT(USERENV,SESSION_USER);End If;Return Predicate;End User_Data_Delete_Security;End Security_Pack
19、age;/ -授予公用执行权Grant Execute On XX0521.Security_Package To Public;-创建策略包的同义词Create Public Synonym Security_Package For XX0521.Security_Package;3.7. 应用策略到相应的表,使用RDBMS_RLS利用PLISQL程序包DBMS_RLS建立的查询策略如下:-清理原因策略BeginDbms_Rls.Drop_Policy(XX0521, B1PORT, User_Data _SELECT_POLICY);Dbms_Rls.Drop_Policy(XX0521,
20、 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;/-应用新策略BeginDbms_Rls.Add_Policy(XX0521,B1PORT,User_Data_SELECT_POLICY, XX0521,SECURITY_PACKAGE.User_Data_SELECT_SECURITY, SELECT);Dbms
21、_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_POL
22、ICY, XX0521,SECURITY_PACKAGE.User_Data_DELETE_SECURITY, DELETE, True);End;/如果是其他表或视图,只需重复应用新策略,改变其中应用的Object参数为实际控制对象。3.8. 以SYSTEM用户创建同义词为了方便本地网使用,在访问的相应用户下创建同义词。可执行如下过程:create or replace procedure P_CreateTableSynonym( p_srcuser varchar2) is v_sqlstr varchar2(2000); n_count number;begin for c1 in (SELECT DISTINCT T.TABLE_NAME FROM USER_COL_COMMENTS T WHERE T.COLUMN_NAME = AREACODE AND T.TABLE_NAME LIKE X%) lo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大车安全管理课件
- 粪便嵌塞的评估及护理
- 绿色能源领域六氟化硫替代气体市场投资分析
- 宠尸处理行业的绿色未来展望:行业可行性研究报告
- 农业机械化和智慧农业发展趋势研究报告
- 提高银行效率管理办法
- 支付系统接口管理办法
- 支部经费使用管理办法
- 收货发货库存管理办法
- 改革信息速递管理办法
- 2025届黑龙江省大庆中学九上化学期末联考试题含解析
- 20湿性愈合功能性敷料的种类与敷料选择
- 2025消防安全知识培训试题及答案
- 燃气报警器行业发展分析及投资战略研究报告2025-2028版
- 2025年中国扭蛋行业市场全景分析及前景机遇研判报告
- 2025至2030中国现金处理中心行业发展趋势分析与未来投资战略咨询研究报告
- 2025年湖南省中考历史试卷真题(含答案解析)
- 小学音标题目及答案
- 2024年宿州萧县县直事业单位招聘真题
- 休闲阳台沙发区创新创业项目商业计划书
- 美好生活大调查:中国居民消费特点及趋势报告(2025年度)
评论
0/150
提交评论