首页 文章

用户登录失败'DOMAIN\MACHINENAME$'

提问于
浏览
97

我知道这几乎是重复的: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但是有些东西与我服务器上的其他应用程序相比并没有加起来,我不知道为什么 .

Boxes being used:

Web Box
SQL Box
SQL测试盒

My Application:

我有一个ASP.NET Web应用程序,它引用了一个使用LINQ-to-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文件正在使用的连接字符串 .

The problem:

我收到以下错误:

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 Box和SQL Test Box上引用数据库,它们都可以工作 . 但除了我使用类库之外,我找不到它们和我当前的应用程序之间的区别 . 那会有关系吗?检查NTFS权限,服务器和数据库级别的安全登录设置,连接字符串和连接方法(SQL Server凭据)以及IIS应用程序池和其他文件夹选项都是相同的 .

为什么这些应用程序在没有将machinename $添加到我的任何一个SQL框的权限的情况下工作?但这就是一个链接告诉我要解决这个问题的方法 .

16 回答

  • 0

    NETWORK SERVICE和LocalSystem将始终作为本地的相应帐户(内置\网络服务和内置\系统)进行身份验证,但两者都将远程验证为计算机帐户 .

    如果您看到像 Login failed for user 'DOMAIN\MACHINENAME$' 这样的故障,则意味着作为NETWORK SERVICE或LocalSystem运行的进程已访问远程资源,已将自身身份验证为计算机帐户并被拒绝授权 .

    典型示例是在应用程序池中运行的ASP应用程序,该应用程序池集使用NETWORK SERVICE凭据并连接到远程SQL Server:应用程序池将作为运行应用程序池的计算机进行身份验证,并且此机器帐户需要被授予访问权限 .

    当拒绝访问计算机帐户时,必须授予计算机帐户访问权限 . 如果服务器拒绝登录'DOMAIN\MACHINE$',则必须将'DOMAIN\MACHINE$'的登录权限授予NETWORK SERVICE . 授予对NETWORK SERVICE的访问权限将允许作为NETWORK SERVICE运行的 local 进程连接而不是远程连接,因为远程的进程将通过DOMAIN \ MACHINE $进行身份验证 .

    如果您希望asp应用程序作为SQL登录连接到远程SQL Server,并且您获得有关DOMAIN \ MACHINE $的例外,则表示您在连接字符串中使用Integrated Security . 如果这是意外的,则意味着您搞砸了所使用的连接字符串 .

  • 10

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

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

  • 131

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

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

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

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

  • 2

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

  • 1

    我在我的web.config中添加了 <identity impersonate="true" /> ,它运行正常 .

  • 5

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

    我将 IIS APPPOOL\ApplicationName 用户添加到SQL Server后就可以了 .

  • 1

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

    • 在ApplicationPoolIdentity下运行的Web应用程序

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

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

    我的数据库连接处于Windows身份验证模式 . 所以我通过简单地将 Application Pools 身份从 ApplicationPoolIdentity 更改为我的域登录凭据 DomainName\MyloginId 来解决它

    步:

    • 点击 Application Pools

    • 选择应用程序的名称

    • 转到 Advanced Setting

    • 展开 Process Model 并单击 Identity . 单击右端的三个点 .

    • 单击 Set... 按钮并提供域登录凭据

    对我来说它已经解决了 .

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

  • 1

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

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

  • 0

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

    在SQL Server 2012中,SQL Server和Analysis服务配置为默认情况下以不同的用户身份运行 . 如果您使用了默认值,请始终确保AS用户可以访问您的数据源!

  • 22

    检查你是否有

    User Instance=true
    

    在连接字符串中 . 尝试删除它,这将解决您的问题 .

  • 10

    我也与SQL Server身份验证用户有此错误

    我尝试了一些修复,但它们没有用 .

    我的解决方案是在Management Studio:Properties / Security下配置其“服务器身份验证模式”以允许SQL Server身份验证 .

  • 11

    每个人似乎忽略的唯一一点是你可能想要集成安全性=真 . 您可以在池帐户下运行该站点 . 这一切都很好,并且仍然可以使用原始用户凭证而不是池来命中SQL服务器 . 它被称为约束委派 . 如果您启用它并设置SPN窗口将转换池的凭据与用户的请求转到最终服务(SQL只是一个这样的服务) . 您必须在Web服务器上注册为SQL请求提供服务的ONE AND ONLY SQL服务器 . 设置这一切对我来说太多了,试图在这里准确描述 . 我花了很长时间才自己解决这个问题 .

  • 7

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

    如果已禁用,请转到“控制面板” - >“管理工具” - >“服务”,然后查找SQL Server代理 . 单击鼠标右键,然后选择“属性” . 从“启动类型”下拉列表中,从“已禁用”更改为“自动” .

    quote from here

  • 0

    我之前有同样的问题,从connectionstring中删除 Persist Security Info=True 对我有用 .

  • 11

    当客户端重命名SQL Server时,我遇到了这个问题 . SQL Reporting Service配置为连接到旧服务器名称,它们还为重定向到新服务器名称的IP创建了别名 .

    他们所有的旧IIS应用程序都在工作,通过别名重定向到新的服务器名称 . 在预感中,我检查了他们是否正在运行SSRS . 尝试连接到SSRS站点产生错误:

    "The service is not available.Contact your system administrator to resolve the issue. System administrators: The report server can’t connect to its database. Make sure the database is running and accessible. You can also check the report server trace log for details. "

    它在服务器上运行,但由于使用了旧服务器名称的别名而无法连接 . 重新配置SSRS使用新服务器名称而不是旧/别名修复它 .

  • 0

    对我来说,通过将 DefaultApplicationPool Identity设置为 NetworkService 来修复'DOMAIN\MACHINENAME$'问题 .

    enter image description here

相关问题