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