连接到 sql 服务器登录失败。“登录名来自不受信任的域,不能与 Windows 身份验证一起使用”

我正在尝试托管一个 SQL 服务器数据库,但是每当我尝试连接它时,都会出现这样的错误:

登录名来自不受信任的域,不能与 Windows 一起使用 认证

我通过 Matlab 使用以下命令进行连接:

conn = database('Clinical_Data','DoyleLab07\Acc','','com.microsoft.sqlserver.jdbc.SQLServerDriver','jdbc:sqlserver://DOYLELAB07\SQLEXPRESS:54287;database=Clinical_Data;integratedSecurity=true;').

使用 matlab 连接到数据库工作良好,只要我使用的计算机上的 matlab,我正在使用主机服务器。但是,当我使用另一台计算机和相同的 Matlab 命令时,我会得到上面显示的错误。

当我看到控制面板系统。我注意到在我的主机 PC 或我用来连接到主机的 PC 上没有列出任何域,但是两台计算机都在同一个工作组中。我是否可以通过创建一个域并将外部 PC 和主机添加到该域来解决我的问题?如果是这样,如何才能做到这一点?

如有任何建议,我们将不胜感激。 谢谢你读我的帖子。

450569 次浏览

为什么不使用 SQLServer 帐户并同时传递用户名和密码?

这就是原因。

简而言之,您似乎遇到了身份验证问题。

工作组的问题在于没有像 ActiveDirectory (AD)那样的公共访问控制列表。如果使用 ODBC 或 JDBC,则会传递错误的凭据。

即使在安装了 SQL Express (SE LWA)的计算机(SE)上创建本地 Windows 帐户(LWA) ,从客户机(CM)传递的凭据也将是 CM LWA。

要使用 Windows 身份验证,必须做到以下两点之一:

  1. 您正在从与数据库服务器相同的机器上执行。
  2. 您有一个 ActiveDirectory 环境,应用程序在其下执行的用户(通常是登录用户)有权连接到该数据库。

如果这两种情况都不是真的,你必须做以下两件事中的一件:

  1. 建立一个 Windows 网域控制器,将所有相关的机器连接到该控制器,然后修复 SQL 服务器以使用域帐户;
  2. 将 SQL 服务器更改为同时使用 Windows 和 SQLServer 帐户。

到目前为止,最简单的方法是将 SQLServer 更改为同时使用 Windows 和 SQL 服务器帐户。然后,您只需在 DB 服务器上创建一个 sql 服务器用户,并更改连接字符串即可。

最佳情况选项1将需要一整天的安装和配置。选项2应该需要5分钟左右。

摆脱 Integrated Security=true对我来说很管用。

如果用于访问 SQL 服务器的帐户被域锁定,也可能发生此错误消息。

在使用 DNS 别名和主机文件连接到使用不同域名的计算机时,我遇到过同样的问题。

假设您在 mydomain.com上有一个名为 sql1的 SQL 服务器——它是一个 Active Directory 域——并且您还有一个 mydomain.net 的 DNS 区域,为了保持一致性,您为 database.mydomain.net --> sql1.mydomain.com设置了一个 DNS 别名(CNAME)记录

您将能够使用 Windows 集成安全性连接到 sql1.mydomain.com,但是将无法连接到 database.mydomain.net 即使是同一台服务器,因为域名与您的 AD 域名不匹配。

如果您的 SQL 服务器在一个网域控制器上,并且您正试图从另一个网域控制器连接到该服务器,那么当

IntegratedSecurity = true;

即使在连接字符串中包含有效的 SQLServer 用户名和密码,也会发生这种情况,因为它们将被 Windows 登录名和密码自动覆盖。集成安全性意味着简单地使用您的 Windows 凭据对 SQLServer 进行登录验证。因此,如果你登录到另一个网域控制器,它就会失败。如果您在两个不同的域控制器上,那么您别无选择,只能使用

