2009-09-11 155 views
1

在我以前的問題中,我問了如何在我的應用程序中使用Windows身份驗證。這是現在的工作,用戶可以用那裏帳戶登錄,但我有一個數據庫訪問方案,我找不到任何東西。ASP.NET Windows身份驗證模擬問題

基本上我會有幾臺服務器,這是問題所在。

在某些服務器上,它們將擁有SQL Server數據庫服務器的Windows身份驗證帳戶,因此應使用模擬其憑據的方式。但我注意到它在web.config中的全局設置(而不是每個連接),並且我希望使用應用程序(IIS或ASP)Windows身份驗證帳戶而不是用戶。 (訪問我的配置數據庫)

我怎麼能做到這一點?

Web應用程序是在Server 2003/2008 IIS 6/7/7.5上託管的ASP.NET MVC,客戶端爲Windows XP及更高版本。使用SQL Server Express/Standard 2005/2008混合。

回答

5

模擬是在站點範圍內進行的,或者您可以手動打開它。你不能做的是手動關閉它,恐怕也不能通過連接字符串來完成。

所以基本上關閉模擬關閉,則需要像這樣的模擬,當包裹的數據庫調用:

using System.Security.Principal; 

WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity; 
WindowsImpersonationContext ctx = null; 
try 
{ 
    ctx = winId.Impersonate(); 
    // Do your thing 
} 
catch 
{ 
} 
finally 
{ 
    if (ctx != null) 
     ctx.Undo(); 
} 

MSDN P&P guide to asp.net impersonation有更多。

+0

感謝這項技術的工作,並且可以接受:) – Phil 2009-09-11 14:17:47

0

使用域控制器 - 因此它可以爲整個域中的單個用戶傳播相同的憑據。

工作組的第二個技巧 - 在兩臺服務器(ASP和SQLServer)上創建同一個模擬帳戶(具有完全相同的登錄名和密碼)。不要忘記在SQLServer上授予此權限。

+0

我的問題是更多的時候啓用模擬,如何關閉特定連接到SQL服務器。 – Phil 2009-09-11 14:05:20

2

您必須在您的網絡上設置委派,以便ASP.NET服務器可以模擬Sql server服務器上的用戶。這假定您的服務器位於Active Directory控制的網絡(不是工作組)上,並且SQL服務器與您的Web服務器位於不同的計算機上。

您可以爲希望模擬用戶的數據庫服務器機器配置委派,並且不要將其配置爲希望ASP.NET工作進程帳戶成爲訪問服務器的帳戶的那些服務器機器。

如果您不能這樣做,您可以關閉希望阻止委派的Sql Server實例上的Windows /混合身份驗證,然後手動配置Sql Server帳戶以在Web中的連接字符串中進行連接。配置。

+0

感謝您的一些背景信息。 – Phil 2009-09-11 14:25:24