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