SQL Server 受信任的连接在 IIS 中有错误的用户,但 SSMS 正常

Posted

技术标签:

【中文标题】SQL Server 受信任的连接在 IIS 中有错误的用户,但 SSMS 正常【英文标题】:SQL Server trusted connection has wrong user in IIS, but SSMS is OK 【发布时间】:2015-07-14 20:28:33 【问题描述】:

我正在使用 VS 2012,使用 Windows 凭据连接到 SQL Server 2008 主机。我可以从 Management Studio 正常连接,但是当我运行 Web 应用程序(集成了 IIS 7.5 windows 7 ASP.NET 4.0)并且我的应用程序尝试连接时,我得到了这个:

用户“MyDomain\MyMachineName$”登录失败。

由于某种原因,使用网络标识的 IIS 应用程序池不使用 MyUserName,而是使用我的机器名称。我的连接字符串是:

<connectionStrings>
    <clear />
    <add name="Assignment" 
         connectionString="Data Source=a.b.c.d;Initial Catalog=My_Db;Trusted_Connection=true;Max Pool Size=200;Pooling=True;" />
</connectionStrings>

我应该提到这是一台新的(对我而言)计算机。我查看了凭证管理器,那里什么都没有。任何想法为什么 IIS 和我的网络应用程序使用了错误的东西?

【问题讨论】:

【参考方案1】:

当您在网络服务标识下运行应用程序池时,IIS 实际上完全按照它的设计目标。

在域环境中使用网络服务帐户有很大的好处 益处。作为网络服务运行的工作进程访问网络 作为机器帐户。机器帐户是在一台机器上生成的 已加入域。它们看起来像这样:

&lt;domainname&gt;\&lt;machinename&gt;$,

例如:mydomain\machine1$

这样做的好处是网络资源 可以对文件共享或 SQL Server 数据库等进行 ACL 以允许这样做 机器帐户访问权限。

以上引用来自以下文档...

http://www.iis.net/learn/manage/configuring-security/application-pool-identities

希望这能回答为什么它没有按您期望的方式工作的问题。

至于如何让它按照你想要的方式工作,我认为这篇文章应该回答这个问题,如果没有,一些基本的谷歌搜索应该会提供很多关于如何正确配置你的环境的信息你想做什么。

https://gilesey.wordpress.com/2013/05/11/allowing-iis-7-5-applications-to-communicate-to-sql-server-via-windows-authentication/

【讨论】:

谢谢@Jim!所以这意味着 Sql Server only 对受信任连接中的机器名称进行身份验证,对吗?这对 Web 服务器来说是有意义的。在这种情况下,我希望它以与 SMS 在 Windows 身份验证模式下相同的方式登录。听起来没有办法让它做到这一点。由于这是一个远程服务器,第二篇文章对我没有帮助。 @Jim 当我们尝试将“IIS...”添加到数据库时,它会抛出错误“未找到 Windows NT 用户或组 'IIS ..'” @singhswat 我的解决方案是创建一个 sql 用户并使用该用户的连接字符串而不是 windows 域传递。我的问题不是如何解决它,而是为什么 IIS 与 SSMS 的行为不同。答案是 IIS 作为网络服务运行,因此信任基于机器而不是用户。 太棒了。 3 岁的答案,不知何故,经过几天的谷歌搜索,我找到了它。为 IIS 应用程序池创建用户有效。

以上是关于SQL Server 受信任的连接在 IIS 中有错误的用户,但 SSMS 正常的主要内容,如果未能解决你的问题,请参考以下文章

使用受信任连接时,哪个帐户用于向 SQL 验证 ASP.net?

Microsoft SQL Server登录失败,该登录名来自不受信任的域,不能与Windows`

强制受信任的外键 SQL Server 允许在视图中加入剔除

SQL Server 2008 Windows 身份验证登录错误:登录来自不受信任的域

IIS 登录失败 该登陆名来自不受信任的域,不能与windows身份认证一起使用

IIS 是不是进行 SSL 证书检查,还是我必须对其进行验证?