亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

ORACLE 的Virtual Private Database的全新體驗

2024-08-29 13:49:27
字體:
來源:轉載
供稿:網友

  
Oracle 的Virtual PRivate Database的全新體驗

===============================================

歡迎大家同我交流:小白  enhydra_boy@tom.com

歡迎轉載,請保留本聲明,謝謝!

================================================

   在開始對ORACLE的Virtual Private Database的介紹之前,筆者想就ROW-RULE control(行記錄級訪問控制)的概念簡單地說幾句。

行記錄級訪問控制問題的提出和意義?

企業的應用系統都離不開數據庫系統,數據庫系統的權限控制是很重要的一個環節,大型數據庫系統(ORACLE、DB2、SYBASE、MS SQLSERVER)都提供完善的用戶治理機制,從而可以嚴密地控制數據庫對象(表、視圖、函數、存儲過程、程序包等等)的訪問。但是,這往往是對象級別的。

隨著商務需求地不斷地提出,出現了對于行記錄控制的要求:

1)        數據查詢和報表輸出數據需要能夠進行有效地隔離,如在一個簡單地銷售數據統計應用中,大區經理、地區經理和銷售員查詢的數據就不同。

2)        asp(應用服務供給商)系統出現,在系統結構上,就出現了許多企業用戶的數據都會存放在同一個數據庫種,但是系統需要能夠有效地隔離。

為了滿足這樣的需求,在業務數據表需要中加上一些字段來進行控制,應用的開發往往會另行開發很多代碼來實現行記錄控制。但是,隨著業務的變化,我們會發現開發和維護這種治理需求的成本越來越高。

我們需要尋找一種新的解決方案,能夠使應用系統的架構設計簡單,擴展性強,治理和維護的成本很低。

ORACLE8i的一個新特性Virtual Private Database

ORACLE 8i提供了一個新的特性,來實現行級規則的控制,稱之為Virtual Private Database。充分利用8i提供的Virtual Private Database技術,可以實現,一個數據庫Schema的數據同時給多個數據庫用戶訪問,但是又能很好地隔離各自的數據內容。顯然,這已經不是原來的對象級的控制的概念。

下面是筆者的體驗,寫下來,供大家參考。我先通過一個簡單的例子,來說明ORACLE 8i的這個新特性(需ORACLE 8i的企業版才支持)。

環境:windows 2000 Server + ORACLE 8.1.7(Enterprise Edition)

在SCOTT用戶下,有一個Customers表,記錄著客戶資料,以后為每個客戶分配一個ORACLE數據庫登陸賬號,客戶可以登陸,查詢自己的訂單情況。那么,我們需要做的就是能夠把每個登陸賬號和客戶代碼對應起來。就是說要實現一個映射關系,當然,通過自己建關系映射表,寫代碼做,也可以實現,但是ORACLE 8I把這一切變地非常簡單(我接下來的介紹都會圍繞著ORACLE 8i這項技術是我們的工作如何更加簡單,如何更加輕易控制,請記住,這是筆者寫這篇文章的目的)。

--建立一個SECUSR的賬號,用于權限控制用

connect system/manager@oracle;

create user secusr identified by secusr;

grant connect,resource,dba to secusr;

--把Customers的查詢權利賦予secusr

connect scott/tiger@oracle;

grant select on "Customers" to secusr;

--連接到secusr用戶

connect secusr/secusr@oracle;

--創建上下文

create context Customer_context USING secusr.CUSTOMER_SECURITY_CONTEXT;

--創建程序包customer_security_context

create or replace package

secusr.customer_security_context is

procedure set_customerid;

end;

 

create or replace package body

secusr.Customer_security_context is

procedure set_customerid is

begin

IF SYS_CONTEXT('USERENV','session_USER')='SCOTT' THEN

   DBMS_SESSION.SET_CONTEXT('customer_context','customerid','ALFKI');

END IF;

end;

end;

 

--授權

grant execute on secusr.Customer_security_context to public;

ORACLE 8i中提供了Context(連接上下文)的概念,類似于asp中的session,你可以為當前這個連接設置多個全局變量,記錄信息,這個信息一直保持到連接被釋放。
上面的代碼,就是為用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提供了系統級的觸發器,讓我輕松地實現。

--SCOTT用戶登陸觸發器

connect system/manager@oracle

CREATE OR REPLACE TRIGGER scott.tg_set_usr_context

AFTER LOGON ON DATABASE

BEGIN

secusr.customer_security_context.set_customerid;

END;

--斷掉connection,重新登陸

Oracle8i Enterprise Edition Release 8.1.7.0.0 - ProdUCtion

With the Partitioning option

JServer Release 8.1.7.0.0 - Production

 

SQL> CONNECT scott/tiger@oracle

已連接。

SQL> select SYS_CONTEXT('CUSTOMER_CONTEXT','CUSTOMERID') FROM DUAL;

