SQL Server 2008中的驗證
在數(shù)據(jù)和服務(wù)器都需要保護(hù),而且不想承受如今互聯(lián)網(wǎng)上常見的無情攻擊之際,Microsoft 開發(fā)了 SQL Server 2000?;镜尿炞C問題依然存在:您是誰?您如何證明自己的身份?但是,SQL Server 2008 提供了更健壯的驗證特性,對服務(wù)器的安全便捷有著更好的支持,放行好人并阻止壞人。
SQL Server Authentication 利用包含用戶 id 和口令的簡單連接字符串,為基于非 Windows的客戶端或應(yīng)用程序提供了驗證機(jī)制。這種登錄易于使用,很受應(yīng)用程序開發(fā)人員的歡迎,它的安全性不如 Windows 驗證機(jī)制,因此在驗證機(jī)制中不推薦使用。
SQL Server 2008 改進(jìn)了 SQL Server Authentication 選項。首先,默認(rèn)情形下它利用 SQL 生成的證書支持通道的加密。管理員不必獲取或安裝有效的 SLL 證書,以確保 SQL 憑證流經(jīng)的通道是安全的。由于 SQL Server 2008 自動生成這些證書,因此在傳送登錄數(shù)據(jù)包時,默認(rèn)情形下它將自動加密通道。如果客戶端使用 SQL Server 2005 或更新版本,即可使用該特性。
注意:SQL Server 生成的本地證書可保護(hù)被動的中間人攻擊,其中的攻擊者會嗅探網(wǎng)絡(luò)。要更有效地系統(tǒng)免受被動中間人攻擊,應(yīng)部署并使用客戶端也信任的證書。
SQL Server 2008 進(jìn)一步增強(qiáng)了 SQL Server Authentication,因為在與 Windows 2003 服務(wù)器或更新版本一起使用時,默認(rèn)情形下數(shù)據(jù)庫引擎將利用Windows Group Policy 檢查 SQL 登錄的口令復(fù)雜度、口令過期日以及帳戶鎖定狀態(tài)。這表示可以對 SQL Server 帳戶強(qiáng)行應(yīng)用 Windows 口令策略。
口令策略強(qiáng)制
有了SQL Server 2008,口令策略強(qiáng)制特性被內(nèi)置到服務(wù)器中。作為 Windows Server 2003 NetAPI32庫的一部分,SQL Server 利用 NetValidatePasswordPolicy() API 根據(jù)Windows 的口令強(qiáng)度、過期日和帳戶鎖定狀態(tài)策略,在驗證以及口令設(shè)置、重置期間驗證口令的有效性。表3列出來構(gòu)成該策略的各種設(shè)置。
表3 Windows Server 2003 口令策略組件
類別 |
名稱 |
注釋 |
口令策略 |
強(qiáng)行應(yīng)用口令歷史記錄 |
防止用戶重用舊口令,如交替使用兩個口令。 |
最短的口令長度 |
||
口令必須滿足復(fù)雜度要求 |
參見下文。 | |
利用可逆加密存儲口令 |
允許在 Windows 中檢索口令。絕對不要啟用該選項,除非應(yīng)用程序的要求優(yōu)先于安全口令的要求。(該策略不適用于 SQL Server。) | |
口令過期日 |
口令的最長存在時間 |
|
口令的最短存在時間 |
||
帳戶鎖定策略 |
帳戶鎖定持續(xù)時間 |
帳戶鎖定的持續(xù)時間(以分鐘計)。當(dāng)鎖定閾值>0時,Windows 將啟用該策略。 |
帳戶鎖定閾值 |
不成功登錄嘗試的最大次數(shù)。 | |
時間到后即可重置帳戶鎖定計數(shù)器 |
多久之后 Windows 將重置不成功嘗試的計數(shù)器。當(dāng)鎖定閾值>0時,Windows 將啟用該選項。 |
如未運行 Windows Server 2003 或更新版本,SQL Server 仍利用簡單的檢查方法,強(qiáng)行應(yīng)用口令強(qiáng)度,以阻止以下口令:
◆Null 或空口令
◆與計算機(jī)或登錄名相同
◆Password、admin、administrator、sa、sysadmin 等口令
相同的復(fù)雜度標(biāo)準(zhǔn)被應(yīng)用給在 SQL Server 中創(chuàng)建及使用的所有口令,包括 sa 登錄的口令、應(yīng)用程序角色、用于加密的數(shù)據(jù)庫主密鑰以及對稱加密密鑰。
SQL Server 默認(rèn)情形下總會檢查口令策略,但利用 CREATE LOGIN 或 ALTER LOGIN 語句,可取消對個別登錄的強(qiáng)行應(yīng)用,代碼如下:
CREATE LOGIN bob WITH PASSWORD = 'S%V7Vlv3c9Es8', |
CHECK_EXPIRATION 使用 Windows Server 2003 策略的“口令最大和最小年齡”部分,而CHECK_POLICY 使用其他的策略設(shè)置。
管理設(shè)置還允許啟用或關(guān)閉口令策略檢查、啟用或關(guān)閉口令過期檢查,并在用戶第一次登錄時強(qiáng)行修改口令。CREATE LOGIN 中的 MUST_CHANGE 選項強(qiáng)行讓用戶修改下次登錄時的口令。在客戶端,它允許在登錄時修改口令。所有新型客戶端數(shù)據(jù)訪問技術(shù)都支持該特性,包括 OLE DB 和ADO.NET 以及客戶端工具,如 Management Studio。
如果用戶的不成功登錄次數(shù)過多,超出了口令策略允許的嘗試次數(shù),SQL Server 將根據(jù) Windows 策略中的設(shè)置鎖定該帳戶。管理員可利用 ALTER LOGIN 語句取消鎖定該帳戶:
ALTER LOGIN alice WITH PASSWORD = '3x1Tq#PO^YIAz' UNLOCK |
#p#
端點驗證
SQL Server 2008 支持傳統(tǒng)的二進(jìn)制 Tabular Data Stream(表格數(shù)據(jù)流),客戶端利用該數(shù)據(jù)流通過HTTP 訪問數(shù)據(jù),也可通過 HTTP 訪問本地 XML Web 服務(wù)。允許通過 HTTP 進(jìn)行訪問的主要好處就是,任何理解 Web 服務(wù)協(xié)議的客戶端軟件和開發(fā)工具都可訪問存儲在 SQL Server 中的數(shù)據(jù)。這表示 SQL Server 2008 可以提供獨立的 Web 服務(wù)方法,它也是Service Oriented Architecture(面向服務(wù)的體系結(jié)構(gòu),SOA)中的一個完整端點。
將 SQL Server 2008 用作 Web 服務(wù)主機(jī)需要兩步通用操作,每一步都有很多變化:定義存儲過程和用戶定義的函數(shù),以提供 Web 服務(wù)方法;定義 HTTP 端點,以通過 HTTP 接收方法調(diào)用,并將其轉(zhuǎn)給適當(dāng)?shù)倪^程。本文主要介紹其中涉及到安全問題。有關(guān)配置及使用 HTTP 端點的詳情,請參閱 SQL Server Books Online 中的 CREATE ENDPOINT(Transact-SQL)部分。
由于默認(rèn)情形下 SQL Server 中的 XML Web 服務(wù)使用 HTTP 和80端口,因此大多數(shù)防火墻都允許流量通過。但是,不受保護(hù)的端點其實是潛在的攻擊載體,必須對其施加保護(hù),因此 SQL Server 提供了強(qiáng)大的驗證和授權(quán)機(jī)制。默認(rèn)情形下,SQL Server 沒有任何端點,用戶必須擁有高級權(quán)限,以創(chuàng)建、更改及啟用 HTTP 端點。
SQL Server 2008 提供了五種不同的驗證類型,與 IIS 用于網(wǎng)站驗證的方法類似。
Basic 驗證
基本驗證是 HTTP 1.1 協(xié)議的一部分,它以base-64編碼的明文傳送登錄憑證。憑證必須映射到 Windows 登錄,然后 SQL Server 利用該憑證授權(quán)給對數(shù)據(jù)庫資源的訪問。如果使用 Basic 驗證,就無法將 PORTS 自變量設(shè)為 CLEAR,反之必須將其設(shè)為 SSL,并通過 SSL 利用數(shù)字證書加密與客戶端軟件的通信。
Digest 驗證
Digest 驗證也是 HTTP 1.1 的一部分。在將憑證發(fā)送給服務(wù)器之前,它利用 MD5 對憑證進(jìn)行雜散化,這樣就無法通過電線發(fā)送它們,即使采用加密形式也是如此。憑證必須映射到有效的 Windows 域帳戶,且不能使用本地的用戶帳戶。
NTLM 驗證
NTLM 使用的是挑戰(zhàn)響應(yīng)協(xié)議,該協(xié)議最初是在Microsoft Windows NT® 中最先得到應(yīng)用的,自此之后得到了 Windows 所有版本客戶端和服務(wù)器的支持。當(dāng)客戶端和服務(wù)器都使用 Windows 系統(tǒng)時,它提供了安全驗證機(jī)制,而且需要有效的域帳戶。
Kerberos 驗證
Kerberos 驗證是 Windows 2000 及更新版本才有的特性,它以許多操作系統(tǒng)中都有的行業(yè)標(biāo)準(zhǔn)協(xié)議為基礎(chǔ)。它允許執(zhí)行相互驗證,其中客戶端和服務(wù)器都有理由相信對方的身份,并提供高級別的驗證形式。為利用 Windows Server 2003 中的 Kerberos 特性,必須通過 HTTP.sys 以及作為 Windows Support Toos 一部分的 SetSPN.exe 實用工具,注冊 Kerberos Service Principal Name(Kerberos 服務(wù)主體名,SPN)。
Integrated 驗證
Integrated 驗證提供了最好的 NTLM 和 Kerberos 驗證。服務(wù)器將使用其中的一種驗證類型并輸入客戶端請求,允許執(zhí)行客戶端支持的最安全驗證,同時使舊版 Windows 也能使用該服務(wù)??稍?Windows 2003 中配置 Http.sys,使之與客戶端協(xié)商要采用的協(xié)議。
用于端點的驗證方法是通過 CREATE 或 ALTER ENDPOINT 語句的 AUTHENTICATION 屬性設(shè)置的。例如,下列代碼將創(chuàng)建利用 Kerberos 執(zhí)行驗證的端點:
CREATE ENDPOINT myEndpoint |
SQL Server 2008 支持偵聽 HTTP 和用戶定義的 TCP 端口的端點。也可對請求進(jìn)行各種格式化:SOAP、Transact-SQL、Service Broker 專用格式以及數(shù)據(jù)庫鏡像專用格式。使用 SOA 時,可利用 WS-Security 標(biāo)題驗證 SQL Server 登錄。
Microsoft 已實現(xiàn)了 Web Service 端點驗證,以支持各種協(xié)議和規(guī)范,本文只介紹其中幾種。需要顯式地啟用驗證選項,并確??蛻舳四軌蛱峁┍匾膽{證類型。
【編輯推薦】