金躍權(quán)
(浙江外國(guó)語(yǔ)學(xué)院信息學(xué)院,浙江杭州 310012)
基于觸發(fā)器的敏感數(shù)據(jù)表監(jiān)護(hù)
金躍權(quán)
(浙江外國(guó)語(yǔ)學(xué)院信息學(xué)院,浙江杭州 310012)
探討了在信息系統(tǒng)后臺(tái)數(shù)據(jù)庫(kù)中利用 Insert、Update和 Delete三種觸發(fā)器來(lái)監(jiān)測(cè)跟蹤敏感數(shù)據(jù)表,以便數(shù)據(jù)庫(kù)管理者及時(shí)發(fā)現(xiàn)非法修改或刪除數(shù)據(jù),確保信息系統(tǒng)中數(shù)據(jù)的安全.
表;數(shù)據(jù)庫(kù);觸發(fā)器;數(shù)據(jù)監(jiān)測(cè)
隨著計(jì)算機(jī)技術(shù)的發(fā)展和其應(yīng)用的深入,各行各業(yè)普遍建立了適合本單位的管理信息系統(tǒng),大量與單位相關(guān)的基本信息數(shù)據(jù)和日常事務(wù)處理數(shù)據(jù)存放于信息系統(tǒng)后臺(tái)數(shù)據(jù)庫(kù),這些數(shù)據(jù)一方面給合法授權(quán)用戶帶來(lái)了共享和使用的方便,但另一方面這些數(shù)據(jù)也面臨安全的風(fēng)險(xiǎn).信息系統(tǒng)一般建立在局域網(wǎng)或廣域網(wǎng)環(huán)境,眾多系統(tǒng)用戶通過(guò)網(wǎng)絡(luò)操作信息系統(tǒng)后臺(tái)數(shù)據(jù)庫(kù)數(shù)據(jù),雖然信息系統(tǒng)設(shè)計(jì)時(shí)給各用戶授予了不同權(quán)限和密碼訪問(wèn)數(shù)據(jù),但用戶名和密碼仍有可能發(fā)生被盜泄密現(xiàn)象,從而讓非法人員通過(guò)網(wǎng)絡(luò)登錄信息系統(tǒng),對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行非法操作.若將那些對(duì)本單位運(yùn)營(yíng)來(lái)說(shuō)顯得非常重要的數(shù)據(jù)稱之為敏感數(shù)據(jù),那么在這些非法操作中,對(duì)敏感數(shù)據(jù)的修改和刪除,輕者會(huì)給單位日常事務(wù)帶來(lái)混亂,重者會(huì)影響企事業(yè)單位的決策.雖然對(duì)敏感數(shù)據(jù)可以采取加密等辦法進(jìn)行保護(hù),然而加密數(shù)據(jù)不便于使用者查詢和檢索,況且加密數(shù)據(jù)也會(huì)被盜和解密,所以對(duì)敏感數(shù)據(jù)的數(shù)據(jù)庫(kù)表不但要加強(qiáng)授權(quán)用戶的管理,而且要對(duì)數(shù)據(jù)庫(kù)表進(jìn)行實(shí)時(shí)的監(jiān)測(cè)跟蹤,從而實(shí)現(xiàn)保護(hù)敏感數(shù)據(jù).為此,本文將對(duì)數(shù)據(jù)庫(kù)表實(shí)時(shí)監(jiān)測(cè)跟蹤進(jìn)行探討,為數(shù)據(jù)庫(kù)管理者 (DBA)提供一些相關(guān)的觸發(fā)器,實(shí)現(xiàn)對(duì)數(shù)據(jù)的監(jiān)測(cè)與保護(hù)[1].
雖然數(shù)據(jù)庫(kù)系統(tǒng)中的日志文件記錄了所有對(duì)數(shù)據(jù)庫(kù)的操作,但直接通過(guò)日志文件去查看和分析某個(gè)數(shù)據(jù)表中的記錄變化情況便不那么簡(jiǎn)單,因?yàn)槿罩疚募O(shè)計(jì)的初衷主要是用來(lái)修復(fù)與重建毀壞的數(shù)據(jù)庫(kù).所以在數(shù)據(jù)庫(kù)中要對(duì)存有敏感數(shù)據(jù)的表實(shí)現(xiàn)實(shí)時(shí)監(jiān)測(cè),理想的辦法之一就是建立一個(gè)與之對(duì)應(yīng)的監(jiān)測(cè)跟蹤表,將監(jiān)測(cè)到的變化情況存入監(jiān)測(cè)跟蹤表,進(jìn)行檢查分析,判斷對(duì)敏感數(shù)據(jù)表操作的合非性.本文以高校教務(wù)信息系統(tǒng)后臺(tái) SQL Server數(shù)據(jù)庫(kù)中學(xué)生成績(jī)表數(shù)據(jù)監(jiān)測(cè)保護(hù)為例,論述數(shù)據(jù)監(jiān)測(cè)保護(hù)過(guò)程,其示意圖如圖 1所示.
圖1 學(xué)生成績(jī)表監(jiān)測(cè)和保護(hù)過(guò)程示意圖
數(shù)據(jù)監(jiān)測(cè)系統(tǒng)包含 Jiaowu教務(wù)數(shù)據(jù)庫(kù)和 Jiance監(jiān)測(cè)數(shù)據(jù)庫(kù),Jiaowu教務(wù)數(shù)據(jù)庫(kù)用于存放教務(wù)應(yīng)用數(shù)據(jù)表,如 Teacher教師表、Course課程表等,而 Jiance監(jiān)測(cè)數(shù)據(jù)庫(kù)只由數(shù)據(jù)庫(kù)管理者(DBA)掌管.Score學(xué)生成績(jī)表建立在 Jiaowu數(shù)據(jù)庫(kù)中,其監(jiān)測(cè)跟蹤表 Score_monitor創(chuàng)建在Jiance數(shù)據(jù)庫(kù)中.Score學(xué)生成績(jī)表包含所有學(xué)生多門(mén)課程的學(xué)習(xí)成績(jī),表中記錄由各課程任課教師通過(guò)網(wǎng)絡(luò)分別錄入,各學(xué)生也可以通過(guò)網(wǎng)絡(luò)查詢自己各課程的成績(jī),可以訪問(wèn) Score學(xué)生成績(jī)表的用戶很多,每個(gè)用戶都有自己訪問(wèn)操作學(xué)生成績(jī)表的權(quán)限和密碼.如果讓不懷好意者盜取他人密碼而修改或刪除 Score學(xué)生成績(jī)表中的某些記錄,就會(huì)引起教學(xué)管理的混亂.為此,在 Score表上建立 Insert、Update和 Delete三個(gè)觸發(fā)器,對(duì) Score學(xué)生成績(jī)表記錄變更進(jìn)行監(jiān)測(cè)跟蹤.
Score學(xué)生成績(jī)表和其監(jiān)測(cè)跟蹤表 Score_monitor的表結(jié)構(gòu)如表 1、表 2所示.對(duì)于存放敏感數(shù)據(jù)的表一般包含錄入者和錄入時(shí)間等字段表明數(shù)據(jù)錄入的合法性,Score表也不例外.Score_monitor表包含 Score表所有字段外,還包含改刪者、改刪時(shí)間和改刪類別等字段,該表記載 Score表中被修改了的和被刪除了的記錄,以供事后分析這些記錄被修改或刪除的合法性.Score_monitor表建立在 Jiance監(jiān)測(cè)數(shù)據(jù)庫(kù)中,只供數(shù)據(jù)庫(kù)管理者 (DBA)使用,與 Jiaowu教務(wù)數(shù)據(jù)庫(kù)隔開(kāi).
表1 Score表結(jié)構(gòu)
表2 Score_mon itor表結(jié)構(gòu)
Score學(xué)生成績(jī)表數(shù)據(jù)監(jiān)測(cè)保護(hù)工作過(guò)程如下:當(dāng) Score表中插入記錄時(shí),觸發(fā) Insert插入觸發(fā)器,觸發(fā)器將插入記錄的數(shù)據(jù)庫(kù)用戶名和插入時(shí)間強(qiáng)制性保存到該記錄的錄入者和錄入時(shí)間字段,以表明該記錄數(shù)據(jù)的責(zé)任者;當(dāng) Score表中有記錄被修改時(shí),觸發(fā) Update修改觸發(fā)器,觸發(fā)器將被修改掉的原記錄數(shù)據(jù)、修改者數(shù)據(jù)庫(kù)用戶名和修改時(shí)間存入 Score_monitor監(jiān)測(cè)跟蹤表;當(dāng) Score表中有記錄被刪除時(shí),觸發(fā) Delete刪除觸發(fā)器,觸發(fā)器將被刪除掉的原記錄數(shù)據(jù)、刪除者數(shù)據(jù)庫(kù)用戶名和刪除時(shí)間存入 Score_monitor監(jiān)測(cè)跟蹤表.經(jīng)過(guò)事后查詢分析Score_monitor監(jiān)測(cè)跟蹤表中的記錄,若發(fā)現(xiàn)有非法修改或刪除 Score表記錄情況,可以根據(jù)Score_monitor表中記錄的數(shù)據(jù),恢復(fù) Score表中記錄,從而達(dá)到保護(hù) Score表記錄數(shù)據(jù).
為了實(shí)現(xiàn)數(shù)據(jù)監(jiān)測(cè),首先要做的是根據(jù)被監(jiān)測(cè)表結(jié)構(gòu),在 Jiance數(shù)據(jù)庫(kù)中建立監(jiān)測(cè)跟蹤表結(jié)構(gòu),如 Score_monitor表.如果有許多表需要監(jiān)測(cè),那么建立相應(yīng)監(jiān)測(cè)跟蹤表的結(jié)構(gòu)也是很繁瑣的.為了簡(jiǎn)化建立監(jiān)測(cè)跟蹤表結(jié)構(gòu)的工作,可以在 Jiance數(shù)據(jù)庫(kù)中先建立一個(gè)無(wú)記錄的名為“輔助表”的空表,該表僅包含改刪者、改刪時(shí)間和改刪類別等三個(gè)字段,這三個(gè)字段的數(shù)據(jù)類型和長(zhǎng)度如表 2所示.然后以 sa用戶登錄 Jiance數(shù)據(jù)庫(kù),執(zhí)行下列語(yǔ)句就可以生成 Score_monitor表結(jié)構(gòu),其他監(jiān)測(cè)跟蹤表結(jié)構(gòu)可以類似生成[2]:
SELECT a.*,b.* into score_monitor FROM jiaowu..score a,輔助表 b WHERE 1=0
觸發(fā)器是 SQL Server數(shù)據(jù)庫(kù)中特殊的存儲(chǔ)過(guò)程,它與數(shù)據(jù)庫(kù)中的表對(duì)象緊密相連,若發(fā)生對(duì)表進(jìn)行插入、修改或刪除記錄事件時(shí),就會(huì)自動(dòng)觸發(fā)執(zhí)行這些特殊的存儲(chǔ)過(guò)程.當(dāng)觸發(fā)事件發(fā)生時(shí),觸發(fā)器會(huì)產(chǎn)生兩個(gè)臨時(shí)邏輯表:inserted和 deleted,它們的結(jié)構(gòu)與原表相同.插入記錄時(shí),觸發(fā)器會(huì)將數(shù)據(jù)插入原表和 inserted表;修改記錄時(shí),觸發(fā)器會(huì)在原表中將被修改掉的記錄刪除并放入 deleted表,將新數(shù)據(jù)插入原表和 inserted表;刪除記錄時(shí),觸發(fā)器會(huì)在原表中刪除被刪的記錄,并將它放入 deleted表[3].觸發(fā)器一般在表建立時(shí)由 dbo用戶創(chuàng)建.
當(dāng)插入記錄時(shí),為了在 Score表中強(qiáng)制性保留記錄的錄入者和錄入時(shí)間,可以用下列語(yǔ)句在 Score表上建立 Insert插入觸發(fā)器:
USE jiaowu
IF EXISTS(select name from sysobjectswhere name=‘tr_i’and type=‘TR’)
DROP TR IGGER tr_i
go
CREATE TR IGGER tr_iON score
FOR I NSERT
AS
update score
set錄入者 =suser_sname(),
錄入時(shí)間 =getdate()
where學(xué)號(hào) =(select學(xué)號(hào) from inserted)and
課程名稱 =(select課程名稱 from inserted)
go
當(dāng)修改記錄時(shí),為了將 Score表中被修改掉的記錄數(shù)據(jù)保存到 Jiance數(shù)據(jù)庫(kù)中的 Score_monitor表中,可以用下列語(yǔ)句在 Score表上建立 Update修改觸發(fā)器:
USE jiaowu
IF EXISTS(select name from sysobjectswhere name=‘tr_u’and type=‘TR’)
DROP TR IGGER tr_u
go
CREATE TR IGGER tr_u ON score
FOR update
AS
insert jiance..score_monitor select* ,suser_sname(),getdate(),‘更改 ’from deleted
where錄入者 is not null
go
當(dāng)刪除記錄時(shí),為了將 Score表中被刪除掉的記錄數(shù)據(jù)保存到 Jiance數(shù)據(jù)庫(kù)中的 Score_monitor表中,可以用下列語(yǔ)句在 Score表上建立 Delete刪除觸發(fā)器:
USE jiaowu
IF EXISTS(select name from sysobjectswhere name=‘tr_d’and type=‘TR’)
DROP TR IGGER tr_d
go
CREATE TR IGGER tr_d ON score
FOR delete
AS
insert jiance..score_monitor select* ,suser_sname(),getdate(),‘刪除 ’from deleted
go
對(duì) Score表修改或刪除記錄的監(jiān)測(cè)跟蹤情況可以使用下列語(yǔ)句查詢 Score_monitor表獲得:
SELECT* FROM score_monitor order by改刪時(shí)間 DESC
該查詢結(jié)果按“改刪時(shí)間”字段中時(shí)間的降序列出,如表 3所示.從表 3可知,有一個(gè)名為“zhang”的用戶登錄 jiaowu教務(wù)數(shù)據(jù)庫(kù),在 Score表中先將王海晨同學(xué)的高等數(shù)學(xué) 56分成績(jī)更改為 85分,然后又將王海晨同學(xué)的高等數(shù)學(xué)成績(jī)這條記錄刪除;“wang”用戶登錄后,則刪除了石瑞平同學(xué)的操作系統(tǒng)成績(jī)記錄;而“l(fā)iang”用戶登錄后,對(duì)吳佳翔同學(xué)的編譯原理成績(jī)進(jìn)行了兩次更改.結(jié)合實(shí)際,了解 zhang、wang和 liang用戶是否擁有合法的修改或刪除權(quán)限,并確定他們是否在所列時(shí)間對(duì) Score表進(jìn)行了修改或刪除,從而確定這些數(shù)據(jù)被修改或刪除的合法性.若是非法修改或刪除,則根據(jù)所列出的跟蹤情況,恢復(fù) Score表原來(lái)正確的數(shù)據(jù).
表3 Score_mon itor表所保存的監(jiān)測(cè)跟蹤情況
利用觸發(fā)器對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)表進(jìn)行實(shí)時(shí)監(jiān)測(cè)與跟蹤,可以及時(shí)發(fā)現(xiàn)數(shù)據(jù)的非法修改或刪除,恢復(fù)被毀壞的數(shù)據(jù),并對(duì)具有不良操作的數(shù)據(jù)庫(kù)用戶進(jìn)行分析查找,消除潛在隱患,確保數(shù)據(jù)的安全.另外,由于觸發(fā)器是與應(yīng)用系統(tǒng)后臺(tái)數(shù)據(jù)庫(kù)表相關(guān)聯(lián)的特殊存儲(chǔ)過(guò)程,觸發(fā)器事件發(fā)生時(shí)都會(huì)自動(dòng)調(diào)用執(zhí)行這些存儲(chǔ)過(guò)程,如果過(guò)多使用觸發(fā)器,會(huì)影響后臺(tái)數(shù)據(jù)庫(kù)系統(tǒng)性能,所以一般僅對(duì)敏感數(shù)據(jù)表進(jìn)行監(jiān)測(cè)與跟蹤.
[1]程志梅,邱霞明,王曉燕.SQL Server2000數(shù)據(jù)庫(kù)中觸發(fā)器的妙用 [J].計(jì)算機(jī)應(yīng)用與軟件,2009(3):188-189.
[2]鄭阿奇,劉啟芬,顧韻華.SQL SERVER教程 [M].北京:清華大學(xué)出版社,2005:104-106.
[3]周緒,管麗娜,白海波.SQL Server 2000中文版入門(mén)與提高[M].北京:清華大學(xué)出版社,2001:330-336.
Monitori ng and Protection of Sensitive Data Table Based on Trigger
J IN Yuequan
(Information School,Zhejiang International StudiesUniversity,Hangzhou 310012,China)
Using Insert,Update and Delete triggers to monitor sensitive data tables of the background database of the information system,the database administrators can promptly detect data which are modified or deleted illegally.In thisway the security of data of the information system can be ensured.
table;database;trigger;data monitoring
TP311
A
1671-6574(2010)04-0092-05
2010-06-05
金躍權(quán) (1965-),男,浙江東陽(yáng)人,浙江外國(guó)語(yǔ)學(xué)院信息學(xué)院副教授,工學(xué)碩士.