1

我有一个 asp.net 应用程序(使用 windows 身份验证进行访问),它(由安全团队规定)需要使用集成安全性连接到远程 SQL Server 2005。因为它是远程 SQL 服务器,我需要模拟一个自定义帐户(模拟原始呼叫者不起作用)通过:

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

这工作正常。问题是我的应用程序还使用 ReportViewer 控件连接到 SSRS 服务器以满足报告需求。报表服务器位于单独的服务器上,安全团队要求对该服务器的所有调用都必须使用原始窗口的帐户进行审核。看来我唯一的选择是尝试将我的应用程序分成文件夹并在我的 web.config 中使用“位置”标签并使用单独的身份标签。如:

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

注意:没有指定用户名和密码,这意味着它应该模拟原始调用者。

然而,更复杂的是,我的应用是 Masterpage/content page 应用。母版页调用 SQL 来填充菜单等。底线是双重模拟轨道不起作用。我准备好举手宣布这不可能。如果有一种方法可以让应用程序模拟原始调用者,这将满足我的 SSRS 审计需求,同时作为自定义域帐户连接到 SQL 服务器。我不能使用 SQL authentication: not allowed 尽管这样可以解决这个问题。

4

2 回答 2

1

您是否尝试过以下设置:

  1. 将模拟设置为真。这是对应用程序进行身份验证和访问 SSRS 以使用当前登录用户所必需的。

  2. 使用一个到 SSRS 的连接字符串,将 Integrated Security 设置为 true,以便模拟用户直接通过。

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

我有类似的情况(需要特定帐户来检索特定数据,但其他服务功能的一般模拟)并且此设置有效。

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

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

加密是在每台机器的基础上进行的,因此必须在特定的服务器上进行加密。如果需要,您可以获取更多关于此的文档。

于 2009-06-18T16:41:47.977 回答
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

于 2009-06-18T16:39:51.723 回答