SYS_CONTEXT('CUSTOMER_CONTEXT','CUSTOMERID')

--------------------------------------------------------------------------------

ALFKI

SQL>

好了,夠簡單吧。

采用Virtual Private Database如何達到SQL DML上的數據控制訪問要求呢?

Virtual Private Database技術可以對一張表的記錄設置DML操作的過濾策略。ORACLE8i提供了POLICY的概念,并且為此配備了一套系統程序包,來完成設置。下面,我來介紹一下:

connect secusr/secusr@oracle

--做一個函數,返回對應的過濾條件

create or replace package secusr.customer_security is

function customer_sec

return VARCHAR2;

end;

 

create or replace package body secusr.customer_security

is

function customer_sec(d1 varchar2,d2 varchar2)

return varchar2

IS

begin

IF SYS_CONTEXT('USERENV','SESSION_USER') IN ('SYS','SYSTEM','SECUSR') THEN

   RETURN NULL;

ELSE

   RETURN 'customerid=''' SYS_CONTEXT('CUSTOMER_CONTEXT','CUSTOMERID') '''';

END IF;

end;

end;

 

--設置表數據的分割過濾

EXECUTE DBMS_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> 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      Berlin

ANATR      México D.F.

ANTON      México D.F.

AROUT      London

BERGS      Lule?   D.F.

BLAUS      Mannheim

BLONP      Strasbourg

BOLID      Madrid

BONAP      Marseille

BOTTM      Tsawassen

BSBEV      London

非常好,完全滿足了要求,現在可以放心地把SCOTT賬號給客戶(ALFKI)了,客戶可以查詢自己的訂單情況,當然只能是自己的。

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行。

下面,讓我總結一下Virtual Private Database的優點:

l         提供了一種可行的、可靠的、對用戶完全透明的行規則控制方案

同自己建立一套用戶控制權限不同,Virtual Private Database對用戶是透明的,你的應用程序不用去考慮這點,你的應用程序需要的是更加集中于你的業務處理過程的實現,而不要讓數據隔離控制,成為你業務處理的一個過程。你可以完全先開發功能應用,然后再加上數據隔離的控制,而這種控制,是基于后臺數據庫系統的,這種變動與現有的應用程序完全兼容,不會引起現有的程序不能運行

l         控制更加嚴密,不僅對于業務系統才有效

由于采取的是后臺數據庫技術,所以這種控制,對所有的應用(除了業務系統,數據庫治理工具等等)都起到了控制作用。
相比之下,采用自己的權限控制的應用中,只能做到在業務系統的應用中有效,而其他(sqlplus,sqlplus worksheet等等)就完全沒有效果。而且大多系統都采用使用一個數據庫賬號登陸到系統的方案,在這種情況下,這個賬號對于業務數據庫一般來說操作權限很高,而這個賬號一旦泄漏,攻擊者利用sqlplus工具可以方遍地竊取數據。

l         和用應用程序自己實現的方法相比,這種技術更加靈活,而且便于治理,同時開發成本也是最低的。

采用了這種行記錄控制技術,不需要通過應用程序實現,大大地簡化了應用系統地復雜性,同時也讓你的系統的結構很清楚,而出現錯誤的可能性就更低了。當然,你自己建立的控制系統也可以做到ORACLE 8i的功能,但是會大大加大開發成本。

l         對于ASP(應用服務供給商)系統,滿足了用戶數據存放在一起,但又能夠獨立分開訪問的要求。筆者覺得,這項技術,對于構建ASP應用系統的用戶非凡有用,充分利用ORACLE提供的新技術,讓你的系統更加安全、可靠。

總之,Virtual Private Database是一個功能強大的行級規則控制技術,是ORACLE8i提供給我們的一個強有力的特性,充分地應用,可以大大節省軟件開發成本。

筆者認為Virtual Private Database技術是一個非常有用的技術,而在SQL Server 2000和Sybase ASE 12.5中,沒有看到類似的技術。

 

 

 

 

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品高清美女精品国产区| 国产69精品久久久久9999| 亚洲人成电影网| 日韩欧美精品网址| 4438全国亚洲精品在线观看视频| 亚洲综合在线做性| 国产视频精品va久久久久久| 欧美激情视频一区二区三区不卡| 国产精品激情av电影在线观看| 欧美日本啪啪无遮挡网站| 日本精品久久久| 国产一区二区黑人欧美xxxx| 亚洲人精选亚洲人成在线| 亚洲一区二区在线播放| 欧美激情精品久久久久久免费印度| 国产91精品最新在线播放| 亚洲综合国产精品| 国内精品小视频| 欧美日韩国产第一页| 国产精品久久久久久久久久ktv| 亚洲欧洲日产国码av系列天堂| 日韩福利伦理影院免费| 日韩精品免费在线播放| 日韩不卡中文字幕| 日韩在线欧美在线国产在线| 欧美男插女视频| 懂色av中文一区二区三区天美| 日本人成精品视频在线| 91免费高清视频| 日韩午夜在线视频| 亚洲精品在线91| 久久噜噜噜精品国产亚洲综合| 欧美亚洲另类视频| 性夜试看影院91社区| 日韩高清av一区二区三区| 欧美壮男野外gaytube| 色综合久久精品亚洲国产| 欧美激情视频在线| 久久久久久成人精品| 国产精品美乳在线观看| 亚洲国产欧美自拍| 性欧美亚洲xxxx乳在线观看| 亚洲精品久久久久久久久久久久| 精品久久久久久久大神国产| 久久天天躁夜夜躁狠狠躁2022| 亚洲男人天堂九九视频| 日本一区二三区好的精华液| 欧美在线播放视频| 55夜色66夜色国产精品视频| 欧美另类在线播放| 久久资源免费视频| 日韩中文字幕精品| 亚洲视频axxx| 亚洲欧美综合图区| 日韩国产精品亚洲а∨天堂免| 亚洲人精品午夜在线观看| 日韩在线中文视频| 国产ts一区二区| 欧美xxxx做受欧美| 91老司机精品视频| 一区二区三区久久精品| 中文字幕一区二区精品| 欧美亚洲国产成人精品| 91精品国产综合久久久久久蜜臀| 91国内免费在线视频| 欧美裸体xxxx| 日本精品久久电影| 国产精品久久久久久搜索| 久久精品久久久久久国产 免费| 日韩国产欧美精品一区二区三区| 在线播放国产一区二区三区| 欧美高清性猛交| 国产欧美日韩中文字幕在线| 欧美激情中文网| 韩国国内大量揄拍精品视频| 欧美视频中文在线看| 91国产精品视频在线| 亚洲三级黄色在线观看| 国产91精品视频在线观看| 欧美国产一区二区三区| 亚洲视频在线观看免费| 日产精品久久久一区二区福利| 国产精品视频白浆免费视频| 亚洲社区在线观看| 亚洲天堂视频在线观看| 国产91网红主播在线观看| 亚洲男人天堂视频| 国产剧情日韩欧美| 国产精品久久久久7777婷婷| 亚洲男人天堂久| 97超级碰在线看视频免费在线看| 亚洲女人被黑人巨大进入| 深夜福利国产精品| 亚洲人成电影在线播放| 亚洲精品久久久久久久久久久久久| 欧美中文在线观看国产| 国产午夜精品全部视频播放| 国产性色av一区二区| 欧美成人激情视频免费观看| 亚洲人成在线观| 欧美日韩中文字幕日韩欧美| 久热99视频在线观看| 97不卡在线视频| 亚洲欧美中文日韩v在线观看| 国语自产偷拍精品视频偷| 91丨九色丨国产在线| 国产精品午夜一区二区欲梦| 成人羞羞国产免费| 精品国产鲁一鲁一区二区张丽| 日韩av免费看网站| 欧美第一淫aaasss性| 国产欧洲精品视频| 久久香蕉频线观| 久久精品亚洲94久久精品| 69视频在线免费观看| 日韩欧美在线第一页| 日韩中文字幕在线| 91精品久久久久久| 欧美一级淫片丝袜脚交| 成人免费在线网址| 欧美午夜精品久久久久久久| 久久久成人精品| 午夜精品免费视频| 久久精品国产一区二区三区| 久久精品久久久久久国产 免费| 91免费人成网站在线观看18| 精品福利一区二区| 欧美精品激情blacked18| 欧美亚洲午夜视频在线观看| 欧美性开放视频| 久久精品最新地址| 欧美性一区二区三区| 欧美小视频在线观看| 日韩精品在线观看一区| 日韩av在线播放资源| 欧美老肥婆性猛交视频| 国产精品久久二区| 国产成+人+综合+亚洲欧美丁香花| 欧美激情小视频| 亚洲无亚洲人成网站77777| 国产日产亚洲精品| 91午夜在线播放| 亚洲奶大毛多的老太婆| 日韩成人激情在线| 黄色成人在线播放| 日韩精品在线免费观看| 成人av电影天堂| 国产精品久久久久久av福利软件| 精品偷拍一区二区三区在线看| 国产97人人超碰caoprom| 日本欧美一二三区| 久热精品在线视频| 国产精品视频不卡| 欧美性猛交xxxxx免费看| 中文欧美日本在线资源| 国产精品嫩草影院久久久| 国产精品久久二区| 亚洲成av人乱码色午夜| 亚洲影视中文字幕| 国产欧美日韩免费看aⅴ视频| 国产成人精品综合久久久| 欧美色视频日本高清在线观看| 精品久久久久久亚洲国产300| 福利微拍一区二区|