C# “域/MachineName$”用于身份验证,而不是“域/用户名”

C# “域/MachineName$”用于身份验证,而不是“域/用户名”,c#,asp.net,sql-server,authentication,iis-7,C#,Asp.net,Sql Server,Authentication,Iis 7,下面的帖子看起来可能是一样的,但在尝试了所有答案后,我无法纠正这个问题。 我的问题 我正在Windows网络中的IIS7 dev服务器上部署一个启用表单身份验证的asp.net web应用程序。我的SQL Server部署在同一网络中的远程机箱上,为远程连接打开了必要的TCP端口。所有域用户都已获得访问SQL server中必要数据库的权限 现在,当我尝试运行我的web应用程序时,出现以下错误: 用户“域\机器名$”登录失败 我已经在我的SQL server中为NT AUTHORITY\NET

下面的帖子看起来可能是一样的,但在尝试了所有答案后,我无法纠正这个问题。

我的问题 我正在Windows网络中的IIS7 dev服务器上部署一个启用表单身份验证的asp.net web应用程序。我的SQL Server部署在同一网络中的远程机箱上,为远程连接打开了必要的TCP端口。所有域用户都已获得访问SQL server中必要数据库的权限

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

用户“域\机器名$”登录失败

我已经在我的SQL server中为NT AUTHORITY\NETWORK服务授予了足够的权限

我不想在SQL server中对“DOMAIN\MachineName$”授予任何权限,因为开发人员为了各种测试目的不断更改机器名

我使用的连接字符串是:

服务器=SQL-Server;初始目录=MyDatabase;综合安全=SSPI;持久安全信息=False

SQL提供程序是System.Data.SqlClient


由于我的web应用程序包含login.aspx,因此启用了匿名和表单身份验证。

问题在于,每当您使用NT AUTHORITY\NETWORK SERVICE作为应用程序池用户时,系统都会将网络中的此信息转换为DOMAIN\MachineName$


我们要做的是通过将应用程序池的用户名设置为开发人员的名称来使用开发人员的用户名连接到计算机。

我在intranet环境中也遇到了同样的问题。解决方案很简单,但很难理解。通常,IT安全负责人会给您提供active directory服务帐户,以便您登录数据库。您可以使用ssms登录,但在IIS中登录失败,因为IIS选择使用域/计算机名连接。因此,设置自定义帐户并填写您的域/用户名和密码

在IIS管理器中,选择web应用程序使用的应用程序池或 如果使用默认设置,请创建一个新设置。 单击右侧操作栏中的“高级设置”。在流程模型下,单击 输入“标识”值并选择“自定义帐户”。 单击“编辑”并输入用户帐户的域名/用户名和密码。 如果您正确输入所有信息,弹出窗口将成功关闭 没有任何错误消息。 然后停止你的网站。 再次返回应用程序池并单击“回收”。 启动您的网站。
就这样。您的web应用程序将从IIS成功连接。

我仍然不明白为什么有些项目将默认为域/用户名,而其他项目将默认为域/机器名。这个解决方案的问题是,其他开发人员必须知道这个修复程序,才能使项目正常工作,而不仅仅是把它拉下来让它工作。他们都使用IIS还是使用IIS express?对于后一种情况,始终使用用户名,对于IIS,这取决于应用程序池中的设置。我希望“网络服务”尝试“域\机器名$”。但在我的iis7上,情况并非如此。我的IIS正在使用“ApplicationPoolIdentity”,当它运行时,它实际上是以“DOMAIN\MachineName$”的形式连接的。在另一台计算机上,我有一台服务器计算机,我希望它使用“DOMAIN\MachineName$”,我尝试了所有内置帐户选项,但在连接到SQL时,没有一个使用“DOMAIN\MachineName$”。所以事情并不像这样简单。但愿如此。在本地计算机上,网络服务被转换为网络服务!就我所知仅当您连接到另一台计算机时,才会将机器名转换为计算机名。