用户“DOMAIN \ MACHINENAME $”login失败

我知道这几乎是重复的: 在ASP.NET和SQL Server 2008中的用户'NT AUTHORITY \ IUSR' login失败和login用户'用户名'失败 – System.Data.SqlClient.SqlException与LINQ在外部项目/类库,但有些东西不加起来相比,我的服务器上的其他appliations,我不知道为什么。

正在使用的框:

networking框
SQL框
SQLtesting框

我的应用程序:

我有一个ASP.NET应用程序,它引用了一个使用LINQ到SQL的类库。 连接string在类库中正确设置。 根据login用户的用户名失败 – System.Data.SqlClient.SqlException与外部项目/类库中的LINQ我也将此连接string添加到Web应用程序。

连接string使用SQL凭据(在Web应用程序和类库中):

<add name="Namespace.My.MySettings.ConnectionStringProduction" connectionString="Data Source=(SQL Test Box);Initial Catalog=(db name);Persist Security Info=True;User ID=ID;Password=Password" providerName="System.Data.SqlClient" /> 

此连接通过将其添加到服务器资源pipe理器来确认正在工 这是我的.dbml文件正在使用的连接string。

问题:

我得到以下错误:

 System.Data.SqlClient.SqlException: Login failed for user 'DOMAIN\MACHINENAME$'. 

现在在ASP.NET和SQL Server 2008中引用这个错误“login失败的用户'NT AUTHORITY \ IUSR'”它说,这是真正的本地networking服务,并使用任何其他非域名将无法正常工作。

但是我很困惑,因为我已经同时检查了SQL Box和SQL Test Box SQL Management Studio,并且在安全性 – >用户下没有列出的数据库级别的安全性 – >login下都具有NT AUTHORITY/NETWORK SERVICE在数据库级别安全 – >用户我有用户显示在连接string。

在Web服务器上的NTFS级别,权限已经NETWORK SERVICE完全控制。

我感到困惑的原因是因为我的Web服务器上有很多其他Web应用程序,在SQL Box和SQL Test Box上都引用了数据库,它们都工作正常。 但我找不到他们和我目前的应用程序之间的区别,除了我正在使用类库。 这件事吗? 检查NTFS权限,在服务器和数据库级别设置安全login,连接string和连接方法(SQL Server凭据)以及IIS应用程序池和其他文件夹选项都是相同的。

为什么这些应用程序无需将机器名$添加到我的任何SQL盒的权限? 但这就是这个链接告诉我要解决这个问题的方法。

networking服务和本地系统将始终作为本地相关帐户进行身份validation(内置\networking服务和内置\系统),但两者都将通过远程身份validation为机器帐户。

如果您看到Login failed for user 'DOMAIN\MACHINENAME$'Login failed for user 'DOMAIN\MACHINENAME$'则意味着以NETWORK SERVICE或LocalSystem身份运行的进程已访问远程资源,已将自己authentication为机器帐户并被拒绝授权。

典型的例子是运行在应用程序池中的ASP应用程序设置为使用NETWORK SERVICE凭证并连接到远程SQL Server:应用程序池将作为运行应用程序池的计算机进行身份validation,并且是需要授予访问权限的计算机帐户。

当访问被拒绝给一台机器帐户时,则必须将访问权限授予该机器帐户。 如果服务器拒绝login“DOMAIN \ MACHINE $”,那么您必须授予“DO​​MAIN \ MACHINE $”的login权限而不是NETWORK SERVICE。 授予对NETWORK SERVICE的访问权限将允许以NETWORK SERVICE运行的本地进程连接,而不是远程连接,因为远程服务器将根据您猜到的DOMAIN \ MACHINE $进行身份validation。

如果您希望asp应用程序作为SQLlogin连接到远程SQL Server,并且获得有关DOMAIN \ MACHINE $的exception,则意味着您在连接string中使用了集成安全性。 如果这是意外的,这意味着你搞砸了你使用的连接string。

当您使用IISconfiguration应用程序时,会发生此错误,并且IIS转到SQL Server并尝试使用没有适当权限的凭据进行login。 复制或镜像设置时也会发生此错误。 我将会经历一个永远有效的解决scheme,而且非常简单。 转到SQL Server >>安全>>login,然后右键单击NT AUTHORITY \ NETWORK SERVICE并select属性

