岳清
摘要:安全在數(shù)據(jù)庫(kù)信息系統(tǒng)中占有重要意義,當(dāng)前高校計(jì)算機(jī)專業(yè)學(xué)生在開發(fā)基于數(shù)據(jù)庫(kù)的應(yīng)用系統(tǒng)時(shí),更多關(guān)注于系統(tǒng)功能實(shí)現(xiàn),而安全意識(shí)和能力不足。針對(duì)這個(gè)現(xiàn)象,分析了數(shù)據(jù)庫(kù)課程中涉及的安全知識(shí),探索教學(xué)中貫穿安全教育的方法,為提升學(xué)生的安全意識(shí)與能力奠定了基礎(chǔ)。
關(guān)鍵詞:數(shù)據(jù)庫(kù);安全;教學(xué);加密;審計(jì);SQL注入
1概述
數(shù)據(jù)庫(kù)課程是計(jì)算機(jī)及相關(guān)專業(yè)的一門重要課程。通過這門課程,學(xué)生掌握數(shù)據(jù)庫(kù)的基本理論、SQL編程、數(shù)據(jù)庫(kù)設(shè)計(jì)與管理等重要內(nèi)容,為從事數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的設(shè)計(jì)、開發(fā)、維護(hù)等相關(guān)工作打下基礎(chǔ)。很多學(xué)生在開發(fā)基于數(shù)據(jù)庫(kù)的應(yīng)用系統(tǒng)中,更多關(guān)注的是如何實(shí)現(xiàn)系統(tǒng)功能,少有信息安全和數(shù)據(jù)庫(kù)安全意識(shí)和能力。從目前社會(huì)看,安全問題是一個(gè)熱點(diǎn),如果一個(gè)軟件產(chǎn)品安全性出現(xiàn)漏洞,用戶數(shù)據(jù)泄露,就會(huì)引發(fā)大眾對(duì)隱私信息的擔(dān)憂。如何提高系統(tǒng)的安全性是系統(tǒng)開發(fā)和建設(shè)者關(guān)注的重點(diǎn)。本文闡述在基于SQL Server的數(shù)據(jù)庫(kù)課程教學(xué)中提高數(shù)據(jù)庫(kù)安全性和系統(tǒng)安全性的教學(xué)方法,以達(dá)到提升學(xué)生的安全意識(shí)與能力目的。
2數(shù)據(jù)庫(kù)教學(xué)中安全內(nèi)容和方法
數(shù)據(jù)庫(kù)課程內(nèi)容通常涵蓋了數(shù)據(jù)庫(kù)基本概念、數(shù)據(jù)模型、數(shù)據(jù)庫(kù)操作、數(shù)據(jù)庫(kù)設(shè)計(jì)、數(shù)據(jù)庫(kù)編程和管理這幾個(gè)部分,安全貫穿在其中。以下將主要闡述數(shù)據(jù)庫(kù)設(shè)計(jì)、編程和管理中的涉及的安全教學(xué)內(nèi)容和教學(xué)方法。
2.1角色功能最小化
在數(shù)據(jù)庫(kù)課程中安全管理這一章節(jié)會(huì)講授到用戶和角色,這一環(huán)節(jié)不僅局限于用戶和角色概念、關(guān)系,為用戶指派角色等操作,還要介紹當(dāng)用戶被授予超出了其工作職能所需的數(shù)據(jù)庫(kù)訪問權(quán)限時(shí),這些權(quán)限可能會(huì)被惡意濫用。解決方法是使用充分細(xì)化的查詢級(jí)別訪問控制機(jī)制,這種機(jī)制這是將數(shù)據(jù)庫(kù)權(quán)限限制到最低要求的SQL操作和數(shù)據(jù)。數(shù)據(jù)訪問控制不只細(xì)化到表,而是必須細(xì)化到表中特定的行和列。當(dāng)角色細(xì)化,用戶的功能最小化,濫用過高權(quán)限這個(gè)問題就解決了。在教學(xué)過程中,可以設(shè)計(jì)一個(gè)簡(jiǎn)單的學(xué)生成績(jī)單的數(shù)據(jù)庫(kù),細(xì)化學(xué)生、輔導(dǎo)員、任課教師、教務(wù)管理員不同角色對(duì)應(yīng)的功能,可以細(xì)化到表、視圖、表中特定的行和列,以及在這些細(xì)化的對(duì)象上進(jìn)行的各種操作。
2.2以密文方式存儲(chǔ)關(guān)鍵數(shù)據(jù)
具有登錄功能系統(tǒng)的數(shù)據(jù)庫(kù)中存放了用戶名和密碼信息。“密碼”這樣重要的信息在數(shù)據(jù)庫(kù)中不應(yīng)該明文存儲(chǔ),是應(yīng)該以密文的方式存儲(chǔ)。即使信息被竊取了,也會(huì)降低損失。在這一環(huán)節(jié)的授課中,先介紹SQL Server的加密層次,然后從最外層依次向內(nèi)搭建加密體系,最后完成對(duì)關(guān)鍵詞段的加密。
目前在數(shù)據(jù)庫(kù)加密中應(yīng)用較多的是多級(jí)密鑰管理體系。SQL Server的加密層次如圖l所示,也是多級(jí)密鑰管理體系。在層次體系中由外到內(nèi)依次是:服務(wù)主密鑰SMK(Service Mastcr Key),數(shù)據(jù)庫(kù)主密鑰DMK(Database Master Key),證書、非對(duì)稱密鑰和密鑰,對(duì)稱密鑰,加密數(shù)據(jù)。每一個(gè)數(shù)據(jù)庫(kù)實(shí)例都擁有一個(gè)服務(wù)主密鑰SMK,是安裝SQL Server時(shí)自動(dòng)生成的,這個(gè)密鑰是整個(gè)實(shí)例的根密鑰,為其子節(jié)點(diǎn)提供加密服務(wù),SMK是SQL Server加密層次結(jié)構(gòu)的根,直接或間接地保護(hù)樹中的所有其他密鑰和機(jī)密內(nèi)容。在服務(wù)主密鑰之下的是數(shù)據(jù)庫(kù)主密鑰DMK,一個(gè)數(shù)據(jù)庫(kù)只能有一個(gè)數(shù)據(jù)庫(kù)主密鑰,這是一個(gè)數(shù)據(jù)庫(kù)級(jí)別的密鑰。當(dāng)數(shù)據(jù)庫(kù)主密鑰創(chuàng)建成功后,我們就可以使用這個(gè)密鑰創(chuàng)建對(duì)稱密鑰,非對(duì)稱密鑰和證書了。證書和非對(duì)稱密鑰都屬于非對(duì)稱加密的使用方式,證書通常包含更多信息,例如過期日期和頒發(fā)者,通常,可以使用證書來加密數(shù)據(jù)庫(kù)中其他類型的加密密鑰,或者為代碼模塊簽名。由于證書和非對(duì)稱密鑰使用非對(duì)稱加密算法,算法復(fù)雜,加密解密的速度慢,因此當(dāng)加密的信息量大的時(shí)候不適合。對(duì)稱密鑰相對(duì)算法簡(jiǎn)單,加密解密的速度快,由層級(jí)圖可以看出,最終對(duì)數(shù)據(jù)進(jìn)行加密的就是對(duì)稱密鑰,為了進(jìn)一步提高安全性,可以由非對(duì)稱密鑰或證書加密的對(duì)稱密鑰。最內(nèi)層就是對(duì)稱密鑰加密數(shù)據(jù)庫(kù)表中特定字段。在這個(gè)教學(xué)環(huán)節(jié)中,可讓帶領(lǐng)學(xué)生創(chuàng)建服務(wù)主密鑰SMK、數(shù)據(jù)庫(kù)主密碼、非對(duì)稱密鑰或證書,然后再創(chuàng)建由非對(duì)稱密鑰或證書加密的對(duì)稱密鑰,最后用對(duì)稱密鑰加密數(shù)據(jù)庫(kù)表中的數(shù)據(jù),比較加密前后的數(shù)據(jù),看到明文和密文的不同。這個(gè)過程不僅幫助學(xué)生理解加密層次還可以直觀看到“密碼”這樣重要信息是密文存儲(chǔ)的。
2.3強(qiáng)身份驗(yàn)證
即使數(shù)據(jù)庫(kù)表中“密碼”這樣的關(guān)鍵數(shù)據(jù)可以通過加密方式以密文存儲(chǔ),但是無論是何種方式訪問數(shù)據(jù)庫(kù),如果密碼設(shè)置的太簡(jiǎn)單,都是不安全的。強(qiáng)身份驗(yàn)證也是數(shù)據(jù)庫(kù)的一道保護(hù)屏障。目前“雙因素”認(rèn)證機(jī)制被公認(rèn)為最安全的身份認(rèn)證方式,這種認(rèn)證方式是指結(jié)合密碼以及實(shí)物(信用卡、SMS手機(jī)、令牌或指紋等生物標(biāo)志)兩種條件對(duì)用戶進(jìn)行認(rèn)證的方法。但是,由于成本和易用性問題,雙因素身份驗(yàn)證通常不現(xiàn)實(shí)。在這些情況下,應(yīng)該實(shí)施強(qiáng)用戶名/密碼策略,如:限定密碼字符多樣性,限定密碼最小長(zhǎng)度等等。在教學(xué)中可以讓學(xué)生在課后去調(diào)研網(wǎng)上的系統(tǒng)用戶注冊(cè)通常對(duì)密碼有什么要求,什么樣的系統(tǒng)采用“雙因素”認(rèn)證機(jī)制。這樣的調(diào)研活動(dòng)對(duì)將來從系統(tǒng)設(shè)計(jì)與開發(fā)有幫助。
2.4SQL注入
在基于B/S模式系統(tǒng)中,用戶從前端登錄訪問后臺(tái)的數(shù)據(jù)庫(kù),應(yīng)用了強(qiáng)身份驗(yàn)證和關(guān)鍵信息加密,安全性得到提高。但是依然存在導(dǎo)致數(shù)據(jù)庫(kù)信息泄露甚至是系統(tǒng)崩潰的威脅一SQL注入。SQL注入是利用網(wǎng)頁自身的安全漏洞進(jìn)行攻的一種常用方法,惡意用戶輸入數(shù)據(jù)來構(gòu)造SQL查詢語句,如果程序編寫時(shí),沒有對(duì)用戶輸入數(shù)據(jù)的合法性進(jìn)行判斷,用戶就可以利用某些提交數(shù)據(jù)頁面或修改數(shù)據(jù)頁面里的漏洞,精心構(gòu)造SQL語句,讓系統(tǒng)執(zhí)行此類特殊的SQL指令,從而獲取一些敏感信息,甚至獲取主機(jī)控制權(quán)限。SQL注入成功后,造成的危害也很嚴(yán)重:不僅數(shù)據(jù)庫(kù)中的信息會(huì)被盜取,Web服務(wù)器數(shù)據(jù)庫(kù)對(duì)象也可能受損,使得網(wǎng)站癱瘓,甚至可以上傳木馬,被攻擊的計(jì)算機(jī)就處于被控制狀態(tài)了,SQL注入的影響是非常大的。
在這一教學(xué)環(huán)節(jié)中,教師可以先演示一個(gè)SQL注入,如:在登錄頁面的用戶名和密碼輸入框中,輸入:“'mike'or 1=1-”和“abc”,一個(gè)沒有防SQL注入的系統(tǒng),會(huì)構(gòu)造出“select*from users where userID='mike'or 1=1-and psd='abc'”,在這個(gè)語句中,條件永遠(yuǎn)為真,達(dá)到了欺騙系統(tǒng),成功登錄。
SQL注入的原因就是將SQL命令通過“嵌入”的方式放人合法的HTYP提交請(qǐng)求中,解決方式主要有:
1)使用正則表達(dá)式過濾傳人的參數(shù)
正則表達(dá)式是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”用來表達(dá)對(duì)字符串的一種過濾邏輯。目標(biāo)是過濾輸入中能夠引起SQL注入的字符或單詞。
2)使用預(yù)編譯語句
如果使用預(yù)編譯語句,傳人的任何內(nèi)容就不會(huì)和原來的語句發(fā)生任何匹配的關(guān)系,就用不著對(duì)傳人的數(shù)據(jù)做任何過慮”。這是很常用的防SQL注入的方法。
教學(xué)中,可以用上述兩種方法對(duì)有缺陷的,能夠SQL注入的系統(tǒng)進(jìn)行改進(jìn),再有同樣的方法登錄,無法“欺騙”系統(tǒng)了。
2.5存儲(chǔ)過程
存儲(chǔ)過程是數(shù)據(jù)庫(kù)中重要的對(duì)象,在講授其特點(diǎn)的時(shí)候,不僅提到執(zhí)行速度快,第一次執(zhí)行后的存儲(chǔ)過程會(huì)駐留在高速緩存中,以后直接調(diào)用;提高代碼的重用性,減少網(wǎng)絡(luò)流量,用戶可以通過發(fā)送一條執(zhí)行存儲(chǔ)過程的語句實(shí)現(xiàn)一系列復(fù)雜的操作,而不需要寫上大量的SQL代碼,而且存儲(chǔ)過程在被創(chuàng)建后,可以在程序中被多次調(diào)用。還要強(qiáng)調(diào)存儲(chǔ)過程提供了安全機(jī)制,SQL Server可以不授予用戶直接訪問表、視圖的權(quán)限,而是授權(quán)用戶執(zhí)行該存儲(chǔ)過程,這樣可以防止把數(shù)據(jù)庫(kù)中表的細(xì)節(jié)暴露給用戶,保證表中數(shù)據(jù)的安全性。
2.6數(shù)據(jù)庫(kù)的審計(jì)
數(shù)據(jù)庫(kù)課程中數(shù)據(jù)庫(kù)管理部分涉及審計(jì)。審計(jì),即檢查、驗(yàn)證目標(biāo)的準(zhǔn)確性和完整性,用以防止虛假數(shù)據(jù)和欺騙行為。數(shù)據(jù)庫(kù)審計(jì)是數(shù)據(jù)庫(kù)安全的一部分。審計(jì)主要有兩個(gè)目的,一個(gè)是檢測(cè)和威懾非法進(jìn)入系統(tǒng)的行為;另一個(gè)是識(shí)別出用戶對(duì)系統(tǒng)的誤用。通過審計(jì)功能,凡是與數(shù)據(jù)庫(kù)安全性相關(guān)的操作均可被記錄下來。只要檢測(cè)審計(jì)記錄,系統(tǒng)安全員便可掌握數(shù)據(jù)庫(kù)被使用狀況。在SQL SERVER中,系統(tǒng)包含三種級(jí)別的審計(jì):服務(wù)器級(jí)別、數(shù)據(jù)庫(kù)級(jí)別和審計(jì)級(jí)別。服務(wù)器級(jí)別的審計(jì)記錄服務(wù)器操作,例如管理更改以及登錄和注銷操作。數(shù)據(jù)庫(kù)級(jí)別的審計(jì)管理數(shù)據(jù)操作語言和數(shù)據(jù)定義語言的操作。審核級(jí)別的審計(jì)管理包括審核過程中的操作。這一教學(xué)環(huán)節(jié)中可以帶領(lǐng)學(xué)生建立上述三種級(jí)別的審計(jì),啟動(dòng)審計(jì)后,在數(shù)據(jù)庫(kù)中新建用戶和角色,新建用戶表,添加、修改刪除數(shù)據(jù),然后查看審核日志,可以看到這些操作留下的痕跡。
2.7備份數(shù)據(jù)暴露
為了提交安全陸,數(shù)據(jù)庫(kù)需要定期的備份。在實(shí)際教學(xué)過程中,通常要講授備份的種類和備份還原操作,而忽視備份數(shù)據(jù)的暴露帶來的危險(xiǎn),如果得到了一份完全數(shù)據(jù)庫(kù)備份,只需簡(jiǎn)單的還原,那么所有的數(shù)據(jù)就清晰地呈現(xiàn)出來。因此在教學(xué)中要強(qiáng)調(diào)備份數(shù)據(jù)一定要加密。
3結(jié)論
本文介紹了數(shù)據(jù)庫(kù)課程中的幾個(gè)教學(xué)環(huán)節(jié)。在實(shí)際的教學(xué)中,教師通過理論講解、實(shí)例演示、課后練習(xí)和實(shí)驗(yàn)多個(gè)環(huán)節(jié)將安全融人到課程中,提升學(xué)生安全意識(shí)和能力,也為學(xué)生今后從事相關(guān)數(shù)據(jù)庫(kù)開發(fā)工作奠定了基礎(chǔ)。