|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
DBaaS向客户提供了许多与其他云服务相类似的优势:一个灵活的、可扩展的MySQL学习教程、按需服务的平台,它以自助服务和便捷管理为导向,可以对环境中的资源进行调配。oracle
ORACLE的VirtualPrivateDatabase的全新体验
===============================================
接待人人同我交换:小白enhydra_boy@tom.com
接待转载,请保存本声明,感谢!
================================================
在入手下手对ORACLE的VirtualPrivateDatabase的先容之前,笔者想就ROW-RULEcontrol(行纪录级会见把持)的观点复杂地说几句。
行纪录级会见把持成绩的提出和意义?
企业的使用体系都离不开数据库体系,数据库体系的权限把持是很主要的一个环节,年夜型数据库体系(ORACLE、DB2、SYBASE、MSSQLSERVER)都供应完美的用户办理机制,从而能够周密地把持数据库工具(表、视图、函数、存储历程、程序包等等)的会见。可是,这常常是工具级其余。
跟着商务需求地不休地提出,呈现了关于行纪录把持的请求:
1)数据查询和报表输入数据必要可以举行无效地断绝,如在一个复杂地发卖数据统计使用中,年夜区司理、区域司理和发卖员查询的数据就分歧。
2)ASP(使用服务供给商)体系呈现,在体系布局上,就呈现了很多企业用户的数据城市寄存在统一个数据库种,可是体系必要可以无效地断绝。
为了满意如许的需求,在营业数据表必要中加上一些字段来举行把持,使用的开辟常常会另行开辟良多代码来完成行纪录把持。可是,跟着营业的变更,我们会发明开辟和保护这类办理需求的本钱愈来愈高。
我们必要寻觅一种新的办理计划,可以使使用体系的架构计划复杂,扩大性强,办理和保护的本钱很低。
ORACLE8i的一个新特征VirtualPrivateDatabase
ORACLE8i供应了一个新的特征,来完成行级划定规矩的把持,称之为VirtualPrivateDatabase。充实使用8i供应的VirtualPrivateDatabase手艺,能够完成,一个数据库Schema的数据同时给多个数据库用户会见,可是又能很好地断绝各自的数据内容。明显,这已不是本来的工具级的把持的观点。
上面是笔者的体验,写上去,供人人参考。我先经由过程一个复杂的例子,来讲明ORACLE8i的这个新特征(需ORACLE8i的企业版才撑持)。
情况:Windows2000Server+ORACLE8.1.7(EnterpriseEdition)
在SCOTT用户下,有一个Customers表,纪录着客户材料,今后为每一个客户分派一个ORACLE数据库上岸账号,客户能够上岸,查询本人的定单情形。那末,我们必要做的就是可以把每一个上岸账号和客户代码对应起来。就是说要完成一个映照干系,固然,经由过程本人建干系映照表,写代码做,也能够完成,可是ORACLE8I把这统统变地十分复杂(我接上去的先容城市环绕着ORACLE8i这项手艺是我们的事情怎样加倍复杂,怎样加倍简单把持,请记着,这是笔者写这篇文章的目标)。
--创建一个SECUSR的账号,用于权限把持用
connectsystem/manager@oracle;
createusersecusridentifiedbysecusr;
grantconnect,resource,dbatosecusr;
--把Customers的查询权力付与secusr
connectscott/tiger@oracle;
grantselecton"Customers"tosecusr;
--毗连到secusr用户
connectsecusr/secusr@oracle;
--创立高低文
createcontextCustomer_contextUSINGsecusr.CUSTOMER_SECURITY_CONTEXT;
--创立程序包customer_security_context
createorreplacepackage
secusr.customer_security_contextis
procedureset_customerid;
end;
createorreplacepackagebody
secusr.Customer_security_contextis
procedureset_customeridis
begin
IFSYS_CONTEXT(USERENV,SESSION_USER)=SCOTTTHEN
DBMS_SESSION.SET_CONTEXT(customer_context,customerid,ALFKI);
ENDIF;
end;
end;
--受权
grantexecuteonsecusr.Customer_security_contexttopublic;
ORACLE8i中供应了Context(毗连高低文)的观点,相似于asp中的session,你能够为以后这个毗连设置多个全局变量,纪录信息,这个信息一向坚持到毗连被开释。下面的代码,就是为用SCOTT账号上岸的毗连,举行了一次客户代码的映照(SCOTT->ALFKI),并且,随时能够SYS_CONTEXT来查询。
详细代码以下:
SQL>connectscott/tiger@oracle;
已毗连。
SQL>executesecusr.Customer_security_context.set_customerid;
PL/SQL历程已乐成完成。
SQL>selectSYS_CONTEXT(CUSTOMER_CONTEXT,CUSTOMERID)FROMDUAL;
SYS_CONTEXT(CUSTOMER_CONTEXT,CUSTOMERID)
--------------------------------------------------------------------------------
ALFKI
可是,我觉的还不敷,可以做到每一个毗连创建的时分,就主动完成这类映照,使人乐意的是,ORACLE8i供应了体系级的触发器,让我轻松地完成。
--SCOTT用户上岸触发器
connectsystem/manager@oracle
CREATEORREPLACETRIGGERscott.tg_set_usr_context
AFTERLOGONONDATABASE
BEGIN
secusr.customer_security_context.set_customerid;
END;
--断失落connection,从头上岸
Oracle8iEnterpriseEditionRelease8.1.7.0.0-Production
WiththePartitioningoption
JServerRelease8.1.7.0.0-Production
SQL>CONNECTscott/tiger@oracle
已毗连。
SQL>selectSYS_CONTEXT(CUSTOMER_CONTEXT,CUSTOMERID)FROMDUAL;
SYS_CONTEXT(CUSTOMER_CONTEXT,CUSTOMERID)
--------------------------------------------------------------------------------
ALFKI
SQL>
好了,够复杂吧。
接纳VirtualPrivateDatabase怎样到达SQLDML上的数据把持会见请求呢?
VirtualPrivateDatabase手艺能够对一张表的纪录设置DML操纵的过滤战略。ORACLE8i供应了POLICY的观点,而且为此装备了一套体系程序包,来完成设置。上面,我来先容一下:
connectsecusr/secusr@oracle
--做一个函数,前往对应的过滤前提
createorreplacepackagesecusr.customer_securityis
functioncustomer_sec
returnVARCHAR2;
end;
createorreplacepackagebodysecusr.customer_security
is
functioncustomer_sec(d1varchar2,d2varchar2)
returnvarchar2
IS
begin
IFSYS_CONTEXT(USERENV,SESSION_USER)IN(SYS,SYSTEM,SECUSR)THEN
RETURNNULL;
ELSE
RETURNcustomerid=||SYS_CONTEXT(CUSTOMER_CONTEXT,CUSTOMERID)||;
ENDIF;
end;
end;
--设置表数据的支解过滤
EXECUTEDBMS_RLS.ADD_POLICY(SCOTT,"Customers",Customers_sec_Policy,
SECUSR,
customer_security.customer_sec,
SELECT,UPDATE,DELETE);
customer_security程序包的customer_sec函数完成了,依据但前的CONTEXT中CUSTOMERID的内容,来前往一个过滤的战略,函数的参数情势是流动的。经由过程dbms_rls程序包的ADD_POLICY历程,把战略前提同表绑定以来,今后,每次select,update,delete城市主动使用这个战略。
好了,如今我们来测试一下
--用SCOTT上岸,只能看到本人的信息
SQL>connectscott/tiger@oracle;
已毗连。
SQL>selectcustomerid,cityfrom"Customers";
CUSTOMERIDCITY
----------------------------------------
ALFKIBerlin
--用SYSTEM上岸,能够看到一切的
SQL>connectsystem/manager@oracle;
已毗连。
SQL>selectcustomerid,cityfrom"SCOTT"."Customers";
CUSTOMERIDCITY
----------------------------------------
ALFKIBerlin
ANATRMéxicoD.F.
ANTONMéxicoD.F.
AROUTLondon
BERGSLule?D.F.
BLAUSMannheim
BLONPStrasbourg
BOLIDMadrid
BONAPMarseille
BOTTMTsawassen
BSBEVLondon
十分好,完整满意了请求,如今能够宁神地把SCOTT账号给客户(ALFKI)了,客户能够查询本人的定单情形,固然只能是本人的。
SQL>SELECTa.orderid,a.customerid,a.orderdate,
2sum(c.UnitPrice*c.Quantity*(1-c.Discount))asTotalMoney
3FROM"Orders"a,"Customers"b,"OrderDetails"c
4wherea.customerid=b.customeridanda.orderid=c.orderid
5groupbya.orderid,a.customerid,a.orderdate;
ORDERIDCUSTOMERIDORDERDATETOTALMONEY
----------------------------------------------------------------------
10643ALFKI25-8月-97814.5
10692ALFKI03-10月-97878
10702ALFKI13-10月-97330
10835ALFKI15-1月-98845.8
10952ALFKI16-3月-98471.2
11011ALFKI09-4月-98933.5
已选择6行。
上面,让我总结一下VirtualPrivateDatabase的长处:
l供应了一种可行的、牢靠的、对用户完整通明的行划定规矩把持计划
同本人创建一套用户把持权限分歧,VirtualPrivateDatabase对用户是通明的,你的使用程序不必往思索这点,你的使用程序必要的是加倍会合于你的营业处置历程的完成,而不要让数据断绝把持,成为你营业处置的一个历程。你能够完整先开辟功效使用,然后再加上数据断绝的把持,而这类把持,是基于背景数据库体系的,这类变化与现有的使用程序完整兼容,不会引发现有的程序不克不及运转
l把持加倍周密,不但关于营业体系才无效
因为接纳的是背景数据库手艺,以是这类把持,对一切的使用(除营业体系,数据库办理工具等等)都起到了把持感化。比拟之下,接纳本人的权限把持的使用中,只能做到在营业体系的使用中无效,而其他(sqlplus,sqlplusworksheet等等)就完整没无效果。并且年夜多体系都接纳利用一个数据库账号上岸到体系的计划,在这类情形下,这个账号关于营业数据库一样平常来讲操纵权限很高,而这个账号一旦泄露,打击者使用sqlplus工具能够方各处夺取数据。
l和用使用程序本人完成的办法比拟,这类手艺加倍天真,并且便于办理,同时开辟本钱也是最低的。
接纳了这类行纪录把持手艺,不必要经由过程使用程序完成,年夜年夜地简化了使用体系地庞大性,同时也让你的体系的布局很明晰,而呈现毛病的大概性就更低了。固然,你本人创建的把持体系也能够做到ORACLE8i的功效,可是会年夜年夜加年夜开辟本钱。
l关于ASP(使用服务供给商)体系,满意了用户数据寄存在一同,但又可以自力分隔会见的请求。笔者以为,这项手艺,关于构建ASP使用体系的用户出格有效,充实使用ORACLE供应的新手艺,让你的体系加倍平安、牢靠。
总之,VirtualPrivateDatabase是一个功效壮大的行级划定规矩把持手艺,是ORACLE8i供应给我们的一个强无力的特征,充实地使用,能够年夜小节省软件开辟本钱。
笔者以为VirtualPrivateDatabase手艺是一个十分有效的手艺,而在SQLServer2000和SybaseASE12.5中,没有看到相似的手艺。
“对于MySQL数据库,无论是在开发方面,还是支持方面,现在有大量强大的MySQL学习教程可以选择。每一个新手开发者可以轻松地使用MySQL数据库进行开发。 |
|