在新login的属性页面中,进入“用户映射”页面。 然后,在“用户映射”选项卡上,select所需的数据库 – 尤其是显示此错误消息的数据库。 在屏幕下方,检查angular色db_owner。 点击OK。

一位同事有相同的错误,这是由于在IIS中的一个小的configuration错误。
为Web应用程序分配了错误的应用程序池。

实际上,我们使用具有特定标识的自定义应用程序池来满足我们的需求。

在他的本地IISpipe理器 – >站点 – >默认网站 – >我们的Web应用程序名称 – >基本设置…应用程序池是“DefaultAppPool”,而不是我们的自定义应用程序池。

设置正确的应用程序池解决了这个问题。

我添加了<identity impersonate="true" />到我的web.config,它工作正常。

我使用的技巧是从我的连接string中删除Integrated Security ,并添加一个常规的User ID=userName; Password=password User ID=userName; Password=password您的连接string在你的libruary的App.config可能没有使用集成安全性,但在Web.config创build的是!

在我的情况下,我有我的IIS应用程序池的Identity="ApplicationPoolIdentity"

在将IIS APPPOOL\ApplicationName用户添加到SQL Server后,它可以正常工作。

对于我来说,当我用允许访问数据库的networking帐户replace默认的内置帐户“ApplicationPoolIdentity”时,问题就解决了。

可以在Internet Information Server(IIS 7+)>应用程序池> Advanded Settings> Process Model> Identity中进行设置

基本上要解决这个问题,我们需要设置一些

  • Web应用程序在ApplicationPoolIdentity下运行
  • Web应用程序通过在连接string中使用Windows身份validation的ADO.Net连接到数据库

用于Windows身份validation的连接string包括Trusted_Connection=Yes属性或Web.config文件中的等效属性Integrated Security=SSPI

我的数据库连接处于Windows身份validation模式。 所以我解决了这个问题,只需将Application Pools Identity从ApplicationPoolIdentity更改为我的域login凭据DomainName \ MyloginId

步:

  1. 点击应用程序池
  2. select您的应用程序的名称

  3. 转到高级设置

  4. 展开过程模型 ,然后单击标识 。 点击右侧的三个点。
  5. 单击设置…button并提供您的域login凭据

对我来说已经解决了。

在处理Analysis Services数据库时,我们得到了类似的错误消息。 事实certificate,用于运行Analysis Services实例的用户名尚未添加到SQL Server的安全login中。

在SQL Server 2012中,SQL Server和Analysis服务默认configuration为以不同的用户身份运行。 如果您使用了默认值,请确保AS用户有权访问您的数据源!

检查你是否有

 User Instance=true 

在连接string中。 尝试删除它将解决您的问题。

我也有一个SQL Server身份validation用户的这个错误

我尝试了一些修复,但他们没有工作。

在我的情况下解决scheme是configuration其“服务器身份validation模式”以允许SQL Server身份validation,在pipe理Studio:属性/安全。

大家似乎忽略的唯一的一点是,你可能想要综合安全=真实。 您可能使该网站在一个池帐户下运行。 这一切都很好,所以仍然可以用原始的用户凭证而不是池来访问SQL服务器。 这就是所谓的约束委派。 如果启用它并设置SPN,则Windows会将用户请求转到最终服务(SQL仅仅是这样的一个服务)时将该池的凭据进行转换。 您必须注册在Web服务器上处理SQL请求的“唯一且唯一的SQL”服务器。 设置这一切对我来说是太多了,试图在这里准确地描述。 我花了相当一段时间才自己做。

我花了几个小时试图解决这个问题,我终于得到了 – SQL Server浏览器被“停止”。 修复方法是将其更改为“自动”模式:

如果禁用,请转到控制面板 – >pipe理工具 – >服务,然后查找SQL Server代理。 右键单击,然后select“属性”。 从“启动types”下拉列表中,将“已禁用”更改为“自动”。

从这里引用

我之前有同样的问题,从连接Persist Security Info=True删除Persist Security Info=True为我工作。