袁 勇
[摘要]SQL Server是微軟公司推出的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),很多電子商務(wù)網(wǎng)站、企業(yè)內(nèi)部信息化平臺(tái)等都是建立在SQL Server數(shù)據(jù)庫(kù)基礎(chǔ)之上。為防止不合法的使用所造成的數(shù)據(jù)泄露、更改或破壞,微軟公司建立一套靈活強(qiáng)大的安全管理機(jī)制。但再完美的系統(tǒng)都可能存在漏洞,或是使用者安全意識(shí)不強(qiáng)而帶來系統(tǒng)運(yùn)行過程的不安全性。安全使用SQL Server數(shù)據(jù)庫(kù),必須采取補(bǔ)丁策略、防范SQL注入攻擊策略和網(wǎng)絡(luò)連接策略。
[關(guān)鍵詞]計(jì)算機(jī)安全數(shù)據(jù)庫(kù)SQL SERVER
中圖分類號(hào):TP3文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1671-7597(2009)1110091-01
在計(jì)算機(jī)安全領(lǐng)域中,人們往往更多地關(guān)注系統(tǒng)基礎(chǔ)架,比如討論防火墻、網(wǎng)絡(luò)、操作系統(tǒng)、Web服務(wù)器、電子郵件服務(wù)器和域名服務(wù)器的安全性策略,而很少關(guān)注數(shù)據(jù)庫(kù)。但實(shí)際上,數(shù)據(jù)庫(kù)作為計(jì)算機(jī)系統(tǒng)的核心部分,是企業(yè)、公司、機(jī)關(guān)的重要信息中心。數(shù)據(jù)庫(kù)才是攻擊者的主要目標(biāo)。如何加強(qiáng)SQL SERVER數(shù)據(jù)庫(kù)安全是一個(gè)很值得探討的問題。
一、關(guān)于SQL SERVER數(shù)據(jù)庫(kù)的安全性
SQL Server是微軟公司推出的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),很多電子商務(wù)網(wǎng)站、企業(yè)內(nèi)部信息化平臺(tái)等都是建立在SQL Server數(shù)據(jù)庫(kù)基礎(chǔ)之上。為了防止不合法的使用所造成的數(shù)據(jù)泄露、更改或破壞,微軟公司建立了一套靈活強(qiáng)大的安全管理機(jī)制。
SQL Server數(shù)據(jù)庫(kù)安全性管理是建立在認(rèn)證(authentication)和訪問許可(permission)兩者機(jī)制上。認(rèn)證是指來確定登陸SQL Server數(shù)據(jù)庫(kù)的用戶的登陸帳號(hào)和密碼是否正確,以此來驗(yàn)證其是否具有連接SQL Ser
ver數(shù)據(jù)庫(kù)的權(quán)限[1]。但是,通過認(rèn)證階段并不代表能夠訪問SQL Server
數(shù)據(jù)庫(kù)中的數(shù)據(jù),用戶只有在獲取訪問數(shù)據(jù)庫(kù)的權(quán)限之后,才能夠?qū)Ψ?wù)器上的數(shù)據(jù)庫(kù)進(jìn)行權(quán)限許可下的各種操作,如針對(duì)數(shù)據(jù)庫(kù)對(duì)象(表、視圖、存儲(chǔ)過程等)進(jìn)行操作,通過用戶帳號(hào)設(shè)置來實(shí)現(xiàn)這種用戶訪問數(shù)據(jù)庫(kù)權(quán)限。在SQL Server數(shù)據(jù)庫(kù)的安全模型中主要包括SQL Server登錄、數(shù)據(jù)庫(kù)用戶、權(quán)限、角色。SQL Server的安全控制策略是一個(gè)層次結(jié)構(gòu)系統(tǒng)的集合。
二、SQL SERVER數(shù)據(jù)庫(kù)危險(xiǎn)來源
雖然微軟在SQL SERVER數(shù)據(jù)庫(kù)系統(tǒng)中建立了較為嚴(yán)密的安全管理機(jī)制,但再完美的系統(tǒng)都可能存在漏洞,或是使用者安全意識(shí)不強(qiáng)而帶來系統(tǒng)運(yùn)行過程的不安全性。歸納起來,SQL SERVER數(shù)據(jù)庫(kù)的不安全性主要來自兩方面:一方面,由于一些管理員和用戶安全意識(shí)薄弱,使數(shù)據(jù)庫(kù)的安全問題。另一方面,系統(tǒng)中存在的安全漏洞和不當(dāng)?shù)呐渲靡步o非法用戶提供了可乘之機(jī),使他們未經(jīng)授權(quán)即闖入系統(tǒng),破壞和竊取數(shù)據(jù),造成嚴(yán)重后果。
系統(tǒng)安全漏洞,也叫系統(tǒng)脆弱性(Vulnerability),是計(jì)算機(jī)系統(tǒng)在硬件、軟件、協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)過程中或系統(tǒng)安全策略上存在的缺陷和不足。廣義的系統(tǒng)安全漏洞是一切導(dǎo)致威脅、損壞計(jì)算機(jī)系統(tǒng)安全的因素。SQL Server數(shù)據(jù)庫(kù)的系統(tǒng)漏洞產(chǎn)生的主要原因都是由于程序員不正確和不安全編程引起的。很多程序員在編程開始時(shí)沒有充分考慮到安全問題,在投入使用時(shí),由于用戶不正確的輸入及不恰當(dāng)?shù)呐渲枚伎梢詫?dǎo)致漏洞的出現(xiàn)。
三、SQL SERVER數(shù)據(jù)庫(kù)安全策略
基于SQL Server數(shù)據(jù)庫(kù)系統(tǒng)運(yùn)行環(huán)境及其漏洞形成原因,我們要針對(duì)問題采取以下策略。
(一)補(bǔ)丁策略
SQL Server2000中存在多個(gè)安全漏洞,安裝完畢后,應(yīng)及時(shí)安裝或更新最新的補(bǔ)丁。因?yàn)楣粽呖赡芾眠@些漏洞,繞過數(shù)據(jù)庫(kù)策略,系統(tǒng)漏洞會(huì)泄露敏感信息或執(zhí)行惡意代碼從而威脅數(shù)據(jù)庫(kù)服務(wù)器安全。為了提高服務(wù)器安全性,最有效的一個(gè)方法就是時(shí)常給系統(tǒng)打補(bǔ)丁,將系統(tǒng)升級(jí)到Service Pack4(SP4)。同時(shí),應(yīng)該安裝所有已發(fā)布的安全更新,并運(yùn)行Microsoft Baseline Security Analyzer(MBSA),因?yàn)镸BSA會(huì)通過密碼、訪問權(quán)限、訪問控制列表以及注冊(cè)等方式查找問題,并找出遺失的安全補(bǔ)丁或服務(wù)包。另外,用戶還要注冊(cè)微軟的免費(fèi)安全通知服務(wù),該服務(wù)會(huì)以電子郵件的形式通知我們有什么侵入安全系統(tǒng)以及如何解決它們。盡管安全補(bǔ)丁或服務(wù)包有助于SQL Server數(shù)據(jù)庫(kù)免受許多威脅,但是它們并非“終結(jié)者”,對(duì)快速運(yùn)行的安全問題,如蠕蟲攻擊者就有點(diǎn)力不從心了。我們還要做下面幾項(xiàng)工作。
(二)防范SQL注入攻擊策略
SQL注入(SQL injection)是指用戶可以傳遞任意的、特別的(惡意的)代碼,這些代碼通常被添加到有效的SQL代碼中[2],從而對(duì)系統(tǒng)進(jìn)行攻擊。預(yù)防SQL注入攻擊的第一步是使用驗(yàn)證器驗(yàn)證用戶的輸入。例如,可以限制輸入的長(zhǎng)度和類型等,這樣就限制了黑客鍵入字符的字?jǐn)?shù),從而限制了黑客向服務(wù)器發(fā)送大量的非法的命令。第二步是對(duì)用戶輸入的數(shù)據(jù)先進(jìn)行過濾,把單引號(hào)和雙引號(hào)全部過濾掉,再進(jìn)行SQL語(yǔ)句的構(gòu)造,從而大大降低了攻擊者成功的概率。另外,還可以利用參數(shù)化存儲(chǔ)過程來訪問數(shù)據(jù)庫(kù),確保不會(huì)將輸入字符串看作是可執(zhí)行語(yǔ)句。當(dāng)指定了參數(shù)的類型和長(zhǎng)度后,如果用戶輸入一個(gè)無效的值到當(dāng)前的數(shù)據(jù)類型中,則查詢將失敗。如果不能使用存儲(chǔ)過程,在構(gòu)建SQL命令時(shí)要利用SQL參數(shù),這樣,攻擊者就不能使用特殊字符拼接字符串。指定了參數(shù)的長(zhǎng)度,就能防止大量的數(shù)據(jù)傳遞到數(shù)據(jù)庫(kù)服務(wù)器中。
(三)網(wǎng)絡(luò)連接策略
將SQL Server連接到Internet需要考慮更多的安全問題,保證只有經(jīng)過身份驗(yàn)證的用戶才可以訪問數(shù)據(jù)庫(kù)服務(wù)器,并且只能訪問他們業(yè)務(wù)流程所需的資源,同時(shí)防止黑客們對(duì)網(wǎng)上信息進(jìn)行竊聽、篡改。為此我們要做以下工作。
首先,允許通過Microsoft代理服務(wù)器連接到SQL Server。Microsoft
代理服務(wù)器是一個(gè)提供對(duì)Internet進(jìn)行安全訪問的獨(dú)立應(yīng)用程序,它可以防止未經(jīng)身份驗(yàn)證的用戶連接到專用網(wǎng),并通過控制偵聽端口的權(quán)限和訪問來確保敏感數(shù)據(jù)的安全性。
其次,可以在配置時(shí)將該端口改變或者隱藏服務(wù)。因?yàn)?默認(rèn)情況下,SQL Server使用1433端口監(jiān)聽。2002年5月發(fā)現(xiàn)的第一個(gè)面向SQL server的病毒SQL Snake(又叫Spida)就是通過此端口進(jìn)入的[3]。另外,由于1434端口探測(cè)沒有限制,惡意用戶能夠由它探測(cè)到一些數(shù)據(jù)庫(kù)信息,而且還可能遭到DOS攻擊。
最后,要對(duì)SQL Server所傳遞的文件加密。因?yàn)镾QL Server使用Tabu
lar DataStream協(xié)議來進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)交換,如果不加密的話,所有的網(wǎng)絡(luò)傳輸都是明文,很容易被非法入侵者截獲到傳輸內(nèi)容,包括數(shù)據(jù)庫(kù)賬號(hào)和密碼,有很大的安全隱患。
參考文獻(xiàn):
[1]李勁、謝兆陽(yáng),SQL Server 2000數(shù)據(jù)庫(kù)設(shè)計(jì)與系統(tǒng)管理,清華大學(xué)出版社,2004.