IntegratedSecurity = false;

现在,当集成安全性为假时,SQLServer 将使用连接字符串中提供的 SQLServer 登录名和密码。为此,必须将 SQLServer 实例的身份验证模式配置为混合模式,即 SQLServer 和 Windows 身份验证模式。

若要在 SQLServer 中验证或更改此设置,可以打开 SQLServerManagementStudio 并右键单击服务器名称,然后选择“属性”。在出现的弹出窗口中选择 Security,您将看到如果需要更改此设置的位置。

在我的例子中,SQL NativeClient 11.0配置中的别名指向无效的服务器/IP。一旦更新,它就能正常工作。

检查: 1. 启动“ SQLServer 配置管理器” 2. 导航到“ SQL 本机客户端11.0配置”,然后“别名” 3. 确保“别名”和“服务器”与 TCP/IP 正确匹配

下面的内容帮助我使用 Windows 身份验证从另一台计算机访问 SQLServer。此方法可能仅在开发/测试环境中有用。例如,你需要手动更新密码一旦你改变了你的工作机器。

在使用 SQLServer 的计算机上,转到“控制面板”,并添加新的 Windows 用户,其用户名和密码与工作计算机上的用户名和密码相同。然后为此用户创建 SQLServer 登录名:

CREATE LOGIN [SQLSERVERHOST\myuser] FROM WINDOWS;

现在您可以使用此登录名进行 Windows 身份验证。

如果收到错误“ The login is from an untrust domain”,这可能意味着您更改了工作计算机上的密码,现在需要更新 SQLServer 计算机上的密码。

以下是为我工作。希望这对你有所帮助

<add name="getconn" connectionString="Data Source=servername;Initial Catalog=DBName;Persist Security Info=True;User ID=sa;Password=***" />

正如前面提到的 给你,您可能需要禁用环回

可以通过添加以下注册表项来删除循环检查:

  • 使用 Regedit 编辑注册表(开始-> 运行 > Regedit)
  • 导航到: HKLM System CurrentControlSet Control LSA
  • 添加一个名为“ DisableLoopbackCheck”的 DWORD 值将此值设置为1

只是添加了我的解决方案的建议,我有一个 VM 服务器的副本,用于开发和测试,我创建了数据库,‘ sa’拥有 db 的所有权。

然后我将数据库恢复到活动 VM 服务器上,但是我得到了相同的错误,即使数据仍然正确返回。我查找了‘ sa’用户映射,发现当我试图应用映射时,它没有映射到数据库,我得到了另一个错误“修复: 不能使用特殊的主体‘ sa’。Microsoft SQL Server 错误: 15405”。所以我查了这个

更改数据库上的授权: : dbname TO sa

我重新检查了用户映射,现在它被分配到我的数据库,它为我修复了许多访问问题。

如果使用 Windows 身份验证,请确保用户的密码没有过期。过期的密码可以解释此错误。这就是我的问题所在。

我们现在使用一个特权帐户管理解决方案,定期更改我们的密码。在我的密码被更改之后,我最终收到了这个错误。用新密码关闭和重新打开 SSMS 解决了我的问题。

我开始得到这个错误时,我试图登录到 SSMS 使用’窗口身份验证’。这是在我重命名 WindowsSQL 服务器之后开始发生的。我尝试了各种方法来解决这个错误,在我的特殊情况下,更改“ hosts”文件中的机器名称以反映名称 SQL 服务器名称的更改解决了这个问题。C: WindowsSystem32驱动程序等主机

我有这个问题,因为我们在使用一个 DNS 名称从一个旧的服务器,桥接到一个新的服务器。使用 newserver inst1地址,工作正常。Newserverinst1和 oldserverinst1都指向相同的 IP。

