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