SQL Server數據庫安全檢查

SQL Server對於組織來說是個敏感信息庫,管理者需要確保只有授權用戶才能訪問到這部分敏感信息。然而,要讓SQL Server配置安全同時還不會產生錯誤,這不是一件容易的事,作爲DBA我們不得不執行一系列額外步驟來強化我們的SQL Server部署安全配置。本文中列出了一份微軟SQL Server數據庫安全最佳實踐檢查表,能夠幫助DBA更好地保護數據庫,避免來自內部和外部的攻擊。
認證

SQL Server支持兩種模式的認證:Windows認證和混合模式認證。根據SQL Server安全性最佳實踐,我們建議爲您的SQL Server部署選擇Windows認證,除非遺留應用系統需要混合模式認證向後兼容訪問。

Windows認證比混合認證模式更安全,啓用這種模式後,Windows認證憑據(也就是Kerberos或者Windows NT LAN管理器【NTLM】認證憑據)是允許登錄到SQL Server的。Windows登錄使用許多加密信息認證SQL Server,密碼不會在認證期間跨網絡傳遞。此外,在Kerberos協議下活動目錄還提供了額外的安全級別。因此,認證就更加可靠,利用基於角色的活動目錄組可以減少控制訪問的管理工作。相比於Windows認證模式,混合模式認證支持Windows賬號和SQL Server專用賬號登陸SQL Server。SQL登陸密碼通過網絡傳遞用於認證,相比起來不如Windows登陸安全。

確保sySAdmin賬號安全

如果不修改就退出,“sySAdmin”(SA)賬號是很脆弱的。潛在的SQL Server攻擊者們都意識到了這一點,如果他們控制了這個強大的用戶,數據庫攻擊就更容易。爲了防止使用“SA”賬號進行攻擊,可以把“SA”賬號重命名爲別的賬號名稱。我們可以按照以下操作實現這一點:在“對象資源管理器”中展開“登錄”,右鍵點擊“SA”賬號並在菜單中選擇“重命名”。或者我們也可以執行以下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專用登錄賬號遵循底層操作系統的登錄策略。除此之外,對所有新設置的SQL登錄賬號啓用“MUST_CHANGE”選項。該選項確保登陸者必須在第一次登錄後修改密碼。
“sySAdmin”固定服務器角色和“CONTROL SERVER”權限資格
要謹慎選擇sySAdmin固定服務器角色的資格,因爲該角色可以在SQL Server上爲所欲爲。此外,不要明確授予“CONTROL SERVER”權限給Windows登錄、Windows組登錄和SQL Server登錄,因爲這種權限的登錄獲得了對整個SQL Server部署的完全管理員權限。默認情況下,sySAdmin固定服務器角色明確擁有這項權限。

SQL Server管理

要避免使用“SA”,或者任何其它已授予“CONTROL SERVER”權限的SQL登錄賬號,或者sySAdmin固定服務器角色下轄成員管理SQL Server實例。相反,要爲DBA們設置專門的Windows登錄賬號,給這些賬號分配“sySAdmin”權限作爲管理用途。要給用戶分配權限,可以使用內建的固定服務器角色或者數據庫角色,也可以創建你自己定製的服務器角色和數據庫角色滿足你更精細化的權限控制。

禁用guest用戶訪問

默認情況下,guest用戶存在於每個用戶和系統數據庫下,它是安全封閉環境下的潛在安全風險,因爲它允許與數據庫無關的用戶登錄訪問數據庫。由於這一潛在風險,我們需要在所有用戶和系統數據庫(除了msdb)中禁用guest用戶。這樣才能保證公共服務器角色成員不能訪問SQL Server實例上的用戶數據庫,除非用戶被明確授權訪問這些數據庫。

限制對公共角色授權

由於潛在的安全風險, 我們可以使用下面的擴展存儲過程取消公共角色的訪問權限。
此外,不要明確分配權限給用戶公共角色和對系統存儲過程的訪問。要列出公共角色可用的存儲過程,可以執行如下查詢:
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系統的外圍界面禁用不需要的功能。你還可以使用基於策略的管理功能創建系統策略爲一個或多個SQL Server系統實施精細配置設置。

強化SQL Server端口

另一項SQL Server安全性最佳實踐是使用SQL Server配置管理器修改SQL Server安裝時的默認端口。而且,要使用專門TCP端口替代動態端口。此外,要確保避開常見的TCP端口(比如1433和1434),不要用這些端口做客戶端請求和交互,因爲這些端口過於爲人熟知,容易成爲攻擊目標。

禁用SQL Server瀏覽器服務

要確保SQL Server瀏覽器服務只運行在多個SQL Server實例運行其上的單個SQL Server上。SQL Server瀏覽器服務顯示了網絡環境中的SQL Server信息,這在安全封閉的環境中可能成爲潛在安全威脅。

SQL Server服務賬號

我們應該創建專用低權限域賬戶來運行SQL Server服務。此外,要定期檢查SQL Server服務賬號成員,確保它們不是任何域用戶組或本地用戶組的成員,因爲那樣會使這些用戶具備不必要的權限。有關每個SQL Server服務賬號所需權限的更多信息,請訪問“配置Windows服務賬號和權限”瞭解。

確保SQL Server錯誤日誌和註冊鍵的安全

使用NTFS權限確保SQL Server錯誤日誌和註冊鍵安全,因爲它們可以展現關於SQL Server實例和安裝的大量信息。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章