最佳做法檢查表(SQL Server官方推薦安全配置方案)
- 發布于:2023-10-21
- 共 212 人圍觀
管理員檢查表
在安裝之前設置環境
物理安全 確保服務器的物理安全
防火墻 在服務器和 Internet 之間放置防火墻。
總是在外圍防火墻上阻止 TCP 端口 1433 和 UDP 端口 1434。如果命名實例在其他端口上偵聽,則還要阻止這些端口。
在多層環境中,使用多個防火墻創建屏蔽子網
服務隔離 隔離服務,降低受到威脅的服務被利用來危害其他服務的風險。
絕對不要在域控制器上安裝 SQL Server。
以單獨的 Windows 帳戶身份運行單獨的 SQL Server 服務。
在多層環境中,在單獨的計算機上運行 Web 邏輯和業務邏輯
服務帳戶 創建 Windows 帳戶,盡可能只讓其具有運行 SQL Server 服務所需的最小特權。
文件系統 使用 NTFS。
對關鍵的數據文件使用 RAID
安裝
最新版本和 Service Pack 總是安裝最新的 Service Pack 和安全修補程序。
服務帳戶 使用盡可能具有最低特權的帳戶運行 SQL Server 服務。
用企業管理器將服務與 Windows 帳戶相關聯。
身份驗證模式 要求使用 Windows 身份驗證與 SQL Server 連接。
強密碼 即使在使用 Windows 身份驗證時,也總是為 sa 帳戶指派強密碼。
對所有 SQL Server 帳戶都總是使用強密碼。
安裝之后的配置選項和設置
刪除或保護舊安裝文件 在安裝之后刪除或存檔下列文件:sqlstp.log、sqlsp.log 和 setup.iss。對于默認安裝,這些文件位于 <系統驅動器>:Program FilesMicrosoft SQL ServerMSSQLInstall 文件夾中;對于命名實例,這些文件位于 <系統驅動器>:Program FilesMicrosoft SQL Server MSSQL$<實例名稱>Install 文件夾中。
如果當前系統是從 SQL Server 7.0 升級的,請刪除下列文件:%Windir% 文件夾中的 setup.iss;Windows Temp 文件夾中的 sqlsp.log。
為命名實例選擇靜態端口 為 SQL Server 的命名實例分配靜態端口。
設置登錄審核級別 將登錄審核級別設置為“失敗”或“全部”。
啟用安全審核 對 Sysadmin 操作、固定角色成員身份更改、所有與登錄相關的活動以及密碼更改啟用安全審核。
在選擇適當的審核選項之后,應該編寫審核腳本,將它包裝在存儲過程中,并將該存儲過程標記為 AutoStart。
即使在 Windows 身份驗證模式下也要保護 sa 帳戶的安全 即使在配置為要求進行 Windows 身份驗證的服務器上,也要為 sa 帳戶指派強密碼。
刪除示例數據庫 從生產服務器中刪除示例數據庫。
安全操作
安全模型 學會使用 SQL Server 安全模型。
備份策略 定期備份所有數據并將副本存放在安全的非現場位置。
測試災難恢復系統。
減少功能、減小受攻擊范圍 通過只運行環境所必需的服務和功能,減小系統受到攻擊的范圍。
減少管理員 限制少數幾個受信任用戶擁有 sysadmin 固定服務器角色的成員身份。
強密碼 確保對于所有的 SQL Server 帳戶使用復雜密碼。
跨數據庫所有權鏈接 如果系統不使用跨數據庫所有權鏈接,請禁用它。
Xp_cmdshell 在默認情況下,只有 sysadmin 角色的成員能夠執行 xp_cmdshell。不應更改此默認設置。
不要將執行 xp_cmdshell 的權限授予 sysadmin 角色成員以外的用戶。
加密 安裝證書以啟用 SSL 連接。
證書應該使用服務器的完全限定的 DNS 名稱。
在 SQL Server 服務帳戶下使用 EFS 加密數據庫文件。
如果應用程序要求加密數據,請考慮使用諸如 Protegrity 和 Application Security Inc. 之類的供應商的產品。
角色和組 將用戶匯集到 SQL Server 角色或 Windows 組中以簡化權限管理。
權限 絕對不要向 public 數據庫角色授予權限。
分布式查詢 在支持分布式查詢的環境中設置 SQL Server 時,使用鏈接服務器(而不要使用遠程服務器)。
僅將鏈接服務器的訪問權限授予那些需要它的登錄。
對于除 sysadmin 固定服務器角色的成員以外的所有用戶,禁止對除 SQL OLE DB 以外的所有提供程序進行特殊 (ad hoc) 數據訪問。
只允許對受信任的提供程序進行特殊數據訪問。
來賓帳戶 不要啟用來賓帳戶。
服務帳戶 如果需要更改與 SQL Server 服務相關聯的帳戶,請使用 SQL Server 企業管理器。
如果更改多個服務,則必須使用企業管理器將所做的更改分別應用于每個服務。
建議的定期管理過程
Microsoft 基準安全分析器 (MBSA) 將 MBSA 添加到每周維護計劃中,并按照計劃中的任何安全建議操作。
掃描登錄 定期掃描帳戶,查看是否有使用空密碼的帳戶,并刪除使用空密碼的帳戶或為它們指派強密碼。
刪除不再使用的帳戶。
枚舉固定角色成員成份 定期掃描固定服務器和數據庫角色,確保只將成員身份授予受信任用戶。
啟動過程 驗證已被標記為 AutoStart 的存儲過程是否安全。
登錄到用戶的映射 確保數據庫用戶與服務器級登錄之間的映射正確無誤。
定期運行帶有 report 選項的 sp_change_users_login,確保映射按預期方式工作。
直接更新目錄 不允許直接更新目錄。
跨數據庫所有權鏈接 使用 sp_dboption 枚舉和驗證啟用了跨數據庫所有權鏈接的數據庫。
修補實例的最佳做法
實例檢測和枚舉 保留您所負責的 SQL Server 的所有版本和語言清單。
在清單中包括 MSDE 實例。
使用 SQL Scan 和 SQL Check(可從 Microsoft 網站獲?。?,掃描域中的 SQL Server 實例。
公告 訂閱 Microsoft 安全公告。
修補應用程序 維護與生產系統的配置相匹配并且可用于測試新修補程序的測試系統。
在將修補程序應用于生產系統之前,認真測試修補程序。
考慮修補不需要太多測試的開發系統。
開發人員檢查表
除上面的所有項目外,開發人員應將下列內容視為最佳做法。
常規
有效地使用所有權鏈接 在單個數據庫中使用所有權鏈接來簡化權限管理。
盡可能避免使用跨數據庫所有權鏈接。
如果必須使用跨數據庫所有權鏈接,請確保這兩個數據庫總是部署為單個管理單元。
使用角色來簡化權限管理和所有權 向角色指派權限,而不要直接向用戶指派權限。
如果希望在刪除擁有對象的用戶時不必更改應用程序,則可以讓角色擁有對象,而不是讓用戶直接擁有對象。
打開加密功能(SSL 或 IPSEC) 對服務器啟用加密連接,并考慮只允許建立加密連接。
如果允許使用 SQL Server 身份驗證,則強烈建議您使用 IPSec 加密網絡層或者使用 SSL 加密會話。
不將 SQL Server 錯誤傳播回到用戶 您的應用程序不應該將 SQL Server 錯誤返回給最終用戶,而是將它們記錄到日志中或者將它們傳輸給系統管理員。
防止受到 SQL 插入攻擊 通過先驗證所有的用戶輸入,然后將其傳輸到服務器,防止受到 SQL 插入攻擊。
只允許具有最小特權的帳戶將用戶輸入的內容發送到服務器,從而限制可能受損的范圍。
使用必需的最小特權運行 SQL Server 本身。
多層選項
同一個域/受信任域(完整的 Windows 身份驗證) 如果應用程序服務器和數據庫服務器位于同一個域中或者位于受信任域中,則應使用 Windows 身份驗證,并配置"完全提供"功能(所有客戶端上下文都與 SQL Server 建立通道連接)。這樣,可以審核訪問 SQL Server 的所有用戶,允許執行 Windows 安全策略,并且無需將憑據存儲在中間層。在該方案中,客戶端連接到應用程序服務器,應用程序服務器從而模擬客戶端并連接到 SQL Server。
應用程序服務器上的每個用戶都必須在數據庫服務器上有一個有效的 Windows 登錄,且必須啟用委派功能。
該方案中進行交互的所有系統(包括域控制器)都必須運行 Windows 2000 或更高版本。
用來運行應用程序的帳戶必須能夠委派其他帳戶(即,必須針對此帳戶打開 Active Directory 用戶帳戶選項"帳戶可委派其他帳戶")。
客戶端帳戶必須能夠被委派(確保取消選中 Active Directory 用戶帳戶選項"敏感帳戶,不能被委派")。
應用程序服務必須有一個有效的服務主體名稱 (SPN)。
注意 如果安全計劃要求最小化用戶對數據庫服務器的訪問權限或者企業策略禁止委派,建議不要在跨數據庫或 Internet 級別的安裝中使用"完全提供"功能。
混合方案(部分 Windows 身份驗證) 如果在面向 Internet 的層中,并非每個用戶都有一個單獨的 Windows 域帳戶,則建議將身份驗證分成幾個階段。在驗證用戶身份的外層,如果不加密整個會話,至少應該使用 SSL 加密憑據。應該使用 Windows 身份驗證連接到數據庫服務器,并在特權很小、只具有執行數據庫服務器功能所必需的權限的單獨安全上下文中轉發事務信息。這樣,可以將中間層有效地作為服務器和 Internet 之間的附加防御層。
注意 建議不要在中間層和 SQL Server 之間使用 SQL Server 身份驗證,因為使用 SQL Server 身份驗證需要存儲憑據。如果必須在中間層和 SQL Server 之間使用 SQL Server 身份驗證,那么應該創建幾個帳戶,并讓它們分別具有與不同種類的用戶對應的不同級別的特權。這要求您向中間層中添加邏輯,以便按照所需的特權級別分配連接。
不同的非信任域或沒有域(不進行 Windows 身份驗證) 如果不能在各層之間使用 Windows 身份驗證,則應要求對登錄序列進行 SSL 加密。最好加密整個會話。
還應使用 DPAPI 加密必須存儲的憑據。
應將加密憑據存儲在用 ACL 保護的注冊表項中。
軟件供應商檢查表
除上面的所有項目外,下列安全開發做法也已被證明對于提高各種開發環境中代碼的質量及安全性非常有用。
安全過程
了解各種安全問題 確保開發小組的成員了解主要的安全問題:當前存在的威脅、安全趨勢、更改安全環境以及受到攻擊的情形。
要求對所有開發人員和測試人員進行相關的安全培訓。
增強對跨站點腳本、緩沖區溢出、SQL 插入和危險的 API 等問題的認識。
確定對產品構成威脅的各種具體類型,例如拒絕服務、特權升級、欺騙、篡改數據、信息泄漏和丟棄。
針對每個組件逐一分析產品受到的安全威脅。
基于產品構建安全威脅檢查表。
在產品開發周期的每個階段(從設計到測試)增加安全審核步驟。
安裝 MSDE 如果將 MSDE 與應用程序一起分發,則應遵守下列附加準則:
使用"Windows 安全模式"作為默認設置安裝 MSDE。
絕對不要使用空的 sa 密碼。
在向客戶分發 MSDE 時,應使用 Microsoft 提供的安裝程序,而不要使用合并模塊。
在安裝將只作為本地數據存儲運行的 MSDE 實例時,應該禁用服務器網絡庫。
如果產品中包括 MSDE,則應讓您的客戶知道這一點。他們將來可能需要安裝或接受 MSDE 特定的軟件更新程序。
MSDE 在默認情況下安裝 SQL Server 代理,但是將服務啟動類型保持為"手動"。如果應用程序不使用 SQL Server 代理,則應將此設置更改為"禁用"。在產品文檔中包括安全性最佳做法信息。
附錄:查找詳細信息
建議參閱的書目:
Inside Microsoft® SQL Server™ 2000(Microsoft® SQL Server™2000 內幕),作者:Kalen Delaney。版權所有 2000,Microsoft Press。ISBN:0-7356-0998-5。
Writing Secure Code, Second Edition(編寫安全代碼,第二版),作者:Michael Howard 和 David LeBlanc。
http://go.microsoft.com/fwlink/?LinkId=16316
本書回顧了在對組件/應用程序進行設計、編碼和測試時最常遇見的安全缺陷,它是非常有用的培訓資源。本書包含安全性最佳做法和檢查表。本書還提供了在設計安全應用程序、編寫可抵御反復攻擊的可*代碼以及測試應用程序是否存在安全缺陷時使用的策略。
Hacking Exposed Windows 2000(Windows 2000 面臨的攻擊威脅),作者:Joel Scambray 和 Stuart McClure。
本書收集了黑客的攻擊途徑。其中詳細講述了如何闖入 Windows 2000 計算機,從而增強如何防止類似攻擊的意識。本書中還有一整節專門介紹了 SQL Server 以及如何使用它來攻擊整個系統。
Designing Secure Web-Based Applications for Microsoft® Windows® 2000(設計面向 Microsoft® Windows® 2000 的基于 Web 的安全應用程序),作者:Michael Howard。
http://go.microsoft.com/fwlink/?LinkId=15415
本書是幫助您理解 Microsoft Windows 2000、Internet Explorer、Internet 信息服務、SQL Server 和 COM+ 安全概念的堅實基礎。它介紹在設計不同種類和級別安全性的軟件時需要考慮的關鍵事項,并展示被隔離的安全性"孤島"如何進行交互。本書還介紹了核心安全問題(如風險分析、威脅、身份驗證、授權和隱私),并說明了如何通過對環境和應用程序應用適當的安全性來降低風險。經理、開發人員和測試人員均可以利用本書中的知識,從安全角度查看組件、進行威脅分析以及采取適當的響應措施(增強代碼/設計的安全性并相應地改進測試套件)。
Building Secure ASP.NET Applications(構建安全的 ASP.NET 應用程序),作者:J.D.Meier 等。
http://go.microsoft.com/fwlink/?LinkId=15416
本指南介紹了一些針對特定情形的實用方法,使用這些方法可以構建面向 Windows 2000 和 .NET Framework 1.0 的安全的 ASP.NET 應用程序。本指南重點介紹了在分布式 .NET Web 應用程序各層內及層與層之間進行身份驗證、授權和安全通信的關鍵要素。
Firewalls and Internet Security, second edition(防火墻和 Internet 安全,第二版),作者:William R. Cheswick、Steven M. Bellovin 和 Aviel D. Rubin。Addison-Wesley,2003。
這是對 Internet 安全的權威介紹。強烈建議您參考本書。
建議使用的工具、白皮書和演示文稿
http://go.microsoft.com/fwlink/?LinkId=15417
此站點匯集了指向 SQL Server 安全白皮書、企業最佳做法、安全公告等的大量鏈接。
http://go.microsoft.com/fwlink/?LinkId=15419
The Microsoft Baseline Security Analyzer Tool(Microsoft 基準安全分析器工具)。此工具可幫助分析系統的安全性。建議管理員定期運行此工具。此工具執行 SQL Server 特定的一些檢查操作。
http://go.microsoft.com/fwlink/?LinkId=15422
SQL Server Critical Update Wizard(SQL Server 關鍵更新程序向導。
Microsoft SQL Server 和安全站點
http://go.microsoft.com/fwlink/?LinkId=15423
Microsoft 網站中專門介紹安全性的區域。
http://go.microsoft.com/fwlink/?LinkId=15424
主要的 SQL Server 站點,通過其中的鏈接可下載最新的 Service Pack、最新的公告和其他資源。
http://go.microsoft.com/fwlink/?LinkId=15425
TechNet 資源站點
http://go.microsoft.com/fwlink/?LinkId=15426
MSDN 資源站點
白皮書
http://go.microsoft.com/fwlink/?LinkId=15428
SQL Server 開發人員中心。包含最近的技術白皮書和下載程序。
http://go.microsoft.com/fwlink/?LinkId=16263
上述白皮書是在最初發行 SQL Server 2000 時編寫的,它是本白皮書中各部分內容的基礎。
http://go.microsoft.com/fwlink/?LinkId=15429
SQL Server 安全相關內容的許多鏈接。
標簽: