重新启动时多个域控制器和 SQL 登录失败

重新启动时多个域控制器和 SQL 登录失败

我有一个带有 4 个域控制器的域 test.local。

我有一台 SQL Server,有时重新启动我的一个域控制器时出现以下错误:

描述:SSIS 错误代码 DTS_E_OLEDBERROR。发生了 OLE DB 错误。错误代码:0x80004005。OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0” Hresult:0x80004005 描述:“登录失败。登录来自不受信任的域,不能与 Windows 身份验证一起使用。”。

为什么其他 3 个 DC 上没有进行身份验证?通常,当有多个域控制器时,会有负载平衡。

感谢您的帮助

答案1

似乎知道问题

但我想知道这是否只是与您的 MSSQL 服务器上的某些网络设置或连接设置(持久性?)有关。这意味着当您重新启动 DC 时,SQL 服务器不知道,并且 SQL 正在尝试进行身份验证,它会在身份验证过程中切断连接或破坏来自 DC 的响应。

这是来自 Microsoft 文档

建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误

(我知道这是来自另一边的,但与链接的已知问题相关的似乎与网络有关)

答案2

这就是我解决这个问题的方法。

首先,您需要检查您的 SQL Server 实例是否在哪个身份验证系统上运行。使用 Windows AD 用户执行以下查询:

select auth_scheme from sys.dm_exec_connections where session_id=@@spid

KERBEROS如果 SQL Server 使用 Kerberos 身份验证,则结果窗口的 auth_scheme 列中会出现一个列为“ ”的字符串。

如果身份验证是NTLM,那么您就遇到了我遇到的问题。

因为如果您使用NTLM,每次您的客户端尝试连接到 SQL Server 时,它都会查询 AD 以询问您是否获得授权。

在 Kerberos 身份验证中,有一个令牌系统。连接到 SQL 数据库的客户端将获得一个唯一令牌,其有效期为 10 小时(Windows 系统上的默认值)。然后它将过期。如果域控制器在令牌有效期内不可用,您仍然可以连接到 SQL Server。

(确保以域管理员身份执行命令)。要配置 Kerberos,您需要添加一个 SPN,如下所示:

SetSPN –A MSSQLSvc/<ComputerName>.<DomainName>:1433 <AccountName>

例如,如果我的 SQL Server 是 redmond.microsoft.com 域中的 Server1,并使用服务帐户 SqlSvcUsr 运行,则命令将是:

SetSPN –A MSSQLSvc/Server1.redmond.microsoft.com:1433 redmond\SqlSvcUsr 

如果您想添加特定实例,那么它将是:

SetSPN –A MSSQLSvc/Server1.redmond.microsoft.com:50203 redmond\SqlSvcUsr
SetSPN –A MSSQLSvc/Server1.redmond.microsoft.com:MyInstance redmond\SqlSvcUsr  

然后重新启动 SQL Server 服务。并再次执行查询:

select auth_scheme from sys.dm_exec_connections where session_id=@@spid

应该列出 Kerberos。

希望能帮助到你。

相关内容