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