虛擬專用資料庫概述

虛擬專用資料庫是一項重要技術,使企業能夠構建託管的、基於 Web 的應用程式。實際上,許多 Oracle 應用程式本身使用 VPD 實施資料分隔,包括 Oracle 和 Oracle Portal 等程式。下面小編為大家整理了關於虛擬專用資料庫概述的文章,希望能為你提供幫助:

虛擬專用資料庫概述

  概述

虛擬專用資料庫 (VPD) 提供了角色和檢視無法提供的行級訪問控制。對於網際網路訪問,虛擬專用資料庫可以確保線上銀行的客戶只能看到他們自己的帳戶。Web 託管公司可以在同一 Oracle 資料庫中維護多個公司的資料,但只允許每個公司檢視其自身資料。

在企業內部,虛擬資料庫可在應用程式部署方面降低擁有成本。可以在資料庫伺服器一次實現安全性,而不用在訪問資料的每個應用程式中分別實現安全性。因為是在資料庫中實施安全性,所以不管使用者訪問資料的方式如何,安全性較以前更高。訪問即席查詢工具或新報表生成程式的使用者不再能繞過安全環節。虛擬專用資料庫是一項重要技術,使企業能夠構建託管的、基於 Web 的應用程式。實際上,許多 Oracle 應用程式本身使用 VPD 實施資料分隔,包括 Oracle 和 Oracle Portal 等程式。

  虛擬專用資料庫如何工作

將一個或多個安全策略與表或檢視關聯後,就可以實現虛擬專用資料庫。對帶安全策略的.表進行直接或間接訪問時,資料庫將呼叫一個實施該策略的函式。策略函式返回一個訪問條件(WHERE 子句),即謂詞。應用程式將它附加到使用者的 SQL 語句,從而動態修改使用者的資料訪問許可權。

你可以通過編寫一個儲存過程將 SQL 謂詞附加到每個 SQL 語句(用於控制該語句的行級別訪問許可權)來實施 VPD。例如,如果 John Doe(他屬於 Department 10)輸入 SELECT * FROM emp 語句,則可以使用 VPD 新增 WHERE DEPT = 10 子句。這樣,您便可以通過對查詢進行修改

  案例說明

1. 搭建環境--建立模式擁有者和相應的使用者,賦予許可權

view plaincopy to clipboardprint?

CONNECT sys/password@service AS SYSDBA;

CREATE USER schemaowner IDENTIFIED BY schemaowner

DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;

GRANT connect, resource TO schemaowner;

CREATE USER user1 IDENTIFIED BY user1

DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;

GRANT connect, resource TO user1;

CREATE USER user2 IDENTIFIED BY user2

DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;

GRANT connect, resource TO user2;

GRANT EXECUTE ON DBMS_RLS TO PUBLIC;

CONN schemaowner/schemaowner@service

CREATE TABLE users

(id NUMBER(10) NOT NULL,

ouser VARCHAR2(30) NOT NULL,

first_name VARCHAR2(50) NOT NULL,

last_name VARCHAR2(50) NOT NULL);

CREATE TABLE user_data

(column1 VARCHAR2(50) NOT NULL,

user_id NUMBER(10) NOT NULL);

INSERT INTO users VALUES (1,'USER1','User','One');

INSERT INTO users VALUES (2,'USER2','User','Two');

COMMIT;

GRANT SELECT, INSERT ON user_data TO user1, user2

CONNECT sys/password@service AS SYSDBA;

CREATE USER schemaowner IDENTIFIED BY schemaowner

DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;

GRANT connect, resource TO schemaowner;

CREATE USER user1 IDENTIFIED BY user1

DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;

GRANT connect, resource TO user1;

CREATE USER user2 IDENTIFIED BY user2

DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;

GRANT connect, resource TO user2;

GRANT EXECUTE ON DBMS_RLS TO PUBLIC;