【问题标题】:How to get ASPNET to be recognized as a Trusted Connection by SQL Server 2005如何让 ASPNET 被 SQL Server 2005 识别为可信连接
【发布时间】:2010-10-15 23:37:00
【问题描述】:

情况是这样的。我正在开发一个新网站来访问旧数据库。这是 DoD 安装,所以周围有很多安全措施。

当前的应用程序是用经典的 ASP、VBScript 和一些 javascript 编写的。新系统是 ASP.NET。

在旧系统中访问数据库意味着使用您自己的凭据(域名\用户名)访问服务器。现在我正在尝试测试我所做的一些早期开发。当我使用 Cassini(在 VS2008 下)时,我可以毫无问题地访问数据库,因为 ourdomain\myusername 在 SQL Server 实例中注册为受信任的连接。由于我必须编写安全方面的内容,Cassini 不能再用作测试服务器 - 我必须使用 IIS(我们这里有安全读卡器)。卡西尼无法处理它们。

因此,当我在本地电脑上将适当的帐户添加到管理员以便我可以在使用 IIS 时在 VS2008 中进行调试时遇到所有问题时,我尝试连接到数据库并被拒绝,因为 MYPC\ASPNET 是不是受信任的连接。

更改现有数据库是不可能的。用于访问数据库的硬编码用户名和密码是不可能的。

我问 DBA 是否可以将 MYPC\ASPNET 添加到域组中,以便 SQL Server 可以将其视为可信连接(因为 MYDOMAIN\MYNAME 位于被视为可信连接的组中)。他告诉我这在技术上是不可能的。

最终将有三四台机器(我的、另一位开发人员、最终的实时 Web 服务器和未来的测试 Web 服务器)的 ASPNET 帐户将访问我们的两台 SQL 服务器(实时和测试) .

我必须做些什么才能使现有的 SQL 服务器将我视为朋友而不是敌人?我查看了模拟,但我得到的印象是它与我们的系统不兼容 - 业务规则调用一个通用例程来创建一个 SqlConnection 对象并打开它(甚至可能是一个 SqlTransaction 对象与之一起使用)并且使用了这个对象其余的业务规则和数据访问层,直到完成。一旦打开 SqlConnection(并通过 ByRef 返回调用例程),模拟似乎不会持续存在

提前感谢您的任何建议。

【问题讨论】:

    标签: asp.net sql-server security database-connection sqlconnection


    【解决方案1】:

    你有两个选择:

    1. 在配置为在域帐户上下文中运行的应用程序池中运行您的 Web 应用程序
    2. 使用模拟并将您的 Web 应用程序配置为仅使用 Windows 身份验证

    【讨论】:

    • #1 不是一个选项。到目前为止,#2 是一个谜,我希望答案在某个地方的模仿中。
    • 为什么不能选择第一?根据您的描述,这是最好的选择。
    • 我在 DoD 安装,没有凭据,也没有繁文缛节供应去应用程序池路线。
    • 在域帐户的上下文中运行应用程序池没有任何问题(安全方面)。您只需对 IIS 进行一次更改
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      正如已经建议的那样,您应该使用模拟。

      但是,如果您的 SQL Server 与您的 Web 服务器在不同的计算机上运行,​​那么模拟将不够,因为用户的凭据不会被委派给 SQL Server(服务器跃点)。在这种情况下,您将不得不在 AD 中启用委派或在您的 SQL Server 上创建一个非 Windows 登录并改用它(如果您的 SQL Server 实际使用 Windows 登录来控制对表等的访问控制,这将不起作用) .

      【讨论】:

      • 正是的问题。 Web 服务器,即使在生产中,也总是与 SQL 服务器不同。但是创建 SQL Server 登录会带来安全问题——比如在哪里/如何存储用户名/密码以粘贴在连接字符串中?
      • 有一些方法可以保护连接字符串中的凭据 (msdn.microsoft.com/en-us/library/dx0f3cf2.aspx),但我不确定这是否是您的最佳选择。
      • 允许对某些帐户进行委派也会带来安全问题。我不确定什么是最好的解决方案,但加密 web.config 文件的某些部分肯定是最简单的。
      【解决方案4】:

      听起来您想冒充访问您网站的客户,对吗?您是否尝试过使用模拟,或者您认为它不起作用?

      编辑

      正如 Albert 指出的那样,模拟需要使用 Windows 身份验证对用户进行身份验证。您需要禁用匿名访问,并在 IIS 管理工具中启用 Windows 身份验证。

      【讨论】:

      • 到目前为止,我在关于 Impersonation 的 MSDN 页面中读到的内容还没有找到答案。我在 web.config 中添加了“”,现在错误显示“(null)”用户不是受信任的连接。进展,但还没有一个完整的答案。
      • 这是因为您允许匿名用户。您必须在 IIS 配置中只允许 Windows 身份验证
      • 最终,我必须允许匿名访问,因为我们的用户不仅在我们的本地域中,而且来自“门户网站” - 不幸的是,我不太了解哪些信息可以提供给我来自那些用户的上下文。
      • 在这种情况下,您唯一的选择是将应用程序池配置为在域帐户的上下文中运行
      • 你必须摆脱你的繁文缛节
      猜你喜欢
      • 2010-11-14
      • 2013-09-20
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多