如何:使用 Windows 集成安全性訪問 SQL Server
ASP.NET 如何:使用 Windows 集成安全性訪問 SQL Server
如果您的應(yīng)用程序運(yùn)行在基于 Windows 的 Intranet 上,則也許可以將 Windows 集成身份驗(yàn)證用于數(shù)據(jù)庫訪問。集成安全性使用在操作系統(tǒng)線程上建立的當(dāng)前 Windows 標(biāo)識來訪問 SQL Server 數(shù)據(jù)庫。然后,您可以將 Windows 標(biāo)識映射到 SQL Server 數(shù)據(jù)庫和權(quán)限。
若要使用 Windows 集成身份驗(yàn)證連接到 SQL Server,必須標(biāo)識是以什么 Windows 標(biāo)識來運(yùn)行 ASP.NET 應(yīng)用程序的。還必須確保已授予該標(biāo)識訪問 SQL Server 數(shù)據(jù)庫的權(quán)限。本主題包括顯示 ASP.NET 應(yīng)用程序的當(dāng)前 Windows 標(biāo)識的代碼示例。
連接到 SQL Server
如果 SQL Server 與 Web 服務(wù)器在不同的計(jì)算機(jī)上,則 Windows 標(biāo)識必須能夠通過網(wǎng)絡(luò)傳遞給 SQL Server 的遠(yuǎn)程實(shí)例。(已使用 Kerberos 身份驗(yàn)證正確進(jìn)行配置的 Windows 網(wǎng)絡(luò)能夠?qū)崿F(xiàn)此目的。)但是,在 ASP.NET 應(yīng)用程序的操作系統(tǒng)線程上建立的 Windows 標(biāo)識也許無法正確地傳遞給遠(yuǎn)程 SQL Server,這取決于 identity 配置元素中的設(shè)置。
您可以為網(wǎng)站的輔助進(jìn)程標(biāo)識提供特定的用戶名和密碼(如如何:使用映射的 Windows 域用戶訪問 SQL Server 中所示),也可以模擬 Internet 信息服務(wù) (IIS) 提供的已驗(yàn)證的標(biāo)識。若要模擬 IIS 提供的 Windows 標(biāo)識,請將 identity 配置元素的 impersonate 屬性設(shè)置為 true,如下面的示例所示:
復(fù)制代碼
在 IIS 中,只有基本身份驗(yàn)證使用通過網(wǎng)絡(luò)傳遞給遠(yuǎn)程 SQL Server 的安全標(biāo)記來使用戶登錄。默認(rèn)情況下,與 identity 配置元素設(shè)置一起使用的其他 IIS 安全模式將不會生成可以通過遠(yuǎn)程 SQL Server 的身份驗(yàn)證的標(biāo)記。
如果網(wǎng)站配置為僅支持 IIS 中的匿名訪問,則從 IIS 傳遞的安全標(biāo)記將是 IIS 中配置的匿名訪問的 Windows 用戶帳戶的安全標(biāo)記。匿名用戶帳戶可用于通過遠(yuǎn)程 SQL Server 的身份驗(yàn)證。但是,默認(rèn)的匿名用戶帳戶是本地計(jì)算機(jī)帳戶,因而將不會作為遠(yuǎn)程 SQL Server 上的帳戶存在。您可以更改 IIS 匿名帳戶以使用域帳戶,也可以鏡像遠(yuǎn)程 SQL Server 上的本地計(jì)算機(jī)帳戶(方法為在遠(yuǎn)程 SQL Server 上創(chuàng)建一個具有相同用戶名和密碼的本地帳戶)。此外,還必須將 IIS6 的 LogonMethod 元數(shù)據(jù)庫屬性設(shè)置為允許通過網(wǎng)絡(luò)傳遞憑據(jù)的選項(xiàng)。例如,元數(shù)據(jù)庫設(shè)置 MD_LOGON_NETWORK_CLEARTEXT 允許通過網(wǎng)絡(luò)傳遞登錄憑據(jù)。
如果您不確定您的應(yīng)用程序的 Windows 標(biāo)識,并且不確定標(biāo)識是否使用可以通過網(wǎng)絡(luò)傳遞的標(biāo)記登錄,可以運(yùn)行下面的 ASP.NET 頁(作為應(yīng)用程序的一部分)來顯示 Windows 標(biāo)識的名稱以及一個指示是否可以通過網(wǎng)絡(luò)傳遞標(biāo)識的值。請注意,下面的示例不考慮是否已經(jīng)成功地為您的域設(shè)置了 Kerberos 委托。
Visual Basic 復(fù)制代碼
ASP.NET?Example
C# 復(fù)制代碼
ASP.NET?Example
下面的過程演示如何在 Intranet 方案中使用 Windows 集成身份驗(yàn)證訪問 SQL Server 數(shù)據(jù)庫,而在該方案中,已分別授予每個用戶訪問 SQL Server 的權(quán)限。
開始時,您需要在 IIS 中將應(yīng)用程序配置為禁用匿名訪問并啟用 Windows 身份驗(yàn)證。
為 Windows 集成身份驗(yàn)證配置 IIS
在 Windows 中,打開“Internet 信息服務(wù)”管理工具。
在 Microsoft Windows?2000 Server 或 Windows Server?2003 操作系統(tǒng)中:在 Windows“開始”菜單中,依次指向“程序”、“管理工具”和“Internet 服務(wù)管理器”。
在 Microsoft Windows?XP Professional 操作系統(tǒng)中:打開控制面板中的“管理工具”。
打開您的服務(wù)器的節(jié)點(diǎn),然后繼續(xù)打開節(jié)點(diǎn),直到找到您的應(yīng)用程序的節(jié)點(diǎn)(通常在“默認(rèn)網(wǎng)站”之下)。
右擊您的應(yīng)用程序,再單擊“屬性”。
在“目錄安全性”選項(xiàng)卡上,單擊“編輯”。
在“身份驗(yàn)證方法”對話框中,清除“匿名訪問”復(fù)選框,然后執(zhí)行下列操作之一:
如果 SQL Server 與 IIS 位于同一臺計(jì)算機(jī)上,選中“集成 Windows 身份驗(yàn)證”復(fù)選框。
如果 SQL Server 是遠(yuǎn)程服務(wù)器,選中“基本身份驗(yàn)證”復(fù)選框,并清除“集成 Windows 身份驗(yàn)證”復(fù)選框。
關(guān)閉所有對話框。
在應(yīng)用程序配置文件 (Web.config) 中,指定應(yīng)用程序?qū)⒛M IIS 提供的用戶憑據(jù)。
將 Web.config 配置為模擬 IIS 提供的標(biāo)識
打開應(yīng)用程序的 Web.config 文件并向 system.web 元素添加以下內(nèi)容:
復(fù)制代碼 ? ?
? ?
Web.config 中的元素區(qū)分大小寫。
在創(chuàng)建連接字符串以訪問 SQL Server 時,必須包含通知 SQL Server 您正在使用集成安全性的屬性。
為 Windows 集成安全性配置連接字符串
在 SQL Server 的任何連接字符串中,包含屬性 Trusted_Connection=Yes 并移除用戶名和密碼屬性。
下面顯示的是一個為 Windows 集成安全性配置的典型連接字符串:
復(fù)制代碼 ? ?
"workstation?id=WebServer1;packet?size=4096; Trusted_Connection=Yes;data?source=SQLServer01"; persist?security?info=False;initial?catalog=northwind"
? ?
將 SQL Server 設(shè)置為可以識別將訪問它的用戶。
為 Windows 集成安全性配置 SQL Server
從 Windows 的“開始”菜單中,選擇“Microsoft SQL Server”,然后選擇“企業(yè)管理器”。
打開服務(wù)器的節(jié)點(diǎn),并展開希望將其權(quán)限授予用戶的數(shù)據(jù)庫的節(jié)點(diǎn)。
右擊“用戶”節(jié)點(diǎn),選擇“新建數(shù)據(jù)庫用戶”。
在“數(shù)據(jù)庫用戶屬性”對話框中,在“登錄名”框中輸入域/用戶名,然后單擊“確定”。另外,將 SQL Server 配置為允許所有域用戶訪問數(shù)據(jù)庫。
注意 |
---|