SQL Server對于組織來說是個敏感信息庫,管理者需要確保只有授權(quán)用戶才能訪問到這部分敏感信息。然而,要讓SQL Server配置安全同時還不會產(chǎn)生錯誤,這不是一件容易的事,作為DBA我們不得不執(zhí)行一系列額外步驟來強化我們的SQL Server部署安全配置。本文中列出了一份微軟SQL Server數(shù)據(jù)庫安全最佳實踐檢查表,能夠幫助DBA更好地保護數(shù)據(jù)庫,避免來自內(nèi)部和外部的攻擊。
認證
SQL Server支持兩種模式的認證:Windows認證和混合模式認證。根據(jù)SQL Server安全性最佳實踐,我們建議為您的SQL Server部署選擇Windows認證,除非遺留應用系統(tǒng)需要混合模式認證向后兼容訪問。
Windows認證比混合認證模式更安全,啟用這種模式后,Windows認證憑據(jù)(也就是Kerberos或者Windows NT LAN管理器【NTLM】認證憑據(jù))是允許登錄到SQL Server的。Windows登錄使用許多加密信息認證SQL Server,密碼不會在認證期間跨網(wǎng)絡傳遞。此外,在Kerberos協(xié)議下活動目錄還提供了額外的安全級別。因此,認證就更加可靠,利用基于角色的活動目錄組可以減少控制訪問的管理工作。相比于Windows認證模式,混合模式認證支持Windows賬號和SQL Server專用賬號登陸SQL Server。SQL登陸密碼通過網(wǎng)絡傳遞用于認證,相比起來不如Windows登陸安全。
確保sySAdmin賬號安全
如果不修改就退出,“sySAdmin”(SA)賬號是很脆弱的。潛在的SQL Server攻擊者們都意識到了這一點,如果他們控制了這個強大的用戶,數(shù)據(jù)庫攻擊就更容易。為了防止使用“SA”賬號進行攻擊,可以把“SA”賬號重命名為別的賬號名稱。我們可以按照以下操作實現(xiàn)這一點:在“對象資源管理器”中展開“登錄”,右鍵點擊“SA”賬號并在菜單中選擇“重命名”?;蛘呶覀円部梢詧?zhí)行以下T-SQL腳本重命名“SA”賬號:
USE [master]
GO
ALTER LOGIN SA WITH NAME = []
GO
此外,也可以禁用SQL Server實例的“SA”賬號。
為SA和SQL Server專用登錄賬號設置復雜密碼
在使用混合認證模式時,要確保為“SA”賬號和其它SQL Server上使用的SQL Server專用登錄賬號設置復雜密碼。首先,為“SA”賬號和所有其它SQL登錄賬號選中“強制密碼過期”和“加強密碼策略”選項。這兩項可以保證所有其它SQL Server專用登錄賬號遵循底層操作系統(tǒng)的登錄策略。除此之外,對所有新設置的SQL登錄賬號啟用“MUST_CHANGE”選項。該選項確保登陸者必須在第一次登錄后修改密碼。
“sySAdmin”固定服務器角色和“CONTROL SERVER”權(quán)限資格
要謹慎選擇sySAdmin固定服務器角色的資格,因為該角色可以在SQL Server上為所欲為。此外,不要明確授予“CONTROL SERVER”權(quán)限給Windows登錄、Windows組登錄和SQL Server登錄,因為這種權(quán)限的登錄獲得了對整個SQL Server部署的完全管理員權(quán)限。默認情況下,sySAdmin固定服務器角色明確擁有這項權(quán)限。
SQL Server管理
要避免使用“SA”,或者任何其它已授予“CONTROL SERVER”權(quán)限的SQL登錄賬號,或者sySAdmin固定服務器角色下轄成員管理SQL Server實例。相反,要為DBA們設置專門的Windows登錄賬號,給這些賬號分配“sySAdmin”權(quán)限作為管理用途。要給用戶分配權(quán)限,可以使用內(nèi)建的固定服務器角色或者數(shù)據(jù)庫角色,也可以創(chuàng)建你自己定制的服務器角色和數(shù)據(jù)庫角色滿足你更精細化的權(quán)限控制。
禁用guest用戶訪問
默認情況下,guest用戶存在于每個用戶和系統(tǒng)數(shù)據(jù)庫下,它是安全封閉環(huán)境下的潛在安全風險,因為它允許與數(shù)據(jù)庫無關的用戶登錄訪問數(shù)據(jù)庫。由于這一潛在風險,我們需要在所有用戶和系統(tǒng)數(shù)據(jù)庫(除了msdb)中禁用guest用戶。這樣才能保證公共服務器角色成員不能訪問SQL Server實例上的用戶數(shù)據(jù)庫,除非用戶被明確授權(quán)訪問這些數(shù)據(jù)庫。
限制對公共角色授權(quán)
由于潛在的安全風險, 我們可以使用下面的擴展存儲過程取消公共角色的訪問權(quán)限。
此外,不要明確分配權(quán)限給用戶公共角色和對系統(tǒng)存儲過程的訪問。要列出公共角色可用的存儲過程,可以執(zhí)行如下查詢:
SELECT o.[name] AS [SPName]
,u.[name] AS [Role]
FROM [master]..[sysobjects] o
INNER JOIN [master]..[sysprotects] p
ON o.[id] = p.[id]
INNER JOIN [master]..[sysusers] u
ON P.Uid = U.UID
AND p.[uid] = 0
AND o.[xtype] IN ('X','P')
減少SQL Server Surface Area
配置SQL Server時應該僅安裝必要的功能特性,安裝后使用SQL Server系統(tǒng)的外圍界面禁用不需要的功能。你還可以使用基于策略的管理功能創(chuàng)建系統(tǒng)策略為一個或多個SQL Server系統(tǒng)實施精細配置設置。
強化SQL Server端口
另一項SQL Server安全性最佳實踐是使用SQL Server配置管理器修改SQL Server安裝時的默認端口。而且,要使用專門TCP端口替代動態(tài)端口。此外,要確保避開常見的TCP端口(比如1433和1434),不要用這些端口做客戶端請求和交互,因為這些端口過于為人熟知,容易成為攻擊目標。
禁用SQL Server瀏覽器服務
要確保SQL Server瀏覽器服務只運行在多個SQL Server實例運行其上的單個SQL Server上。SQL Server瀏覽器服務顯示了網(wǎng)絡環(huán)境中的SQL Server信息,這在安全封閉的環(huán)境中可能成為潛在安全威脅。
SQL Server服務賬號
我們應該創(chuàng)建專用低權(quán)限域賬戶來運行SQL Server服務。此外,要定期檢查SQL Server服務賬號成員,確保它們不是任何域用戶組或本地用戶組的成員,因為那樣會使這些用戶具備不必要的權(quán)限。
確保SQL Server錯誤日志和注冊鍵的安全
使用NTFS權(quán)限確保SQL Server錯誤日志和注冊鍵安全,因為它們可以展現(xiàn)關于SQL Server實例和安裝的大量信息。
更多信息請查看IT技術(shù)專欄