【问题标题】:Connecting to internal SQL Server 2008 R2 from DMZ web server using IIS7 using a trusted connection?使用 IIS7 使用受信任的连接从 DMZ Web 服务器连接到内部 SQL Server 2008 R2?
【发布时间】:2012-11-08 00:57:44
【问题描述】:

我正在尝试连接并收到如下错误:

登录失败。登录不能与 Windows 身份验证一起使用

我在 SQL Server 和 Web 服务器上使用镜像本地帐户,因为我只是尝试在不在同一域中的计算机之间使用受信任的连接。这似乎是相当普遍的事情,但是经过几天试图找到适用于我情况的答案后,我不承认任何答案都适用......或者我只是一个 . NET 开发人员而不是系统管理员或 DBA 意味着我拥有它,只是不知道它。

这就是我能说的:

  • CMS Web 服务器:在企业 DMZ 上的 Windows Server 2008、IIS7 上运行的 ASP.NET 4.0 Web 应用程序
  • CMS 数据库服务器:域服务器上的 SQL Server 2008 R2
  • 出于各种我不会深入讨论的原因,对凭据进行加密是不够的。
  • 应用程序需要连接的数据库端口不是标准端口,而是设置为侦听不同的端口。
  • 设置数据库镜像不是一种选择,也不能真正满足要求(在我看来)

另外,如果这有助于了解,仅供参考:

  • 内容输入发生在内部 Web 服务器上,该服务器将内容发布到由 DMZ Web 服务器访问的同一 DB。
  • 内容服务器设置为让网站以集成模式运行应用程序池,Windows 域用户已使用 -ga 开关设置为服务帐户并获得所有适当的权限,一切运行完美.

  • 外部 Web 服务器,无域访问权限,使用镜像帐户(在 SQL Server 计算机和 Web 计算机上设置相同的用户名和密码)。

  • Web 服务器上的本地帐户使用 -ga 开关设置为服务帐户,并作为我的应用程序的应用程序池标识运行。
  • 在 SQL Server 框中,创建具有相同凭据的本地用户,并授予域用户身份具有的相同权限
  • 使用 SQL Server 用户凭据通过安装在 Web 服务器上的 MGMT Studio 连接到 SQL Server 工作正常。

现在,如果我将用户名输入到连接字符串中,一切就完美了。一旦我像使用域服务器连接字符串一样将trusted_connection=yes 放入连接字符串中,我就会收到信任错误。

所以如果我的连接字符串是这样的,它工作正常:

Server=myServerAddress;Database=myDataBase;Username=MyUser; Password=MyPassword;

如果我将连接字符串更改为其中任何一个,它都会失败:

Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;

Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;

我正在与客户的一位网络管理员合作,他不一定是 DBA,也没有配置 Web 应用程序的经验。所以我们可能遗漏了一些东西,任何建议或想法都会有所帮助。我错过了什么?

【问题讨论】:

    标签: asp.net authentication sql-server-2008-r2 dmz trustedconnection


    【解决方案1】:

    如果不能使用 SQL 凭据,那么您应该使用 Active Directory 并创建单向信任(让 DMZ 服务器域信任您的内部域),在您的内部域中创建一个您的 DMZ 应用程序可以使用的服务帐户,并授予该帐户对数据库的访问权限。然后它将能够生成 SSPI 上下文。

    【讨论】:

    • 所以基本上,如果我理解你的意思,如果创建信任不是一个选项,并且加密凭据的可能性不是一个选项,那么就没有办法都是为了避免将纯文本凭据放在服务器上?
    • 我实际上已经阅读了更多关于此的内容。因此,SQL 中的 Windows Auth 应该从 Kerberos 退回到 NTLM,NTLM 在概念上可以允许同步帐户工作(Kerberos 需要信任,因此我的原始答案)。因此,假设帐户都是 本地 帐户,应用程序池设置为使用该身份,在 SQL 服务器上启用了 Windows 身份验证,并且本地帐户被授予访问权限,这毕竟可能有效。我怀疑可能需要做一些额外的工作才能让 NTLM 正常工作,尤其是在域中至少有一台机器的情况下。 Serverfault 上的人可能知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多