电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

ORACLE 的Virtual Private Database的全新體驗(yàn)

瀏覽:95日期:2023-11-19 08:44:42
Oracle 的Virtual Private Database的全新體驗(yàn)===============================================歡迎大家同我交流:小白; enhydra_boy@tom.com歡迎轉(zhuǎn)載,請(qǐng)保留本聲明,謝謝! ================================================ 在開始對(duì)ORACLE的Virtual Private Database的介紹之前,筆者想就ROW-RULE control(行記錄級(jí)訪問(wèn)控制)的概念簡(jiǎn)單地說(shuō)幾句。行記錄級(jí)訪問(wèn)控制問(wèn)題的提出和意義?企業(yè)的應(yīng)用系統(tǒng)都離不開數(shù)據(jù)庫(kù)系統(tǒng),數(shù)據(jù)庫(kù)系統(tǒng)的權(quán)限控制是很重要的一個(gè)環(huán)節(jié),大型數(shù)據(jù)庫(kù)系統(tǒng)(ORACLE、DB2、SYBASE、MS SQLSERVER)都提供完善的用戶治理機(jī)制,從而可以嚴(yán)密地控制數(shù)據(jù)庫(kù)對(duì)象(表、視圖、函數(shù)、存儲(chǔ)過(guò)程、程序包等等)的訪問(wèn)。但是,這往往是對(duì)象級(jí)別的。隨著商務(wù)需求地不斷地提出,出現(xiàn)了對(duì)于行記錄控制的要求:1);;;;;數(shù)據(jù)查詢和報(bào)表輸出數(shù)據(jù)需要能夠進(jìn)行有效地隔離,如在一個(gè)簡(jiǎn)單地銷售數(shù)據(jù)統(tǒng)計(jì)應(yīng)用中,大區(qū)經(jīng)理、地區(qū)經(jīng)理和銷售員查詢的數(shù)據(jù)就不同。2);;;;;ASP(應(yīng)用服務(wù)供給商)系統(tǒng)出現(xiàn),在系統(tǒng)結(jié)構(gòu)上,就出現(xiàn)了許多企業(yè)用戶的數(shù)據(jù)都會(huì)存放在同一個(gè)數(shù)據(jù)庫(kù)種,但是系統(tǒng)需要能夠有效地隔離。為了滿足這樣的需求,在業(yè)務(wù)數(shù)據(jù)表需要中加上一些字段來(lái)進(jìn)行控制,應(yīng)用的開發(fā)往往會(huì)另行開發(fā)很多代碼來(lái)實(shí)現(xiàn)行記錄控制。但是,隨著業(yè)務(wù)的變化,我們會(huì)發(fā)現(xiàn)開發(fā)和維護(hù)這種治理需求的成本越來(lái)越高。我們需要尋找一種新的解決方案,能夠使應(yīng)用系統(tǒng)的架構(gòu)設(shè)計(jì)簡(jiǎn)單,擴(kuò)展性強(qiáng),治理和維護(hù)的成本很低。ORACLE8i的一個(gè)新特性Virtual Private DatabaseORACLE 8i提供了一個(gè)新的特性,來(lái)實(shí)現(xiàn)行級(jí)規(guī)則的控制,稱之為Virtual Private Database。充分利用8i提供的Virtual Private Database技術(shù),可以實(shí)現(xiàn),一個(gè)數(shù)據(jù)庫(kù)Schema的數(shù)據(jù)同時(shí)給多個(gè)數(shù)據(jù)庫(kù)用戶訪問(wèn),但是又能很好地隔離各自的數(shù)據(jù)內(nèi)容。顯然,這已經(jīng)不是原來(lái)的對(duì)象級(jí)的控制的概念。下面是筆者的體驗(yàn),寫下來(lái),供大家參考。我先通過(guò)一個(gè)簡(jiǎn)單的例子,來(lái)說(shuō)明ORACLE 8i的這個(gè)新特性(需ORACLE 8i的企業(yè)版才支持)。環(huán)境:windows 2000 Server + ORACLE 8.1.7(Enterprise Edition)在SCOTT用戶下,有一個(gè)Customers表,記錄著客戶資料,以后為每個(gè)客戶分配一個(gè)ORACLE數(shù)據(jù)庫(kù)登陸賬號(hào),客戶可以登陸,查詢自己的訂單情況。那么,我們需要做的就是能夠把每個(gè)登陸賬號(hào)和客戶代碼對(duì)應(yīng)起來(lái)。就是說(shuō)要實(shí)現(xiàn)一個(gè)映射關(guān)系,當(dāng)然,通過(guò)自己建關(guān)系映射表,寫代碼做,也可以實(shí)現(xiàn),但是ORACLE 8I把這一切變地非常簡(jiǎn)單(我接下來(lái)的介紹都會(huì)圍繞著ORACLE 8i這項(xiàng)技術(shù)是我們的工作如何更加簡(jiǎn)單,如何更加輕易控制,請(qǐng)記住,這是筆者寫這篇文章的目的)。--建立一個(gè)SECUSR的賬號(hào),用于權(quán)限控制用connect system/manager@oracle;create user secusr identified by secusr;grant connect,resource,dba to secusr;--把Customers的查詢權(quán)利賦予secusrconnect scott/tiger@oracle;grant select on 'Customers' to secusr;--連接到secusr用戶connect secusr/secusr@oracle;--創(chuàng)建上下文create context Customer_context USING secusr.CUSTOMER_SECURITY_CONTEXT;--創(chuàng)建程序包c(diǎn)ustomer_security_contextcreate or replace packagesecusr.customer_security_context isprocedure set_customerid;end;create or replace package bodysecusr.Customer_security_context isprocedure set_customerid isbeginIF SYS_CONTEXT('USERENV','SESSION_USER')='SCOTT' THEN DBMS_SESSION.SET_CONTEXT('customer_context','customerid','ALFKI');END IF;end;end;--授權(quán)grant execute on secusr.Customer_security_context to public;ORACLE 8i中提供了Context(連接上下文)的概念,類似于asp中的session,你可以為當(dāng)前這個(gè)連接設(shè)置多個(gè)全局變量,記錄信息,這個(gè)信息一直保持到連接被釋放。 上面的代碼,就是為用SCOTT賬號(hào)登陸的連接,進(jìn)行了一次客戶代碼的映射(SCOTT->ALFKI),而且,隨時(shí)可以SYS_CONTEXT來(lái)查詢。具體代碼如下:SQL> connect scott/tiger@oracle;已連接。SQL> execute secusr.Customer_security_context.set_customerid;PL/SQL 過(guò)程已成功完成。SQL> select SYS_CONTEXT('CUSTOMER_CONTEXT','CUSTOMERID') FROM DUAL;SYS_CONTEXT('CUSTOMER_CONTEXT','CUSTOMERID')--------------------------------------------------------------------------------ALFKI但是,我覺(jué)的還不夠,能夠做到每個(gè)連接建立的時(shí)候,就自動(dòng)完成這種映射,令人興奮的是,ORACLE 8i提供了系統(tǒng)級(jí)的觸發(fā)器,讓我輕松地實(shí)現(xiàn)。--SCOTT用戶登陸觸發(fā)器connect system/manager@oracleCREATE OR REPLACE TRIGGER scott.tg_set_usr_contextAFTER LOGON ON DATABASEBEGINsecusr.customer_security_context.set_customerid;END;--斷掉connection,重新登陸Oracle8i Enterprise Edition Release 8.1.7.0.0 - ProdUCtionWith the Partitioning optionJServer Release 8.1.7.0.0 - ProductionSQL> CONNECT scott/tiger@oracle已連接。SQL> select SYS_CONTEXT('CUSTOMER_CONTEXT','CUSTOMERID') FROM DUAL;SYS_CONTEXT('CUSTOMER_CONTEXT','CUSTOMERID')--------------------------------------------------------------------------------ALFKISQL>好了,夠簡(jiǎn)單吧。采用Virtual Private Database如何達(dá)到SQL DML上的數(shù)據(jù)控制訪問(wèn)要求呢?Virtual Private Database技術(shù)可以對(duì)一張表的記錄設(shè)置DML操作的過(guò)濾策略。ORACLE8i提供了POLICY的概念,并且為此配備了一套系統(tǒng)程序包,來(lái)完成設(shè)置。下面,我來(lái)介紹一下:connect secusr/secusr@oracle--做一個(gè)函數(shù),返回對(duì)應(yīng)的過(guò)濾條件create or replace package secusr.customer_security isfunction customer_secreturn VARCHAR2;end;create or replace package body secusr.customer_securityisfunction customer_sec(d1 varchar2,d2 varchar2)return varchar2ISbeginIF SYS_CONTEXT('USERENV','SESSION_USER') IN ('SYS','SYSTEM','SECUSR') THEN RETURN NULL;ELSE RETURN 'customerid=''' SYS_CONTEXT('CUSTOMER_CONTEXT','CUSTOMERID') '''';END IF;end;end;--設(shè)置表數(shù)據(jù)的分割過(guò)濾EXECUTE DBMS_RLS.ADD_POLICY('SCOTT',''Customers'','Customers_sec_Policy','SECUSR','customer_security.customer_sec','SELECT,UPDATE,DELETE');customer_security程序包的customer_sec函數(shù)實(shí)現(xiàn)了,根據(jù)但前的CONTEXT中CUSTOMERID的內(nèi)容,來(lái)返回一個(gè)過(guò)濾的策略,函數(shù)的參數(shù)形式是固定的。 通過(guò)dbms_rls程序包的ADD_POLICY過(guò)程,把策略條件同表綁定以來(lái),以后,每次select,update,delete都會(huì)自動(dòng)應(yīng)用這個(gè)策略。好了,現(xiàn)在我們來(lái)測(cè)試一下--用SCOTT登陸,只能看到自己的信息SQL> connect scott/tiger@oracle;已連接。SQL> select customerid,city from 'Customers';CUSTOMERID CITY---------- ------------------------------ALFKI;;;Berlin--用SYSTEM登陸,可以看到所有的SQL> connect system/manager@oracle;已連接。SQL> select customerid,city from 'SCOTT'.'Customers';CUSTOMERID CITY---------- ------------------------------ALFKI;;;BerlinANATR;;;México D.F.ANTON;;;México D.F.AROUT;;;LondonBERGS;;;Lule?D.F.BLAUS;;;MannheimBLONP;;;StrasbourgBOLID;;;MadridBONAP;;;MarseilleBOTTM;;;TsawassenBSBEV;;;London非常好,完全滿足了要求,現(xiàn)在可以放心地把SCOTT賬號(hào)給客戶(ALFKI)了,客戶可以查詢自己的訂單情況,當(dāng)然只能是自己的。SQL> SELECT a.orderid,a.customerid,a.orderdate, 2; sum(c.UnitPrice*c.Quantity*(1-c.Discount)) as TotalMoney 3; FROM 'Orders' a,'Customers' b ,'Order Details' c 4; where a.customerid=b.customerid and a.orderid=c.orderid 5; group by a.orderid,a.customerid,a.orderdate; ORDERID CUSTOMERID ORDERDATE; TOTALMONEY---------- ---------- ---------- ---------------------------------------- 10643 ALFKI;;;25-8月 -97;;;814.5 10692 ALFKI;;;03-10月-97;;;;;878 10702 ALFKI;;;13-10月-97;;;;;330 10835 ALFKI;;;15-1月 -98;;;845.8 10952 ALFKI;;;16-3月 -98;;;471.2 11011 ALFKI;;;09-4月 -98;;;933.5已選擇6行。下面,讓我總結(jié)一下Virtual Private Database的優(yōu)點(diǎn):l 提供了一種可行的、可靠的、對(duì)用戶完全透明的行規(guī)則控制方案同自己建立一套用戶控制權(quán)限不同,Virtual Private Database對(duì)用戶是透明的,你的應(yīng)用程序不用去考慮這點(diǎn),你的應(yīng)用程序需要的是更加集中于你的業(yè)務(wù)處理過(guò)程的實(shí)現(xiàn),而不要讓數(shù)據(jù)隔離控制,成為你業(yè)務(wù)處理的一個(gè)過(guò)程。你可以完全先開發(fā)功能應(yīng)用,然后再加上數(shù)據(jù)隔離的控制,而這種控制,是基于后臺(tái)數(shù)據(jù)庫(kù)系統(tǒng)的,這種變動(dòng)與現(xiàn)有的應(yīng)用程序完全兼容,不會(huì)引起現(xiàn)有的程序不能運(yùn)行l(wèi) 控制更加嚴(yán)密,不僅對(duì)于業(yè)務(wù)系統(tǒng)才有效由于采取的是后臺(tái)數(shù)據(jù)庫(kù)技術(shù),所以這種控制,對(duì)所有的應(yīng)用(除了業(yè)務(wù)系統(tǒng),數(shù)據(jù)庫(kù)治理工具等等)都起到了控制作用。 相比之下,采用自己的權(quán)限控制的應(yīng)用中,只能做到在業(yè)務(wù)系統(tǒng)的應(yīng)用中有效,而其他(sqlplus,sqlplus worksheet等等)就完全沒(méi)有效果。而且大多系統(tǒng)都采用使用一個(gè)數(shù)據(jù)庫(kù)賬號(hào)登陸到系統(tǒng)的方案,在這種情況下,這個(gè)賬號(hào)對(duì)于業(yè)務(wù)數(shù)據(jù)庫(kù)一般來(lái)說(shuō)操作權(quán)限很高,而這個(gè)賬號(hào)一旦泄漏,攻擊者利用sqlplus工具可以方遍地竊取數(shù)據(jù)。l 和用應(yīng)用程序自己實(shí)現(xiàn)的方法相比,這種技術(shù)更加靈活,而且便于治理,同時(shí)開發(fā)成本也是最低的。采用了這種行記錄控制技術(shù),不需要通過(guò)應(yīng)用程序?qū)崿F(xiàn),大大地簡(jiǎn)化了應(yīng)用系統(tǒng)地復(fù)雜性,同時(shí)也讓你的系統(tǒng)的結(jié)構(gòu)很清楚,而出現(xiàn)錯(cuò)誤的可能性就更低了。當(dāng)然,你自己建立的控制系統(tǒng)也可以做到ORACLE 8i的功能,但是會(huì)大大加大開發(fā)成本。l 對(duì)于ASP(應(yīng)用服務(wù)供給商)系統(tǒng),滿足了用戶數(shù)據(jù)存放在一起,但又能夠獨(dú)立分開訪問(wèn)的要求。筆者覺(jué)得,這項(xiàng)技術(shù),對(duì)于構(gòu)建ASP應(yīng)用系統(tǒng)的用戶非凡有用,充分利用ORACLE提供的新技術(shù),讓你的系統(tǒng)更加安全、可靠。總之,Virtual Private Database是一個(gè)功能強(qiáng)大的行級(jí)規(guī)則控制技術(shù),是ORACLE8i提供給我們的一個(gè)強(qiáng)有力的特性,充分地應(yīng)用,可以大大節(jié)省軟件開發(fā)成本。筆者認(rèn)為Virtual Private Database技術(shù)是一個(gè)非常有用的技術(shù),而在SQL Server 2000和Sybase ASE 12.5中,沒(méi)有看到類似的技術(shù)。
主站蜘蛛池模板: PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | 吨袋包装机|吨包秤|吨包机|集装袋包装机-烟台华恩科技 | 气密性检测仪_气密性检测设备_防水测试仪_密封测试仪-岳信仪器 | 广州展台特装搭建商|特装展位设计搭建|展会特装搭建|特装展台制作设计|展览特装公司 | 交联度测试仪-湿漏电流测试仪-双85恒温恒湿试验箱-常州市科迈实验仪器有限公司 | 代办建筑资质升级-建筑资质延期就找上海国信启航 | 砂石生产线_石料生产线设备_制砂生产线设备价格_生产厂家-河南中誉鼎力智能装备有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 小威小说网 - 新小威小说网 - 小威小说网小说搜索引擎 | 水篦子|雨篦子|镀锌格栅雨水篦子|不锈钢排水篦子|地下车库水箅子—安平县云航丝网制品厂 | 圆窗水平仪|伊莉莎冈特elesa+ganter | 花纹铝板,合金铝卷板,阴极铝板-济南恒诚铝业有限公司 | 中细软知识产权_专业知识产权解决方案提供商 | 石家庄救护车出租_重症转院_跨省跨境医疗转送_活动赛事医疗保障_康复出院_放弃治疗_腾康26年医疗护送转诊团队 | 123悬赏网_发布悬赏任务_广告任务平台 | 济南拼接屏_山东液晶拼接屏_济南LED显示屏—维康国际官网 | 月嫂_保姆_育婴_催乳_母婴护理_产后康复_养老护理-吉祥到家家政 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 挤塑板-XPS挤塑板-挤塑板设备厂家[襄阳欧格] | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | PVC快速门-硬质快速门-洁净室快速门品牌厂家-苏州西朗门业 | 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 洗地机-全自动/手推式洗地机-扫地车厂家_扬子清洁设备 | 我车网|我关心的汽车资讯_汽车图片_汽车生活! | 广州监控安装公司_远程监控_安防弱电工程_无线wifi覆盖_泉威安防科技 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 涡街流量计_LUGB智能管道式高温防爆蒸汽温压补偿计量表-江苏凯铭仪表有限公司 | 方源木业官网-四川木门-全国木门专业品牌 | 谷歌关键词优化-外贸网站优化-Google SEO小语种推广-思亿欧外贸快车 | 大倾角皮带机-皮带输送机-螺旋输送机-矿用皮带输送机价格厂家-河南坤威机械 | 混合生育酚_醋酸生育酚粉_琥珀酸生育酚-山东新元素生物科技 | 合肥卓创建筑装饰,专业办公室装饰、商业空间装修与设计。 | 北京翻译公司_同传翻译_字幕翻译_合同翻译_英语陪同翻译_影视翻译_翻译盖章-译铭信息 | 巨野月嫂-家政公司-巨野县红墙安康母婴护理中心 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 深圳激光打标机_激光打标机_激光焊接机_激光切割机_同体激光打标机-深圳市创想激光科技有限公司 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | 福建成考网-福建成人高考网 | lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 自动气象站_气象站监测设备_全自动气象站设备_雨量监测站-山东风途物联网 |