■ 甘肅 左振輝 陸世煒
編者按:SQL Server數(shù)據(jù)庫(kù)被廣泛使用,近年來(lái)不斷爆出因SQL Server數(shù)據(jù)庫(kù)而造成的數(shù)據(jù)泄露,因此SQL Server的安全配置值得每一個(gè)管理員高度重視。本文針對(duì)SQL Server數(shù)據(jù)庫(kù)的一系列安全配置進(jìn)行了介紹。
Microsoft公司的SQL Server是一種廣泛使用的數(shù)據(jù)庫(kù),很多網(wǎng)站和企業(yè)內(nèi)部信息化平臺(tái)都是基于SQL Server的,但是有些管理員還沒(méi)有把數(shù)據(jù)庫(kù)的安全性和系統(tǒng)的安全性等同起來(lái),多數(shù)管理員認(rèn)為只要把網(wǎng)絡(luò)和操作系統(tǒng)的安全做好了,那么所有的應(yīng)用程序也就安全了。
大多數(shù)系統(tǒng)管理員對(duì)數(shù)據(jù)庫(kù)不熟悉,而數(shù)據(jù)庫(kù)管理員又對(duì)安全問(wèn)題關(guān)心太少,這就使數(shù)據(jù)庫(kù)的安全問(wèn)題更加嚴(yán)俊了。而且數(shù)據(jù)庫(kù)系統(tǒng)中存在的安全漏洞和不當(dāng)?shù)呐渲猛ǔ?huì)造成嚴(yán)重的后果,并且都難以發(fā)現(xiàn)。
數(shù)據(jù)庫(kù)應(yīng)用程序通常同操作系統(tǒng)的最高管理員密切相關(guān)。廣泛的SQL Server數(shù)據(jù)庫(kù)又是屬于“端口”型的數(shù)據(jù)庫(kù),這就表示任何人都能夠用分析工具試圖連接到數(shù)據(jù)庫(kù)上,從而繞過(guò)操作系統(tǒng)的安全機(jī)制,進(jìn)而闖入系統(tǒng)破壞和竊取數(shù)據(jù)資料,甚至破壞整個(gè)系統(tǒng)。
下面就關(guān)于SQL Server數(shù)據(jù)庫(kù)的安全配置以及一些相關(guān)的安全和使用上的問(wèn)題進(jìn)介紹。
在進(jìn)行SQL Server數(shù)據(jù)庫(kù)安全配置之前,需要先完成三個(gè)基本的安全配置。
1.對(duì)操作系統(tǒng)進(jìn)行安全配置,保證操作系統(tǒng)處于安全狀態(tài)。
2.對(duì)要使用的數(shù)據(jù)庫(kù)軟件(程序)進(jìn)行必要的安全審核,如ASP、PHP等腳本。這是很多基于數(shù)據(jù)庫(kù)的Web應(yīng)用常出現(xiàn)的安全隱患。對(duì)于腳本主要是一個(gè)過(guò)濾問(wèn)題,需要過(guò)濾一些類似于“,”、“‘”、“;”、“@”、“/”等的字符,防止破壞者構(gòu)造惡意的語(yǔ)句進(jìn)行注入。
3.安裝SQL Server后要打上最新的補(bǔ)丁。
做完上述三個(gè)基本的配置之后,下來(lái)討論SQL Server的安全配置。
密碼是安全的第一步。很多數(shù)據(jù)庫(kù)賬號(hào)的密碼過(guò)于簡(jiǎn)單,容易被入侵者獲取,并以此入侵?jǐn)?shù)據(jù)庫(kù)。對(duì)于sa更應(yīng)注意,同時(shí)不要讓sa賬號(hào)的密碼寫于應(yīng)用程序或者腳本中。管理員應(yīng)養(yǎng)成定期修改密碼的好習(xí)慣,應(yīng)該定期檢查是否有不符合密碼要求的帳號(hào)。
例如,使用以下SQL語(yǔ)句:
Use master
Select name,password from syslogins where password is null
由于SQL Server不能更改sa用戶名稱,也不能刪除這個(gè)超級(jí)用戶,所以必須對(duì)這個(gè)賬號(hào)進(jìn)行最強(qiáng)的保護(hù)。當(dāng)然包括使用一個(gè)安全性極高的密碼,最好不要在數(shù)據(jù)庫(kù)應(yīng)用中使用sa賬號(hào)。
審核數(shù)據(jù)庫(kù)登錄事件的“失敗和成功”,在實(shí)例屬性中選擇“安全性”,將其中的審核級(jí)別選定為全部,這樣在數(shù)據(jù)庫(kù)系統(tǒng)和操作系統(tǒng)安全性日志里面就詳細(xì)記錄了所有賬號(hào)的登錄事件。
應(yīng)定期查看SQL Server日志,檢查是否有可疑的登錄事件發(fā)生,或者使用如下的DOS命令:
Findstr /c:”登錄”d:microsoft SQL serverMSSQLLOG*.*
對(duì)存儲(chǔ)過(guò)程進(jìn)行大手術(shù),并且對(duì)賬號(hào)調(diào)用擴(kuò)展存儲(chǔ)過(guò)程的權(quán)限要慎重。其實(shí)在多數(shù)應(yīng)用中根本用不到多少系統(tǒng)的存儲(chǔ)過(guò)程,而SQL Server這么多系統(tǒng)存儲(chǔ)過(guò)程只是用來(lái)適應(yīng)廣大用戶需求的。所以可以刪除不必要的存儲(chǔ)過(guò)程。因?yàn)橛行┫到y(tǒng)的存儲(chǔ)過(guò)程很容易被人利用,來(lái)提升權(quán)限或者進(jìn)行破壞。
xp_cmdshell是進(jìn)入操作系統(tǒng)的最佳捷徑,是數(shù)據(jù)庫(kù)留給操作系統(tǒng)的一個(gè)大后門,是危險(xiǎn)性最高的存儲(chǔ)過(guò)程,其可以執(zhí)行操作系統(tǒng)的任何指令。如果不需要擴(kuò)展存儲(chǔ)過(guò)程xp_cmdshell,最好使用下面的SQL語(yǔ)句將其去掉。
use master
sp_dropextendedproc‘xp_cmdshell’
如果需要這個(gè)過(guò)程,可以使用下面的SQL語(yǔ)句將其恢復(fù)過(guò)來(lái)。
sp_addextendedproc‘xp_cmdshell’,’xpsql70.dll’
同理可以去掉其他不需要的存儲(chǔ)過(guò)程。
例如OLE自動(dòng)存儲(chǔ)過(guò)程會(huì)造成管理器中的某些特征不能使用,這些過(guò)程包括:
sp_OACreate;
sp_OADestroy
sp_OAGetErrorInfo;
sp_OAGetProperty;
sp_OASetProperty;
sp_OAMethod;
以及sp_OAStop。
又如注冊(cè)表訪問(wèn)存儲(chǔ)過(guò)程甚至能夠讀出操作系統(tǒng)管理員的密碼來(lái),這些過(guò)程包括:
Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue
Xp_regenumvalues Xp_regread Xp_regremovemultistring
Xp_regwrite。
SQL Server代理服務(wù)允許對(duì)以后執(zhí)行的和在重建基礎(chǔ)上的工作的創(chuàng)建。遺憾的是,默認(rèn)情況下,甚至最低級(jí)的用戶也允許有這個(gè)能力。
惡意的用戶會(huì)創(chuàng)建一個(gè)過(guò)程來(lái)不斷地提交無(wú)限量的工作。并在他選擇的任何時(shí)間執(zhí)行它們。這可能意味著重大的拒絕服務(wù)風(fēng)險(xiǎn),也意味著明顯的過(guò)渡權(quán)限的情況。建議對(duì)public角色刪除execute權(quán)限,這樣低權(quán)限的用戶不能發(fā)布工作。如下的過(guò)程位于MSDB數(shù)據(jù)庫(kù)中,應(yīng)在安裝后立即對(duì)他們采取措施以確保安全。
sp_add_job
sp_add_jobstep
sp_add_jobserver
sp_start_job
SQL Server 2000使用的Tabular Data Stream協(xié)議來(lái)進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)交換,如果不加密的話,所有的網(wǎng)絡(luò)傳輸都是明文的,包括密碼、數(shù)據(jù)庫(kù)內(nèi)容等等。這是一個(gè)很大的安全威脅,能被人在網(wǎng)絡(luò)中截獲到他們需要的東西,包括數(shù)據(jù)庫(kù)帳號(hào)和密碼。
所以,在條件容許情況下,最好使用SSL來(lái)加密協(xié)議,當(dāng)然,你需要一個(gè)證書來(lái)支持。
SQL Server默認(rèn)情況下使用1433端口監(jiān)聽(tīng),很多人都說(shuō)SQL Server配置的時(shí)候要把這個(gè)端口改變,這樣別人就不能很容易地知道使用的什么端口了。
可惜,通過(guò)微軟未公開的1434端口的UDP探測(cè)可以很容易知道SQL Server使用的什么TCP/IP端口了。不過(guò)微軟還是考慮到了這個(gè)問(wèn)題,畢竟公開而且開放的端口會(huì)引起不必要的麻煩。
在實(shí)例屬性中選擇TCP/IP協(xié)議的屬性。選擇隱藏SQL Server實(shí)例。如果隱藏了SQL Server實(shí)例,則將禁止對(duì)試圖枚舉網(wǎng)絡(luò)上現(xiàn)有的SQL Server實(shí)例的客戶端所發(fā)出的廣播作出響應(yīng)。這樣,別人就不能用1434來(lái)探測(cè)你的TCP/IP端口了(除非用Port Scan)。
此外,還可以使用IPSec過(guò)濾拒絕掉1434端口的UDP通訊,盡可能地隱藏SQL Server。
請(qǐng)?jiān)谏弦徊脚渲玫幕A(chǔ)上,更改原默認(rèn)的1433端口。在實(shí)例屬性中選擇網(wǎng)絡(luò)配置中的TCP/IP協(xié)議的屬性,將TCP/IP使用的默認(rèn)端口變?yōu)槠渌丝凇?/p>
SQL Server 2000數(shù)據(jù)庫(kù)系統(tǒng)本身沒(méi)有提供網(wǎng)絡(luò)連接的安全解決辦法,但是Windows 2000提供了這樣的安全機(jī)制,使用操作系統(tǒng)自己的IPSec可以實(shí)現(xiàn)IP數(shù)據(jù)包的安全性。請(qǐng)對(duì)IP連接進(jìn)行限制,只保證自己的IP能夠訪問(wèn),也拒絕其他IP進(jìn)行的端口連接,把來(lái)自網(wǎng)絡(luò)上的安全威脅進(jìn)行有效的控制。