2009-09-11 138 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