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