2010-05-10 148 views
87

我知道这几乎是重复的:The error "Login failed for user 'NT AUTHORITY\IUSR'" in ASP.NET and SQL Server 2008Login failed for user 'username' - System.Data.SqlClient.SqlException with LINQ in external project/class library但有些事情没有加起来相比,我的服务器上的其他应用程序,我不知道为什么。

盒使用:

网箱
SQL盒
SQL试验箱

我的应用程序:

我有aASP.NET Web应用程序,它引用一个使用LINQ到SQL的类库。连接字符串在类库中正确设置。根据Login failed for user 'username' - System.Data.SqlClient.SqlException with LINQ in external project/class library我还将此连接字符串添加到Web应用程序。

连接字符串使用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" /> 

此连接证实通过将其添加到服务器资源管理器的工作。这是我的.dbml文件正在使用的连接字符串。

问题:

我收到以下错误:

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

现在引用此The error "Login failed for user 'NT AUTHORITY\IUSR'" in ASP.NET and SQL Server 2008它说这是真正的本地网络服务和使用任何其他非域名将无法正常工作。

但是我很困惑,因为我已经检查了SQL Box和SQL Test Box SQL Management Studio,并且都在安全 - >用户下列出的安全性 - >登录下的数据库级别上有NT AUTHORITY/NETWORK SERVICE,但在数据库级别安全性 - >用户我让用户显示在连接字符串中。

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

为什么我感到困惑的原因是因为我有我的Web服务器上的许多其他Web应用程序,两个SQL盒和SQL试验箱是参考数据库,他们所有的工作。但我找不到他们和我当前的应用程序之间的区别,除了我正在使用类库。这是否重要?检查NTFS权限,在服务器和数据库级别设置安全登录,连接字符串和连接方法(SQL Server凭据)以及IIS应用程序池和其他文件夹选项都是相同的。

为什么这些应用程序的工作不添加计算机名$以任我SQL箱子的权限?但这就是这条链接告诉我要解决这个问题的方法。

+0

因此,要回顾一下,你不使用数据库用户?我们创建一个可以把它和SA取决于什么,我们需要做的... – jcolebrand 2010-05-10 21:04:20

+0

在连接字符串我使用的数据库用户,这是我在创造安全之间进行切换 - >登录区,将其添加到安全 - >数据库的用户,并给它dbo权限。我也是这样做了我所有的其他应用程序。 – SventoryMang 2010-05-10 21:28:07

回答

115

网络服务和本地系统将始终验证自己作为correpsonding帐户本地(内置\网络服务和内置\系统),但双方会在机器验证远程帐户。

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

典型的例子是在一个应用程序池集运行使用网络服务的凭证,并连接到远程SQL服务器的ASP应用:应用程序池将作为运行的应用程序池进行身份验证,并且是本机账号需要被授予访问权限。

当访问被拒绝的机器帐户,然后访问必须被授予计算机帐户。如果服务器拒绝登录'DOMAIN \ MACHINE $',那么您必须授予'DOMAIN \ MACHINE $'登录权限而不是NETWORK SERVICE。授予对NETWORK SERVICE的访问权限将允许本地进程作为NETWORK SERVICE进行连接,而不是远程连接,因为远程服务器会根据您猜测的DOMAIN \ MACHINE $进行身份验证。

如果你希望在ASP应用程序连接到远程SQL Server的SQL登录,你会得到关于域名\ MACHINE例外$它意味着你在连接字符串中使用集成安全性。如果这是意外的,这意味着你搞砸了你使用的连接字符串。

+0

对,我收集了什么,谢谢你的解释。但是,问题仍然存在,我的所有应用程序都托管在我的Web服务器上,但访问SQL或SQL Test Box上的数据库,这将是远程访问是吗?然而,他们正在努力...但我的SQL箱都没有授予DOMAIN \ MACHINENAME $访问权限。 – SventoryMang 2010-05-10 21:31:22

+0

哦另外,我确实希望作为一个SQL登录连接到SQL服务器,但是我已经发布了我的连接字符串,我没有使用Integrated Security = True选项,还有什么可能? – SventoryMang 2010-05-10 21:36:16

+2

有三种可能的解释:1)他们使用SQL身份验证,而不是集成的身份验证(这似乎是最合理的一个,因为你比如在康涅狄格州字符串的用户名和密码)2),他们使用集成的身份验证和运行应用程序轮询使用不同的凭证或3)他们使用集成的身份验证,但ASP应用程序模拟调用者,从而触发约束委派:http://technet.microsoft.com/en-us/library/cc739587%28WS.10%29。 ASPX。 – 2010-05-10 21:37:39

10

为我工作的诀窍是从我的连接字符串删除Integrated Security并在libruary的App.config添加一个正User ID=userName; Password=password连接字符串使用集成安全性,但在Web.config创造了一个可能不是!

+3

十亿感谢你。巨大的,巨大的帮助。谢谢你,谢谢你,谢谢你。 这是,我敢肯定,非常明显,但对于未来的人来说,它是用户ID =东西;密码=东西; – shubniggurath 2013-10-21 14:04:16