还有一件事需要检查: < br/> < br/> 在另一个开发人员远程进入 QA 服务器并试图在中午启动恢复作业之后,我们的夜间 QA 恢复作业突然停止工作,随后由于“不受信任域”消息而失败。不知怎么的,服务器指向的作业的维护计划被(更改了?)使用 ip 地址,而不是本地机器的名称。用机器名替换后,问题就解决了。

我在连接到 SQL 总是在监听器时遇到了这个问题。禁用循环返回检查解决了这个问题。

  1. 使用 Regedit 编辑注册表(开始-> 运行 > Regedit)

  2. 导航到: HKLM\System\CurrentControlSet\Control\LSA

  3. 添加名为 “DisableLoopbackCheck”DWORD

  4. 将此值设置为 1

Https://blog.sqlauthority.com/2017/04/18/sql-server-login-failed-login-untrusted-domain-cannot-used-windows-authentication/

如果在同一个域上有两个服务器(例如。(APP 和 DB) ,您还可以通过在两台匹配的计算机上设置本地用户(相同的用户名和密码) ,在应用程序和 MSSQL 之间使用 Windows 身份验证。如果没有匹配的密码,它会抛出此错误。

在. net Core 中,如果 Trusted _ Connection = True,也可能会得到此错误; 在 appsetings.json 中设置

ConnectionStrings": {
"DefaultConnection": "Server=serverName; Database=DbName; uid=userId; pwd=password; MultipleActiveResultSets=true"

},

TLDR: 将 DNS 服务器更改为循环回送地址对我来说很有用。

我在 VirtualBox 中工作,并安装了两个 WindowsServer2016实例。服务器 a 配置为网域控制器,服务器 b 配置为 SQL 服务器。在将 Server B 添加到我无法从 Server A 连接到 ManagementStudio 的域之后,我得到了“该登录来自一个不受信任的域,不能与 Windows 身份验证一起使用”。

我的初始配置让服务器从 VirtualBoxDHCP 服务器获取 IP。

我改变了这一点,使用静态 IP 和输入127.0.0.1地址在主 DNS 和这对我来说工作。

希望这能帮到路过的人。

我在连接属性中启用了信任服务器证书,它对我有效

connection properties

加入一个 WORKGROUP 然后重新加入域为我修复了这个问题。

我在使用 Virtual Box VM 的时候得到了这个错误。当我将 VM 文件移动到一个新的驱动器位置或计算机时,问题就开始发生了。

希望这对 VM 的人有帮助。

您可能会发现您有多个连接字符串,并且您忘记将另一个连接字符串更改为 IntegrationSecurity 为 false。我也经历过。这个答案可能对某人有帮助。

我把注意力集中在网络配置和访问权限上,经过长时间的努力,我想起我在我的一个电子邮件类中还有另一个连接字符串,我不得不改变类中的连接字符串来使用网络配置。

我删除了 Integrated Security=trueTrusted_Connection=True他们两个,为我工作. 。

VisualStudio 开发环境中的连接字符串错误

我们的开发数据库服务器最近获得了一个自签名证书,因此它自动变得不受信任。这导致了上面引用的登录错误。我将 TrustServerCertificate=True添加到我的连接字符串中,现在它可以工作了。

"Server=TheServerAddress; Database=TheDataBase; User Id=TheUsername; Password=ThePassword; TrustServerCertificate=True"

我是通过结合在这个问题的几个答案和一些源文档中找到的信息找到这个答案的: 成功地与服务器建立了连接,但是在登录过程中发生了一个错误(错误号: 233)

有时 SSMS 会突然挂起并关闭,然后在重新连接到 SSMS 时出现以下错误

I)登录名来自不受信任的域,不能与 Windows 身份验证一起使用

或者

Ii)目标主体名称不正确。无法生成 SSPI 上下文。

在这两种情况下,RESTART YOUR MACHINE

我也有一个类似的错误,但后来我意识到,我只是改变了我的系统的密码,导致了这个错误。

为了解决这个问题,我只需退出当前会话,然后再次登录