凃云杰
(呼倫貝爾學院計算機學院,內蒙古海拉爾,021008)
視圖是一個虛表,它是由一個或者說多個基本表導出而形成的,但是數據依然存放在基本表中,所以它和基本表不同,二者存在區別。視圖的定義存放在數據庫中,它的作用就是數據庫顯示數據的窗口,通過視圖可以查看自己需要的數據庫的數據,并能看到相關數據的變化[1]。
視圖的主要作用如下:[2,3]
(1)視圖可以根據不同的用戶自行定義,對于用戶無權存儲的數據可以根據視圖機制對其進行保密,從而提高數據的安全性。(2)使用戶多種角度看待同一數據。(3)可以更清晰的表達查詢。
假設在某一單位的數據庫中,有如下的關系模式:
employee(eno,name,sex,age,position,duty,depno,phone);
department(depno,dname,phone,dean,location)。
employee中各個屬性含義如下:eno---職工號,name姓名,sex---性別,age---年齡,position---職稱,duty---職務,depno---部門號,phone---電話。
department中各個屬性含義如下:depno---系編號,dname---系名,phone---系辦電話,dean---系主任,location---辦公位置。
如果表中存在敏感數據,部分職工的數據需要進行保護,這完全可以可以通過視圖機制實現,比如,需要保護的信息為職務為“院長”的職工,不想為一般用戶看到或訪問,我們就可以這樣來建立視圖:
CREATE VIEW emp_notdean AS
SELECT *
FROM employee
WHERE duty! =‘院長’
經過加工處理后,職務為院長的信息通過視圖將不會看見。
應用視圖機制還可以直接訪問某些行。比如,規定只能對部門號為“222”的職工信息進行訪問,則可以建立如下視圖:
CREATE VIEW emp_222 AS
SELECT *
FROM employee WHERE depno=‘222’
在數據庫表中,有些列的數據需要保護,可以通過視圖機制來完成[5]。
在職工表中,假如職工的電話和年齡需要保護,則可以建立如下視圖:
CREATE VIEW not_phoneage AS
SELECT eno,name,sex,position,duty,depno FROM employee
這樣當用戶訪問職工表employee的視圖時,只能看到職工的姓名,職工號,職稱,職務,性別,部門號,不會顯示職工的年齡和電話。
也可以綜合使用限制行的訪問和限制列的訪問,如,當某個用戶對部門為“222”的職工具有訪問權限時,如果規定該用戶不能訪問該部門職工的年齡和電話,則可以這樣來建立視圖:
CREATE VIEW emp_ST AS
SELECT eno,name,sex,position,duty,depno
FROM employee WHERE depno=‘222’
可以在一個視圖基礎上建立另一個視圖,如上面的要求:當某個用戶對部門為“222”的職工具有訪問權限時,如果規定該用戶不能訪問該部門職工的年齡和工資,也可以基于已經存在的視圖“emp_222”來建立視圖emp _ST:
CREATE VIEW emp _ST AS
SELECT eno,name,sex,position,duty,depno FROM emp_222
可以建立分組視圖,如定義一個反映各個部門職工人數的視圖。
CREATE VIEW emp_count AS
SELECT depno,COUNT(*) AS 部 門 人 數 FROM employee GROUP BY depno
可以在CREATE VIEW語句中加入WITH CHECK OPTIION ,它表示對視圖進行UPDATE,INSERT和DELETE操作時保證更新、插入或刪除的行滿足視圖定義中的謂詞條件(即子查詢中的條件表達式)[2,3,4]。
例如,對上面的表employee,我們建立部門號為“222”的職工視圖的同時,要求限制訪問該部門職工的年齡和電話,另外,對視圖進行修改和插入時,仍需要保證該視圖只有該部門的職工的信息,則可以這樣來建立視圖:
CREATE VIEW emp_ST AS
SELECT eno,name,sex,position,duty,depno
FROM employee WHERE depno=‘222’ WITH CHECK OPTION
這樣,當用戶使用該視圖時,在修改或插入元組時,如果部門號不是“222”,則提示出錯信息,拒絕插入或修改。
可以創建基于多個基表的視圖,如建立信息系且年齡在40歲以上(含40歲)的職工的視圖。
CREATE VIEW emp_is40 AS
SELECT eno,name,sex,age,position,duty,depno,employee.phone,dname,department.phone,dean,location
FROM employee,department
WHERE employee.depno =department.depno AND dname=‘信息系’AND age>=40
視圖對應于數據庫三級模式的外模式,外模式是面向用戶的,用戶可以有多個。
如何增強數據庫安全性是一個需要綜合考慮各種因素的極其復雜的問題,它的涉及面廣、問題復雜,需要大量學者投入大量的時間、精力為之不懈努力。本文主要結合實例說明了視圖在數據庫安全中的應用,希望本文的內容對數據庫安全性的研究提供基礎服務作用。
參考文獻
[1] 崔巍.數據庫系統及應用(第3版)[M].北京:高等教育出版社.2012,8.
[2] 王珊,薩師煊.數據庫系統概論[M].北京:高等教育出版社,2014.
[3] 凃云杰.云背景下數據庫安全性與數據庫完整性研究[M].中國水利水電出版社.2014,10.
[4] 凃云杰,白楊.云背景下的數據庫安全性分析與策略研究[J].軟件導刊.2014,8.
[5] 崔巍.數據庫系統及應用(第3版)[M].北京:高等教育出版社.2012,8.