使用'Domain/MachineName$'进行身份验证,而不是使用'Domain/UserName'。

9
以下帖子看起来相同,但是我尝试了所有提供的答案解决问题后仍无法纠正问题。 (用户'DOMAIN\MACHINENAME$'的登录失败)

我的问题

我正在部署启用表单身份验证的 asp.net web 应用程序到我的 IIS7 开发服务器中,该服务器位于Windows网络中。我的 SQL Server 部署在远程机器上,与同一网络中的必要 TCP 端口打开以进行远程连接。所有域用户都已被授予对 SQL Server 中必要数据库的访问权限。

现在,当我尝试运行我的 web 应用程序时,会出现以下错误:

用户'DOMAIN\MachineName$'的登录失败。

我已经在我的 SQL Server 中为NT AUTHORITY\NETWORK SERVICE赋予了充分的权限。

不想在 SQL Server 中为'DOMAIN\MachineName$'授予任何权限,因为开发人员会为各种测试目的更改机器名称。

我正在使用以下连接字符串:

"Server=SQL-SERVER;Initial Catalog=MyDatabase;Integrated Security=SSPI;Persist Security Info=False"

SQL提供程序是System.Data.SqlClient

我的Web应用程序启用了匿名和表单身份验证,因为它包含login.aspx

2个回答

8
重点在于,每当您使用NT AUTHORITY\NETWORK SERVICE作为应用程序池用户时,系统会将其转换为网络中的DOMAIN\MachineName$
我们所做的是使用开发者的用户名连接到计算机,方法是将应用程序池的用户名设置为开发者的姓名。

我仍然不明白为什么有些项目会默认为域/用户名,而其他项目则默认为域/机器名。这个解决方案的问题在于,其他开发人员必须知道这个修复程序才能使项目正常工作,而不能只是拉下来就可以工作。 - mac10688
他们都是使用IIS还是使用IIS Express?如果是后者,则始终使用用户名,对于IIS则取决于应用程序池中的设置。 - Stephen Reindl
我希望“网络服务”尝试“DOMAIN\MachineName$”。但是在我的IIS 7上,情况并非如此。我的IIS正在使用“ApplicationPoolIdentity”,当它运行时,它实际上连接为“DOMAIN\MachineName$”。在另一台计算机上,我有一台服务器计算机,我希望它使用“DOMAIN\MachineName$”,我已经尝试了所有内置帐户选项,但是当连接到SQL时,没有一个选项使用“Domain\MachineName$”。所以事情并不像这么简单。我希望它是这样的。 - Shawn Kovac
2
在本地计算机上,“Network Service”被翻译为“Network Service”(原文如此)。据我所知,只有在连接到另一台计算机时才会将其翻译为机器名称。 - Stephen Reindl

3

我在公司内部网络环境中也遇到了同样的问题。解决方案虽然简单,但理解起来难度较大。通常,IT安全负责人会给你一个活动目录服务账户用于登录数据库。你可以使用ssms进行登录,但在IIS中却失败了,因为IIS选择连接域名/计算机名。所以,设置自定义账户并填写你的域名/用户名和密码。

  1. 在IIS管理器中,选择你的Web应用程序使用的应用程序池或创建一个新的(如果你使用默认的)。
  2. 在右侧操作栏中点击“高级设置”。在“进程模型”下,点击“Identity”值并选择“自定义帐户”。
  3. 点击“编辑”,输入用户帐户的域名/用户名和密码。
  4. 如果您正确输入了所有信息,则弹出窗口将被成功关闭,没有任何错误消息。
  5. 之后停止你的网站。
  6. 再次回到你的应用程序池,点击“Recycle”。
  7. 启动你的网站。

就是这样,你的Web应用程序现在能够成功从IIS连接了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接