成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

ORACLE 的Virtual Private Database的全新體驗

瀏覽:196日期:2023-11-19 08:44:42
Oracle 的Virtual Private Database的全新體驗===============================================歡迎大家同我交流:小白; enhydra_boy@tom.com歡迎轉(zhuǎn)載,請保留本聲明,謝謝! ================================================ 在開始對ORACLE的Virtual Private Database的介紹之前,筆者想就ROW-RULE control(行記錄級訪問控制)的概念簡單地說幾句。行記錄級訪問控制問題的提出和意義?企業(yè)的應(yīng)用系統(tǒng)都離不開數(shù)據(jù)庫系統(tǒng),數(shù)據(jù)庫系統(tǒng)的權(quán)限控制是很重要的一個環(huán)節(jié),大型數(shù)據(jù)庫系統(tǒng)(ORACLE、DB2、SYBASE、MS SQLSERVER)都提供完善的用戶治理機制,從而可以嚴(yán)密地控制數(shù)據(jù)庫對象(表、視圖、函數(shù)、存儲過程、程序包等等)的訪問。但是,這往往是對象級別的。隨著商務(wù)需求地不斷地提出,出現(xiàn)了對于行記錄控制的要求:1);;;;;數(shù)據(jù)查詢和報表輸出數(shù)據(jù)需要能夠進行有效地隔離,如在一個簡單地銷售數(shù)據(jù)統(tǒng)計應(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ù)都會存放在同一個數(shù)據(jù)庫種,但是系統(tǒng)需要能夠有效地隔離。為了滿足這樣的需求,在業(yè)務(wù)數(shù)據(jù)表需要中加上一些字段來進行控制,應(yīng)用的開發(fā)往往會另行開發(fā)很多代碼來實現(xiàn)行記錄控制。但是,隨著業(yè)務(wù)的變化,我們會發(fā)現(xiàn)開發(fā)和維護這種治理需求的成本越來越高。我們需要尋找一種新的解決方案,能夠使應(yīng)用系統(tǒng)的架構(gòu)設(shè)計簡單,擴展性強,治理和維護的成本很低。ORACLE8i的一個新特性Virtual Private DatabaseORACLE 8i提供了一個新的特性,來實現(xiàn)行級規(guī)則的控制,稱之為Virtual Private Database。充分利用8i提供的Virtual Private Database技術(shù),可以實現(xiàn),一個數(shù)據(jù)庫Schema的數(shù)據(jù)同時給多個數(shù)據(jù)庫用戶訪問,但是又能很好地隔離各自的數(shù)據(jù)內(nèi)容。顯然,這已經(jīng)不是原來的對象級的控制的概念。下面是筆者的體驗,寫下來,供大家參考。我先通過一個簡單的例子,來說明ORACLE 8i的這個新特性(需ORACLE 8i的企業(yè)版才支持)。環(huán)境:windows 2000 Server + ORACLE 8.1.7(Enterprise Edition)在SCOTT用戶下,有一個Customers表,記錄著客戶資料,以后為每個客戶分配一個ORACLE數(shù)據(jù)庫登陸賬號,客戶可以登陸,查詢自己的訂單情況。那么,我們需要做的就是能夠把每個登陸賬號和客戶代碼對應(yīng)起來。就是說要實現(xiàn)一個映射關(guān)系,當(dāng)然,通過自己建關(guān)系映射表,寫代碼做,也可以實現(xiàn),但是ORACLE 8I把這一切變地非常簡單(我接下來的介紹都會圍繞著ORACLE 8i這項技術(shù)是我們的工作如何更加簡單,如何更加輕易控制,請記住,這是筆者寫這篇文章的目的)。--建立一個SECUSR的賬號,用于權(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)建程序包customer_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)前這個連接設(shè)置多個全局變量,記錄信息,這個信息一直保持到連接被釋放。 上面的代碼,就是為用SCOTT賬號登陸的連接,進行了一次客戶代碼的映射(SCOTT->ALFKI),而且,隨時可以SYS_CONTEXT來查詢。具體代碼如下:SQL> connect scott/tiger@oracle;已連接。SQL> execute secusr.Customer_security_context.set_customerid;PL/SQL 過程已成功完成。SQL> select SYS_CONTEXT('CUSTOMER_CONTEXT','CUSTOMERID') FROM DUAL;SYS_CONTEXT('CUSTOMER_CONTEXT','CUSTOMERID')--------------------------------------------------------------------------------ALFKI但是,我覺的還不夠,能夠做到每個連接建立的時候,就自動完成這種映射,令人興奮的是,ORACLE 8i提供了系統(tǒng)級的觸發(fā)器,讓我輕松地實現(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>好了,夠簡單吧。采用Virtual Private Database如何達(dá)到SQL DML上的數(shù)據(jù)控制訪問要求呢?Virtual Private Database技術(shù)可以對一張表的記錄設(shè)置DML操作的過濾策略。ORACLE8i提供了POLICY的概念,并且為此配備了一套系統(tǒng)程序包,來完成設(shè)置。下面,我來介紹一下:connect secusr/secusr@oracle--做一個函數(shù),返回對應(yīng)的過濾條件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ù)的分割過濾EXECUTE DBMS_RLS.ADD_POLICY('SCOTT',''Customers'','Customers_sec_Policy','SECUSR','customer_security.customer_sec','SELECT,UPDATE,DELETE');customer_security程序包的customer_sec函數(shù)實現(xiàn)了,根據(jù)但前的CONTEXT中CUSTOMERID的內(nèi)容,來返回一個過濾的策略,函數(shù)的參數(shù)形式是固定的。 通過dbms_rls程序包的ADD_POLICY過程,把策略條件同表綁定以來,以后,每次select,update,delete都會自動應(yīng)用這個策略。好了,現(xiàn)在我們來測試一下--用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賬號給客戶(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)點:l 提供了一種可行的、可靠的、對用戶完全透明的行規(guī)則控制方案同自己建立一套用戶控制權(quán)限不同,Virtual Private Database對用戶是透明的,你的應(yīng)用程序不用去考慮這點,你的應(yīng)用程序需要的是更加集中于你的業(yè)務(wù)處理過程的實現(xiàn),而不要讓數(shù)據(jù)隔離控制,成為你業(yè)務(wù)處理的一個過程。你可以完全先開發(fā)功能應(yīng)用,然后再加上數(shù)據(jù)隔離的控制,而這種控制,是基于后臺數(shù)據(jù)庫系統(tǒng)的,這種變動與現(xiàn)有的應(yīng)用程序完全兼容,不會引起現(xiàn)有的程序不能運行l(wèi) 控制更加嚴(yán)密,不僅對于業(yè)務(wù)系統(tǒng)才有效由于采取的是后臺數(shù)據(jù)庫技術(shù),所以這種控制,對所有的應(yīng)用(除了業(yè)務(wù)系統(tǒng),數(shù)據(jù)庫治理工具等等)都起到了控制作用。 相比之下,采用自己的權(quán)限控制的應(yīng)用中,只能做到在業(yè)務(wù)系統(tǒng)的應(yīng)用中有效,而其他(sqlplus,sqlplus worksheet等等)就完全沒有效果。而且大多系統(tǒng)都采用使用一個數(shù)據(jù)庫賬號登陸到系統(tǒng)的方案,在這種情況下,這個賬號對于業(yè)務(wù)數(shù)據(jù)庫一般來說操作權(quán)限很高,而這個賬號一旦泄漏,攻擊者利用sqlplus工具可以方遍地竊取數(shù)據(jù)。l 和用應(yīng)用程序自己實現(xiàn)的方法相比,這種技術(shù)更加靈活,而且便于治理,同時開發(fā)成本也是最低的。采用了這種行記錄控制技術(shù),不需要通過應(yīng)用程序?qū)崿F(xiàn),大大地簡化了應(yīng)用系統(tǒng)地復(fù)雜性,同時也讓你的系統(tǒng)的結(jié)構(gòu)很清楚,而出現(xiàn)錯誤的可能性就更低了。當(dāng)然,你自己建立的控制系統(tǒng)也可以做到ORACLE 8i的功能,但是會大大加大開發(fā)成本。l 對于ASP(應(yīng)用服務(wù)供給商)系統(tǒng),滿足了用戶數(shù)據(jù)存放在一起,但又能夠獨立分開訪問的要求。筆者覺得,這項技術(shù),對于構(gòu)建ASP應(yīng)用系統(tǒng)的用戶非凡有用,充分利用ORACLE提供的新技術(shù),讓你的系統(tǒng)更加安全、可靠。總之,Virtual Private Database是一個功能強大的行級規(guī)則控制技術(shù),是ORACLE8i提供給我們的一個強有力的特性,充分地應(yīng)用,可以大大節(jié)省軟件開發(fā)成本。筆者認(rèn)為Virtual Private Database技術(shù)是一個非常有用的技術(shù),而在SQL Server 2000和Sybase ASE 12.5中,沒有看到類似的技術(shù)。
標(biāo)簽: Oracle 數(shù)據(jù)庫
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲电影一区二区| 日本道色综合久久| 久久精品国产清高在天天线| 中文字幕日韩一区二区| 91美女精品福利| 久久久久国产精品麻豆ai换脸 | 欧美成人福利视频| 国产精品亚洲综合一区在线观看| 老司机精品视频网站| 视频一区二区不卡| 一本高清dvd不卡在线观看| 午夜国产不卡在线观看视频| 亚洲精品偷拍| 亚洲精品va在线观看| 99精品99| 亚洲一区二区五区| 久久亚洲高清| 另类的小说在线视频另类成人小视频在线| 久久精品五月| 男男视频亚洲欧美| 欧美剧在线免费观看网站| 国产一区不卡视频| 欧美电影免费提供在线观看| 97久久人人超碰| 中文在线免费一区三区高中清不卡| 欧美一区二区三区在线播放 | 成人在线一区二区三区| 欧美精品一区二区久久久| 91理论电影在线观看| 国产精品无圣光一区二区| 亚洲午夜激情| 亚洲一区二区精品3399| 久久精品女人| 捆绑调教美女网站视频一区| 欧美精三区欧美精三区| 国产成人精品1024| www久久精品| 欧美三级不卡| 亚洲一区在线视频观看| 日本电影亚洲天堂一区| 国产福利一区在线| 久久影院午夜论| 亚洲激情av| 日韩成人午夜精品| 欧美一级欧美三级在线观看| av中文字幕不卡| 国产精品久久久久久久久免费桃花 | 自拍偷自拍亚洲精品播放| 香蕉久久夜色精品国产| 久久精品国产一区二区三 | 久久精品国产77777蜜臀| 欧美va天堂va视频va在线| 欧美日韩一区二区高清| 亚洲人成网站在线| 色婷婷久久99综合精品jk白丝| 国产91在线观看丝袜| 国产精品久久久久久福利一牛影视| 国产日韩欧美一区| 天堂蜜桃91精品| 欧美一区二区三区免费在线看| 99re这里都是精品| 亚洲人成在线播放网站岛国| 久久国产88| 国产激情一区二区三区四区| 日本一区二区三区国色天香 | 韩日精品视频一区| 国产午夜精品一区二区| 国产一区二区三区的电影| 国产一区二区三区日韩| 国产欧美精品一区二区三区四区 | 亚洲bt欧美bt精品| 日韩一区二区三区高清免费看看| 激情视频一区| 另类人妖一区二区av| 久久久99精品久久| 久久精品日韩| 成人精品亚洲人成在线| 亚洲精品欧美专区| 9191精品国产综合久久久久久 | 99精品国产在热久久婷婷| 青青草国产精品97视觉盛宴 | 中文字幕一区二区三区在线不卡| 在线视频欧美区| 欧美影视一区| 免费在线观看一区| 国产欧美一区二区精品秋霞影院 | 欧美三级视频在线播放| 欧美日韩综合久久| 久久国产三级精品| 亚洲欧美日韩在线播放| 欧美日韩黄色影视| 欧美性久久久| 国产精品影视网| 亚洲一区在线观看免费观看电影高清| 日韩欧美国产精品| 国产亚洲欧美一区二区| 成人aaaa免费全部观看| 午夜精品爽啪视频| 久久免费电影网| 色欧美日韩亚洲| 国产精品mm| 国产一区二区三区不卡在线观看| 18成人在线观看| 日韩一区二区在线观看| 国产精品久久久亚洲一区| 成人禁用看黄a在线| 亚洲成人午夜影院| 国产欧美日韩亚州综合| 欧美日韩国产一区二区三区地区| 999亚洲国产精| 97精品久久久午夜一区二区三区| 日本免费新一区视频| 亚洲另类在线视频| 久久精品一区二区| 91麻豆精品国产91| 香蕉国产精品偷在线观看不卡| 欧美另类高清视频在线| 国产电影一区二区三区| 亚洲成a人片综合在线| 欧美国产日韩精品免费观看| 欧美一区二区三区在线观看视频| 国产精品久久久久毛片大屁完整版| 色综合久久综合网欧美综合网| 黑人巨大精品欧美黑白配亚洲| 午夜在线成人av| 亚洲色图欧美激情| 久久久精品影视| 3atv一区二区三区| 91福利资源站| 亚洲欧美日本日韩| 亚洲激情综合| 欧美日韩综合网| 91丨porny丨国产入口| 国产成人在线视频播放| 老司机午夜精品| 日韩电影在线免费观看| 亚洲人成精品久久久久| 国产视频在线观看一区二区三区| 7777精品伊人久久久大香线蕉完整版| 久久综合中文| 欧美一级一区| 亚洲黄色视屏| 欧美精品尤物在线| 成人动漫精品一区二区| 国产一区二区视频在线播放| 五月综合激情网| 亚洲精品中文在线| 亚洲欧美自拍偷拍| 欧美经典三级视频一区二区三区| 精品国产乱码久久久久久免费| 7777精品伊人久久久大香线蕉经典版下载 | 久久er99精品| 秋霞影院一区二区| 午夜久久久久久久久| 亚洲伦在线观看| 国产精品久久看| 亚洲国产电影在线观看| 久久精品一区八戒影视| 欧美不卡123| 欧美成人video| 日韩欧美国产一区二区在线播放 | 狠狠色丁香婷婷综合久久片| 蜜桃精品视频在线| 日本亚洲欧美天堂免费| 亚洲国产日日夜夜| 亚洲激情自拍偷拍| 亚洲美女视频一区| 亚洲精品一二三四区| 亚洲欧美日韩国产成人精品影院| 综合在线观看色| 日韩一区中文字幕| 亚洲三级在线观看| 一区二区三区视频在线看| 亚洲综合一二区| 亚洲伊人伊色伊影伊综合网| 一区二区三区精品久久久| 一区二区三区久久| 亚洲宅男天堂在线观看无病毒| 亚洲激情六月丁香| 亚洲成人中文在线| 男女男精品视频| 国产最新精品精品你懂的| 国产乱码字幕精品高清av | 色一区在线观看| 欧美性videosxxxxx| 欧美精品一二三| 制服丝袜在线91| 日韩精品一区二区三区swag | 老司机午夜精品| 国产在线精品免费| 成人视屏免费看| 午夜精品电影| 亚洲激情精品| 久久精彩视频| 欧美日韩一区在线| 精品日韩一区二区| 欧美国产视频在线| 亚洲一区二区在线免费看| 蜜桃一区二区三区在线| 国产成人亚洲综合a∨婷婷图片|