2009-06-18 66 views
1

我有一个asp.net应用程序(使用Windows身份验证进行访问)(由安全团队规定)需要使用集成安全性连接到远程SQL Server 2005通过。由于这一事实,这是我需要模拟一个自定义帐户(冒充原调用将无法正常工作)远程SQL服务器:ASP.NET Web应用程序不能使用多个模拟验证

<identity impersonate = "true" userName="domainname\user" password="password" /> 

这workes罚款。蹭的是我的应用程序还使用ReportViewer控件连接到SSRS服务器以报告需求。报表服务器位于单独的服务器上,安全团队要求所有对此服务器的调用都必须使用原始窗口的帐户进行审计。看来我唯一的选择是尝试将我的应用程序分离到文件夹中,并在我的web.config中使用“位置”标记并使用单独的标识标记。如:

<location path="Reporting"> 
    <system.web> 
     <identity impersonate = "true"/> 
    </system.web> 
    </location> 

注:没有指定的用户名和密码,这意味着它要模拟原始访问者。

但是,使事情变得更加复杂我的应用程序是一个母版/内容页面的应用程序。主页面调用SQL来填充菜单等。底线是双重模仿轨道不起作用。我准备好抛出我的手,并宣布这是做不到的。如果有一种方法可以让我的应用程序模拟原来的调用方来满足我的SSRS审计需求,但可以将SQL Server作为自定义域帐户进行连接。我无法使用SQL身份验证:虽然这可以解决此问题,但不允许使用。

回答

0

您应该能够开启和关闭模拟,以便您可以返回使用运行该网站的默认帐户。我将不得不检查一下,自从我做完了这一段时间。

这看起来像一个开端,如何做到这一点:

System.Security.Principal.WindowsImpersonationContext impersonationContext; 
impersonationContext = 
    ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate(); 

//Insert your code that runs under the security context of the authenticating user here. 

impersonationContext.Undo(); 

基本上你只是模仿适当的用户您需要的电话,然后“撤销”的背景和关闭它。它在那之后回到默认用户。

下面是Windows标识类的链接:

http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.aspx

+0

当我为自定义用户设置模拟时,如: Windows Identity是自定义用户。我试过了,这是事实。因此,如果我默认使用原始用户 如何为我的数据库调用指定自定义用户? – MikeD 2009-06-18 18:04:02

+0

如果内存正确地为我提供服务,它应该自动执行,只要连接字符串使用sspi上下文。 – kemiller2002 2009-06-18 18:25:10

1

你试过以下设置:

  1. 模拟设置为true。这对于身份验证进入应用程序以及访问SSRS以使用当前用户登录时是必需的。

  2. 将一个连接字符串用于具有集成安全性设置为true的SSRS,以便模拟用户直接通过。

  3. 使用第二个连接字符串,将自定义用户名和密码硬编码到连接字符串中。您可以对web.config的连接字符串部分进行加密,以使其对人眼不可见,但是框架会在创建连接时自动解密此部分。

我有类似的情况(需要特定帐户检索具体的数据,但对于服务功能,其余的一般模拟)和此设置工作。

编辑:从命令提示符加密你的web.config一般语法是:

aspnet_regiis -pef "connectionStrings" [PhysicalPathToApplication] -prov "DataProtectionConfigurationProvider" 

加密是每台机器基础的机器上完成的,因此加密将必须在特定的服务器上完成。如果需要的话,你可以拿出更多的文档。

相关问题