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