+1

我在帖子的标题中收到同样的错误。当数据库连接字符串中出现“'trusted connection = true'”时,我发现'User Id = yourUserid Password = yourPassword'会被忽略。我从我的字符串中删除了“'trusted connection = true'”,这解决了我的问题。直到我将应用程序从VS 2012中的调试移到iis 8时才发生这种情况。 – 2014-07-04 07:11:35

9

我加<identity impersonate="true" />到我的web.config它工作得很好。

+4

只要理解这将改变ASP.NET应用程序在其下运行的上下文。它不是在默认的“NETWORK SERVICE”环境下运行,而是现在在使用应用程序的用户的上下文中运行(即Domain \ someUser)。这有时可以,但只要了解这一变化不仅仅是OP的快速修复,而且还有其他可能/不需要的下游影响。 – atconway 2014-08-26 01:48:38

+0

[上的MSDN](https://msdn.microsoft.com/en-us/library/72wdk8cc(v = vs.71).aspx) – Timothy 2015-09-17 05:30:44

18

此错误时,你已经配置了IIS应用程序时,和IIS转到SQL Server和尝试与不具有适当的权限的凭据登录。复制或镜像设置时也会发生此错误。 我将继续讨论一个始终有效并且非常简单的解决方案。 转到SQL Server >>安全>>登录并右键单击NT AUTHORITY \ NETWORK SERVICE并选择属性

在新打开的登录属性屏幕中,转到“用户映射”选项卡。然后,在“用户映射”选项卡上,选择所需的数据库 - 尤其是显示此错误消息的数据库。在屏幕下方,检查角色db_owner。点击确定。

+2

这是我的解决方案,因为Web应用程序和数据库位于同一台机器。 我仍然收到错误“Login for user'DOMAIN \ MACHINENAME $”,但将该机器添加到SQL登录名并没有帮助,但添加了“NT AUTHORITY \ NETWORK SERVICE”。 虽然不应该使用角色db_owner,除非需要,通常db_datareader和db_datawriter就足够了。 – JimiSweden 2016-02-16 13:04:27

9

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

事实上,我们使用自定义的应用程序池与特定的身份,以满足我们的需求。

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

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

2

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

在SQL Server 2012中,SQL Server和分析服务默认配置为运行为不同的用户。如果您使用默认设置,请务必确保AS用户有权访问您的数据源!

+1

我有同样的问题。来自SSAS的错误是相同的,但该帐户不是网络服务。 该帐户实际上是:NT服务\ MSOLAP $ INSTANCENAME – cdonner 2014-04-02 17:53:02

5

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

设置可以在Internet信息服务器(IIS 7+)>应用程序池> Advanded设置>流程模型>身份

0

作出我有同样的问题早,从我的ConnectionString去除工作Persist Security Info=True

0

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

If it is disabled, go to Control Panel->Administrative Tools->Services, and look for the SQL Server Agent. Right-click, and select "Properties." From the "Startup Type" dropdown, change from "Disabled" to "Automatic".

quote from here

1

选择是否在连接字符串有

User Instance=true 

。尝试删除它可以解决您的问题。

7

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

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

+2

我相信这只会在IIS和SQL服务器在同一台机器上时才起作用。 – 2017-03-03 22:47:19

+1

这对我有用!我有一个本地的IIS-SQL服务器设置。 – 2017-10-30 13:59:05

5

基本上解决这一点,我们需要有一些设置类似于

  • Web App的ApplicationPoolIdentity下运行
  • 在连接字符串中使用Windows身份验证
  • Web应用程序通过ADO.Net连接到数据库

与Windows身份验证一起使用的连接字符串包括Trusted_Connection=Yes属性或Web.config文件中的等效属性Integrated Security=SSPI

我的数据库连接处于Windows身份验证模式。所以我决定通过简单的从改变应用程序池标识ApplicationPoolIdentity我的域名登录凭据域名\ MyloginId

步骤:

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

  3. 转到高级设置

  4. 展开过程模型并单击身份。点击右侧的三个 点。
  5. 点击设置...按钮和提供 您的域名登录凭据

对我来说,它已经解决了。

注意:在生产环境或IT环境中,您可能拥有同一域下的服务帐户以获取应用程序池标识。如果是这样,请使用服务帐户而不是登录名。

1

我也有过这样的错误与SQL Server身份验证的用户

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

在我的情况的解决方案是配置其“服务器身份验证模式”,让SQL Server身份验证,下Management Studio中:属性/安全。

1

,每个人似乎都忽略了唯一的一点是,你可能要集成安全=真。您可能使该网站在帐户下运行。这一切都很好,所以仍然可以用原始用户凭证而不是池来访问SQL服务器。它被称为约束委派。如果启用它并设置SPN,Windows会将用户的请求转换为最终服务(SQL只是一种此类服务),从而转换池的凭据。您必须注册在Web服务器上处理SQL请求的“唯一且唯一的SQL”服务器。设置这一切对我来说太过分了,无法在这里准确地描述。我花了相当长的时间才自己完成它。