王 紅,陳功平
(六安職業(yè)技術(shù)學(xué)院 信息工程系,安徽 六安237158)
網(wǎng)絡(luò)應(yīng)用技術(shù)的發(fā)展,讓人們可以隨時(shí)隨地與好友交流、上網(wǎng)購(gòu)物、管理網(wǎng)上銀行等業(yè)務(wù),你登錄各種賬戶所用到的用戶名、密碼以及你所管理的各項(xiàng)業(yè)務(wù)的數(shù)據(jù)都存儲(chǔ)在網(wǎng)絡(luò)中的某個(gè)節(jié)點(diǎn)計(jì)算機(jī)上。
計(jì)算機(jī)時(shí)代,使用數(shù)據(jù)庫(kù)技術(shù)來存儲(chǔ)和管理龐大的數(shù)據(jù),如何保證數(shù)據(jù)庫(kù)中的數(shù)據(jù)安全有效的運(yùn)行,能夠自我保護(hù)[1],同時(shí)免疫外界的覬覦,這些都屬于數(shù)據(jù)庫(kù)安全要解決的問題。
數(shù)據(jù)庫(kù)管理系統(tǒng)開發(fā)者在設(shè)計(jì)時(shí)都會(huì)考慮到數(shù)據(jù)庫(kù)安全保護(hù)機(jī)制方面的需求,設(shè)計(jì)許多的安全管理接口,同時(shí)用戶也可以根據(jù)需求自己配置數(shù)據(jù)庫(kù)安全措施。本文以微軟的SQL Server數(shù)據(jù)庫(kù)管理系統(tǒng)為例,介紹其在數(shù)據(jù)庫(kù)安全機(jī)制方面的接口以及實(shí)現(xiàn)方法。
微軟產(chǎn)品的市場(chǎng)占有率非常高,SQL Server作為微軟最核心、復(fù)雜的商業(yè)數(shù)據(jù)庫(kù)管理系統(tǒng)軟件,得到了許多用戶的支持,版本更新很快,管理能力強(qiáng),在安全配置方面有著獨(dú)特的機(jī)制和實(shí)現(xiàn)方法。
微軟的數(shù)據(jù)庫(kù)產(chǎn)品很多,Visual FoxPro和ACCESS數(shù)據(jù)庫(kù)的數(shù)據(jù)以文件形式直接存儲(chǔ)在計(jì)算機(jī)中,Visual FoxPro數(shù)據(jù)庫(kù)文件擴(kuò)展名為“.dbf”,ACCESS數(shù)據(jù)庫(kù)文件的擴(kuò)展名為“.mdb”,只要用對(duì)應(yīng)的軟件就可以將文件打開,即使文件設(shè)置了密碼,也很容易破解,文件打開后,所有的數(shù)據(jù)都可以展示在用戶面前,數(shù)據(jù)的隱私性無從談起,因此它們?cè)谏虡I(yè)運(yùn)用中較少。SQL Server數(shù)據(jù)庫(kù)在操作系統(tǒng)中也是以文件形式存儲(chǔ),文件分為數(shù)據(jù)文件和日志文件兩種類型。
(1)數(shù)據(jù)文件
SQL Server中的數(shù)據(jù)文件又分為“主數(shù)據(jù)文件”和“次數(shù)據(jù)文件”兩類,數(shù)據(jù)庫(kù)必須有且只能有一個(gè)主數(shù)據(jù)文件,次數(shù)據(jù)文件可以沒有,也可以有多個(gè),它們共同存儲(chǔ)所有數(shù)據(jù)庫(kù)對(duì)象,但用戶無法得知每個(gè)數(shù)據(jù)庫(kù)對(duì)象存儲(chǔ)在哪個(gè)文件中,這有利于保護(hù)數(shù)據(jù)。
主數(shù)據(jù)文件的推薦擴(kuò)展名為“.mdf”,次數(shù)據(jù)文件的推薦擴(kuò)展名為“.ndf”,若用戶在創(chuàng)建數(shù)據(jù)庫(kù)或?yàn)閿?shù)據(jù)庫(kù)添加文件時(shí),沒有使用推薦擴(kuò)展名,使用其他字符作擴(kuò)展名或未使用擴(kuò)展名,都不影響數(shù)據(jù)庫(kù)的運(yùn)行。
(2)日志文件
日志文件存儲(chǔ)用戶對(duì)數(shù)據(jù)庫(kù)的所有操作,推薦擴(kuò)展名為“.ldf”,數(shù)據(jù)庫(kù)至少要有一個(gè)日志文件。
當(dāng)數(shù)據(jù)庫(kù)在SQL Serve系統(tǒng)中存在時(shí),即使關(guān)閉SQL Server軟件,但SQL Server服務(wù)是啟動(dòng)狀態(tài)時(shí),該數(shù)據(jù)庫(kù)所屬的各個(gè)數(shù)據(jù)庫(kù)文件都不能被拷貝、刪除,除非你將數(shù)據(jù)庫(kù)從管理系統(tǒng)中分離或停止、暫停SQL Server服務(wù),才能夠?qū)崿F(xiàn)數(shù)據(jù)庫(kù)文件的拷貝、刪除等操作。這是數(shù)據(jù)庫(kù)文件的自我安全保護(hù)機(jī)制之一,防止用戶無意中刪除文件而使得數(shù)據(jù)庫(kù)不可用,同時(shí)也防止不法人員拷貝文件而獲取信息。
當(dāng)用戶獲取到數(shù)據(jù)庫(kù)文件后,即使系統(tǒng)安裝了相應(yīng)的數(shù)據(jù)庫(kù)軟件,也無法直接雙擊打開數(shù)據(jù)庫(kù)文件,只有將數(shù)據(jù)庫(kù)文件在數(shù)據(jù)庫(kù)系統(tǒng)中附加或還原后方可查看數(shù)據(jù)庫(kù)中的數(shù)據(jù),若你得到的數(shù)據(jù)文件有缺失,附加和還原操作也將不能進(jìn)行,這是數(shù)據(jù)庫(kù)文件的自我安全保護(hù)機(jī)制之二,防止用戶得到部分文件后造成信息泄露。
同時(shí),數(shù)據(jù)庫(kù)文件的擴(kuò)展名用戶可以自己定義,這是數(shù)據(jù)庫(kù)文件的自我安全保護(hù)機(jī)制之三,可以起到隱藏身份的作用。
數(shù)據(jù)庫(kù)文件只有在數(shù)據(jù)庫(kù)系統(tǒng)中才可以查看、修改和配置,受到層層保護(hù)。可以將數(shù)據(jù)庫(kù)中的數(shù)據(jù)比作博物館中的藏品,不法分子要想得到藏品,首先要能夠進(jìn)入博物館大門,然后要能夠進(jìn)入藏品的房間,最后還要看你是否有得到藏品的權(quán)限,基于此原理,SQL Server軟件為數(shù)據(jù)庫(kù)中的數(shù)據(jù)設(shè)置了3道關(guān)卡。
第1關(guān),用戶必須登錄到SQL Server的服務(wù)器實(shí)例上。要登錄到服務(wù)器實(shí)例,首先要有一個(gè)登錄賬戶,即登錄名。SQL Server提供了一個(gè)不能被刪除、修改且權(quán)限最大的登錄名“sa”,可以為“sa”配置密碼或取消其登錄資格來保護(hù)數(shù)據(jù)庫(kù)。
第2關(guān),登錄服務(wù)器后,登錄名在數(shù)據(jù)庫(kù)中要有對(duì)應(yīng)的用戶賬號(hào),才有訪問數(shù)據(jù)庫(kù)的資格,否則無法打開用戶數(shù)據(jù)庫(kù)。默認(rèn)情況下,每個(gè)數(shù)據(jù)庫(kù)中都有一個(gè)權(quán)限最高的用戶賬戶dbo,它對(duì)應(yīng)“sa”的登錄名。
第3關(guān),連接到數(shù)據(jù)庫(kù)后,要管理數(shù)據(jù)庫(kù)中的對(duì)象,用戶賬戶要具有相應(yīng)的權(quán)限。
安全驗(yàn)證機(jī)制是針對(duì)3道關(guān)卡中的第1關(guān),有“Windows驗(yàn)證機(jī)制”和“SQL Server驗(yàn)證機(jī)制”兩種。
用戶在登錄操作系統(tǒng)時(shí)需要提供身份驗(yàn)證信息,因此Windows驗(yàn)證機(jī)制是借助Windows的驗(yàn)證機(jī)制,只要指用戶通過操作系統(tǒng)即可使用數(shù)據(jù)庫(kù)系統(tǒng);SQL Server驗(yàn)證機(jī)制是數(shù)據(jù)庫(kù)系統(tǒng)自帶的驗(yàn)證機(jī)制,如1.2中介紹的“sa”登錄名以及對(duì)應(yīng)的用戶賬戶,屬于SQL Server的驗(yàn)證機(jī)制[2]。
在2種安全驗(yàn)證機(jī)制的基礎(chǔ)上,SQL Server數(shù)據(jù)庫(kù)系統(tǒng)提供了“僅Windows身份驗(yàn)證模式”和“混合驗(yàn)證模式”2種身份驗(yàn)證模式[3]。
將SQL Server服務(wù)器設(shè)置為“僅Windows身份驗(yàn)證模式”后,只能采用“Windows驗(yàn)證機(jī)制”來驗(yàn)證用戶的身份;“混合驗(yàn)證模式”指既可以使用“Windows驗(yàn)證機(jī)制”又可以使用“SQL Server驗(yàn)證機(jī)制”來驗(yàn)證用戶身份。
根據(jù)3道關(guān)卡、2種安全機(jī)制和2種身份驗(yàn)證模式的安全機(jī)制,SQL Server能夠?qū)崿F(xiàn)由大到小、由粗到細(xì)的不同級(jí)別的安全保護(hù)措施。
SQL Server是以服務(wù)的形式保證數(shù)據(jù)庫(kù)的運(yùn)行,用戶可以在一臺(tái)計(jì)算機(jī)上安裝多個(gè)名字不同的服務(wù)器實(shí)例,每個(gè)服務(wù)器實(shí)例獨(dú)立存在,可以擁有各自的數(shù)據(jù)庫(kù)及數(shù)據(jù)庫(kù)對(duì)象。服務(wù)器級(jí)的安全影響范圍最廣,設(shè)計(jì)時(shí)要慎重。
(1)登錄賬戶
“登錄賬戶”是打開數(shù)據(jù)庫(kù)服務(wù)器的鑰匙,成功登錄服務(wù)器后,可以在“安全性”的“登錄名”項(xiàng)下看到當(dāng)前服務(wù)器中所有登錄賬戶,如圖1所示。
可以在登錄賬戶中創(chuàng)建新的登錄名,新建時(shí)會(huì)詢問你選擇何種驗(yàn)證機(jī)制,如果是“Windows驗(yàn)證機(jī)制”,必須基于操作系統(tǒng)中的用戶方可建立,如果是“SQL Server驗(yàn)證機(jī)制”,需要用戶輸入登錄密碼。
圖1 登錄賬戶信息
有登錄名后就可以在連接到服務(wù)器的“數(shù)據(jù)庫(kù)引擎”服務(wù)時(shí)時(shí)選擇“身份驗(yàn)證”機(jī)制,正確時(shí)就可以連接到服務(wù)器,如圖2所示。
圖2 用登錄名連接到服務(wù)器
通過登錄名的屬性面板中的“狀態(tài)”項(xiàng),可以“啟用”和“禁用”登錄名,禁用那些高權(quán)限的登錄名也可以起到保護(hù)數(shù)據(jù)庫(kù)安全的作用。
(2)服務(wù)器角色
服務(wù)器角色有9種,每個(gè)角色的操作權(quán)限不一樣,所有登錄賬戶都必須屬于“public”服務(wù)器角色,可以為public角色賦予權(quán)限,方便讓所有賬戶具備統(tǒng)一功能,默認(rèn)情況下“public”角色只可登錄服務(wù)器,不具備訪問用戶數(shù)據(jù)庫(kù)的權(quán)限。服務(wù)器各角色及其功能如表1所示。
表1 服務(wù)器角色及功能描述
在新建登錄賬戶或配置登錄賬戶屬性時(shí),賦予賬戶服務(wù)器角色,簡(jiǎn)化用戶的設(shè)置,其中“sysadmin”服務(wù)器角色的權(quán)限最高,若登錄賬戶是該角色成員,即使沒有在數(shù)據(jù)庫(kù)中創(chuàng)建“數(shù)據(jù)庫(kù)用戶”,因具備最高權(quán)限,可執(zhí)行任何操作。
(1)數(shù)據(jù)庫(kù)用戶
數(shù)據(jù)庫(kù)用戶是登錄名在數(shù)據(jù)庫(kù)中的映射,若登錄名不屬于“sysadmin”角色,通常都要在數(shù)據(jù)庫(kù)中為登錄名創(chuàng)建對(duì)應(yīng)用戶,否則登錄名不能訪問用戶數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)用戶在“安全性”中的“用戶”項(xiàng)下,如圖3所示。
在數(shù)據(jù)庫(kù)的“用戶”項(xiàng)中可以創(chuàng)建用戶,創(chuàng)建時(shí)要選擇用戶所基于的“登錄名”,同時(shí)也可以設(shè)置用戶的“數(shù)據(jù)庫(kù)角色”。
(2)數(shù)據(jù)庫(kù)角色
數(shù)據(jù)庫(kù)設(shè)計(jì)者可以新建“數(shù)據(jù)庫(kù)角色”,開發(fā)者也為數(shù)據(jù)庫(kù)設(shè)計(jì)了10種固定數(shù)據(jù)庫(kù)角色,如圖4所示。
圖3 數(shù)據(jù)庫(kù)用戶
圖4 固定數(shù)據(jù)庫(kù)角色
固定數(shù)據(jù)庫(kù)角色名及說明見表2所示。
表2 固定數(shù)據(jù)庫(kù)角色一覽表
“db_owner”角色擁有數(shù)據(jù)庫(kù)級(jí)的最高權(quán)限,賦予用戶角色時(shí)要慎重。
用戶創(chuàng)建的角色稱為“用戶自定義數(shù)據(jù)庫(kù)角色”,創(chuàng)建角色時(shí)要賦予角色相應(yīng)的權(quán)限,實(shí)現(xiàn)角色的功能。
(3)權(quán)限
權(quán)限是數(shù)據(jù)庫(kù)安全管理最細(xì)致的一項(xiàng),不同的對(duì)象所具備的權(quán)限不同,常用的權(quán)限如表3所示。
表3 常用的權(quán)限
可以將權(quán)限授予角色、數(shù)據(jù)庫(kù)用戶。使用權(quán)限設(shè)置用戶或角色的功能可以更好的保護(hù)數(shù)據(jù)庫(kù)安全,同時(shí)要求設(shè)計(jì)者要具備良好的權(quán)限認(rèn)知能力。
第2節(jié)介紹的登錄名、用戶、權(quán)限、角色能夠起到保護(hù)數(shù)據(jù)的作用,但仍無法避免數(shù)據(jù)被獲取。SQL Server從2000版本開始提供數(shù)據(jù)加密,在2005版本中又增加了列級(jí)加密,2008版本引入了透明數(shù)據(jù)加密(TDE),有了數(shù)據(jù)加密技術(shù),即使得到數(shù)據(jù),也要解密才可以查看到正確信息,為數(shù)據(jù)安全加了一層保護(hù)[4]。
SQL Server支持對(duì)稱加密(Symmetric Key Encryption)和非對(duì)稱加密(Asymmetric Key Encryption)兩種,對(duì)稱加密是指加密和解密的密鑰相同,SQL Server提供RC4、RC2、DES和AES等加密算法,非對(duì)稱加密是指加密和解密的密鑰不同,如RSA加密算法、數(shù)字證書等。
與1.2節(jié)介紹的3道關(guān)卡一樣,數(shù)據(jù)加密在數(shù)據(jù)庫(kù)管理系統(tǒng)中也是分層級(jí)的,從加密影響范圍的廣窄依次為服務(wù)主密鑰(Service Master Key)、數(shù)據(jù)庫(kù)主密鑰(Database Master Key)、對(duì)稱密鑰或非對(duì)稱密鑰或證書,服務(wù)主密鑰影響整個(gè)的服務(wù)器實(shí)例,在安裝服務(wù)器實(shí)例時(shí)自動(dòng)生成。
數(shù)據(jù)庫(kù)主密鑰由服務(wù)主密鑰進(jìn)行加密,每個(gè)數(shù)據(jù)庫(kù)只能有一個(gè)數(shù)據(jù)庫(kù)主密鑰,可以用于為創(chuàng)建數(shù)據(jù)庫(kù)級(jí)別的證書或非對(duì)稱密鑰提供加密[5],只能通過T-SQL語(yǔ)句創(chuàng)建。
如下T-SQL語(yǔ)句創(chuàng)建密碼為“123456”的數(shù)據(jù)庫(kù)主密鑰。
CREATE MASTER KEY ENCRYPTION BY PASSWORD ='123456'
創(chuàng)建成功后,數(shù)據(jù)庫(kù)主密鑰由“123456”的密碼和服務(wù)主密鑰共同保護(hù)。刪除數(shù)據(jù)庫(kù)主密鑰的T-SQL語(yǔ)句如下。
當(dāng)數(shù)據(jù)庫(kù)主密鑰創(chuàng)建成功后,我們就可以使用這個(gè)密鑰創(chuàng)建對(duì)稱密鑰,非對(duì)稱密鑰和證書。
(1)創(chuàng)建證書
證書是一個(gè)數(shù)據(jù)庫(kù)級(jí)的安全對(duì)象,可以基于數(shù)據(jù)庫(kù)主密鑰創(chuàng)建,也可以在無數(shù)據(jù)庫(kù)主密鑰的情況下創(chuàng)建證書。
下面語(yǔ)句的作用是創(chuàng)建名為Cer_1的證書,它的私鑰是由密碼“123”來保護(hù),該語(yǔ)句可以在無數(shù)據(jù)庫(kù)主密鑰的數(shù)據(jù)庫(kù)中創(chuàng)建證書。
CREATE CERTIFICATE Cer_1ENCRYPTION BY PASSWORD=′123′WITH SUBJECT =′Cer1′
WITH SUBJECT項(xiàng)表示證書的“主題”,是指證書的元數(shù)據(jù)中的字段。
如下語(yǔ)句是創(chuàng)建名為Cer_2的證書,該語(yǔ)句創(chuàng)建的證書必須基于數(shù)據(jù)庫(kù)主密鑰方可實(shí)現(xiàn)。
(2)非對(duì)稱密鑰
創(chuàng)建名為Asy_1基于RSA_2048算法的非對(duì)稱密鑰,使用密碼“111”保護(hù)私鑰,可以在無數(shù)據(jù)庫(kù)主密鑰的數(shù)據(jù)庫(kù)中實(shí)現(xiàn),語(yǔ)句如下。
如下語(yǔ)句是創(chuàng)建名為Asy_2基于RSA_512算法的非對(duì)稱密鑰,該語(yǔ)句只能在有數(shù)據(jù)庫(kù)主密鑰的數(shù)據(jù)庫(kù)中方可實(shí)現(xiàn)。
(3)對(duì)稱密鑰
對(duì)稱密鑰不能直接基于數(shù)據(jù)庫(kù)主密鑰創(chuàng)建,可以基于密碼、非對(duì)稱密鑰、對(duì)稱密鑰、證書等。
創(chuàng)建名為Sym_1基于AES_256算法的對(duì)稱密鑰,使用密碼“321”保護(hù)私鑰,可以在無數(shù)據(jù)庫(kù)主密鑰的數(shù)據(jù)庫(kù)中實(shí)現(xiàn),語(yǔ)句如下。
創(chuàng)建名為Sym_2的對(duì)稱密鑰,使用證書Cer_1對(duì)該對(duì)稱密鑰進(jìn)行加密,語(yǔ)句如下。
創(chuàng)建后,可以在數(shù)據(jù)庫(kù)的“安全性”選項(xiàng)下查看創(chuàng)建成功的非對(duì)稱密鑰、證書和對(duì)稱密鑰,并可以執(zhí)行“刪除”等操作,如圖5所示。
圖5 查看非對(duì)稱密鑰、證書和對(duì)稱密鑰
SQL Server在2005版本引入了列加密的功能,可以利用證書,對(duì)稱密鑰和非對(duì)稱密鑰對(duì)需要保護(hù)的列進(jìn)行加密,根據(jù)加密解密的方式不同,內(nèi)置了4對(duì)函數(shù)用于加密解密[6],如表4所示。
表4 列級(jí)加密解密函數(shù)
列級(jí)加密和解密時(shí)首先需要將列數(shù)據(jù)類型轉(zhuǎn)換成VARBINARY類型,且需要將加密和解密的密鑰打開,打開Sym_2密鑰的命令如下。
密鑰打開后,利用INSERT或UPDATE操作加密數(shù)據(jù),假定表student中的“密碼”列的數(shù)據(jù)類型為VARBINARY,加密語(yǔ)句如下。
UPDATE student SET 密碼= EncryptByKey(Key_GUID(′abc′),′123′)where 1<>1
INSERT student(密碼)values(EncryptByKey(KEY_GUID(′aa′),′123′))
列被加密后,直接查詢查看不到數(shù)據(jù),必須解密后才可以看到實(shí)際內(nèi)容;也無法直接錄入數(shù)據(jù)到該列。
觸發(fā)器是SQL Server數(shù)據(jù)庫(kù)中的一類特殊的數(shù)據(jù)庫(kù)對(duì)象,當(dāng)用戶執(zhí)行某項(xiàng)操作時(shí)會(huì)觸發(fā)某些操作,觸發(fā)器內(nèi)容用戶可以自己定義。
SQL Server中的觸發(fā)器分為數(shù)據(jù)操縱(DML)觸發(fā)器和數(shù)據(jù)定義(DDL)觸發(fā)器兩類。INSERT、UPDATE、DELETE關(guān)鍵字可定義DML觸發(fā)器,CREATE、ALTER、DROP關(guān)鍵字可定義DDL觸發(fā)器。
使用觸發(fā)器保護(hù)數(shù)據(jù)屬于鞏固性質(zhì)的,可以屏蔽數(shù)據(jù)庫(kù)中的某些操作,讓非法用戶的操作不能被正確執(zhí)行。
DML觸發(fā)器根據(jù)功能的不同,分為AFTER和INSTEAD OF兩種類型[7]。AFTER型先執(zhí)行INSERT、UPDATE、DELETE語(yǔ)句,然后再執(zhí)行觸發(fā)器語(yǔ)句;INSTEAD OF觸發(fā)器也叫做替代觸發(fā)器,如果INSERT、UPDATE、DELETE語(yǔ)句定義了INSTEAD OF觸發(fā)器,當(dāng)執(zhí)行INSERT、UPDATE、DELETE語(yǔ)句時(shí),真正被執(zhí)行的是觸發(fā)器語(yǔ)句,而非執(zhí)行增、改、刪。這類觸發(fā)器在保護(hù)數(shù)據(jù)表方面有一定的作用。
用AFTER型觸發(fā)器保護(hù)數(shù)據(jù)的常用方法是在觸發(fā)器語(yǔ)句中定義事務(wù)回滾,以阻止語(yǔ)句被真正執(zhí)行;INSTEAD OF型觸發(fā)器可以將表記錄的增加、修改、刪除操作引向觸發(fā)器語(yǔ)句,阻止操作被真正執(zhí)行。由此可見,DML觸發(fā)器保護(hù)數(shù)據(jù)限制多、功能單一,只能作為補(bǔ)充。創(chuàng)建觸發(fā)器的命令格式如下。
CREATE TRIGGER觸發(fā)器名稱
ON {表|視圖}{FOR|AFTER|INSTEAD OF}{[INSERT][,][UPDATE][,][DELETE]}
AS
觸發(fā)器語(yǔ)句
FOR與AFTER關(guān)鍵字定義的觸發(fā)器執(zhí)行方式相同。下列代碼所創(chuàng)建觸發(fā)器的功能可防止student表中的記錄被刪除。
CREATE TRIGGER tr_student_delete ON student FOR DELETE
AS
ROLLBACK TRANSACTION--事務(wù)回滾
DDL觸發(fā)器只有AFTER類型,沒有INSTEAD OF型,創(chuàng)建DDL觸發(fā)器的語(yǔ)句格式如下。
CREATE TRIGGER觸發(fā)器名ON{All Server|DATABASE}{FOR|AFTER}{DDL觸發(fā)語(yǔ)句}
AS
觸發(fā)器語(yǔ)句
說明:ON關(guān)鍵字后若是DATABASE,表示數(shù)據(jù)庫(kù)級(jí)觸發(fā)器,即將觸發(fā)器作用到當(dāng)前數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)執(zhí)行DDL觸發(fā)語(yǔ)句時(shí)將觸發(fā)該觸發(fā)器;若為ALL SERVER,表示服務(wù)器級(jí)觸發(fā)器,即將觸發(fā)器作用到當(dāng)前服務(wù)器上,因此當(dāng)服務(wù)器上任何一個(gè)數(shù)據(jù)庫(kù)的DDL出發(fā)語(yǔ)句都能激活該觸發(fā)器。常用的DDL觸發(fā)語(yǔ)句見表5所示。
下列觸發(fā)器TR_DDL_1的功能可阻止在當(dāng)前數(shù)據(jù)庫(kù)中刪除數(shù)據(jù)表和修改數(shù)據(jù)表。
CREATE TRIGGER TR_DDL_1ON DATABASE FOR DROP_TABLE,ALTER_TABLE
AS
ROLLBACK TRANSACTION
下列觸發(fā)器TR_DDL_2的功能可阻止在當(dāng)前服務(wù)器實(shí)例中創(chuàng)建數(shù)據(jù)表和修改數(shù)據(jù)表。
CREATE TRIGGER TR_DDL_2ON ALL SERVER FOR CREATE_TABLE,ALTER_TABLE
AS
ROLLBACK TRANSACTION
表5 常用的DDL觸發(fā)語(yǔ)句
數(shù)據(jù)庫(kù)設(shè)計(jì)者和使用者要將保護(hù)數(shù)據(jù)的安全性放在第一位,在設(shè)計(jì)和配置數(shù)據(jù)庫(kù)時(shí),應(yīng)采用各種方式合理的保護(hù)數(shù)據(jù)庫(kù),既要合理的防止合法用戶的誤操作,更要有效的防止非法用戶的惡意竊取。
[1] 吳溥峰,張玉清.數(shù)據(jù)庫(kù)安全綜述[J].計(jì)算機(jī)工程,2006,32(12):85-88.
[2] 王鳳玲.SQL數(shù)據(jù)庫(kù)安全性研究[J].電子技術(shù),2012,39(6):19-20.
[3] 何斌穎,劉榮.Oracel和SQL Server數(shù)據(jù)庫(kù)安全基線審查[J].云南大學(xué)學(xué)報(bào)(自然科學(xué)版),2013,35(S2):63-68.
[4] 李光師,孟祥茹.Oracle中矢量數(shù)據(jù)安全保護(hù)方法[J].計(jì)算機(jī)工程,2012,38(10):102-104.
[5] 郝文寧,趙恩來,劉玉棟,黃亞,劉軍濤.異構(gòu)數(shù)據(jù)庫(kù)加解密系統(tǒng)的關(guān)鍵技術(shù)研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2010,30(9):2339-2343.
[6] Erez Shmueli,Ronen Vaisenberg,Ehud Gudes,Yuval Elovici.Implementing a database encryption solution,design and implementation issues[J].Computers &Security,2014,44(3):33-50.
[7] Wai Yin Mok,Charles F.Hickman,Christopher D.Allport.Implementing Business Processes:A Database Trigger Approach[J].IGI Global Journal,2013,3(2):671-687.