Kerberos身份验证不适用于SQL Server 2012中的链接服务器


8

我正在使用2个在Windows Server 2012上运行SQL Server 2012的SQL Server来设置DEV / TEST环境。我们从Windows Server 2008上的SQL Server 2005迁移,在此我们已经正确启动了该服务器。

在SQL Server 2012中,Kerberos身份验证不起作用。

每个服务器都有自己的Active Directory帐户,该帐户具有通过Active Directory用户和计算机授予的“写入服务主体名称”和“读取服务主体名称”权限。每当我连接到SQL Server 2005服务器并运行时:

SELECT net_transport, auth_scheme 
FROM sys.dm_exec_connections 
WHERE session_id = @@SPID;

我知道了:

net_transport    auth_scheme
TCP              KERBEROS 

当我对新的SQL Server 2012实例执行相同的查询时,我看到:

net_transport    auth_scheme
TCP              NTLM 

如果我使用SetSPN -Q MSSQLSvc/*Active Directory查询服务主体名称,则会看到列出的2005和2012服务器,与服务器名称完全相同。

例如:

MSSQLSvc/SERVERa2005.domain.inet
MSSQLSvc/SERVERa2005domain.inet:1433
MSSQLSvc/SERVERb2005.domain.inet
MSSQLSvc/SERVERb2005domain.inet:1433
MSSQLSvc/SERVERa2012.domain.inet
MSSQLSvc/SERVERa2012domain.inet:1433
MSSQLSvc/SERVERb2012.domain.inet
MSSQLSvc/SERVERb2012domain.inet:1433

要对SQL Server 2012启用Kerberos身份验证,我还需要做什么?联机丛书似乎无话可说,除了必须设置SPN。显然,它们是。两台2012年计算机上的SQL Server错误日志都说:

2012-12-10 14:55:47.630 The SQL Server Network Interface library 
                            successfully registered the Service Principal Name (SPN)
                            [ MSSQLSvc/SERVERa2012.domain.inet ] for the SQL Server
                            service. 

2012-12-10 14:55:47.630 The SQL Server Network Interface library 
                            successfully registered the Service Principal Name (SPN) 
                            [ MSSQLSvc/SERVERa2012.domain.inet:1433 ] for the SQL 
                            Server service. 

2012-12-10 14:55:47.590 SQL Server is attempting to register a Service 
                            Principal Name (SPN) for the SQL Server service. 
                            Kerberos authentication will not be possible until a 
                            SPN is registered for the SQL Server service. This is an
                            informational message. No user action is required.

2
我最喜欢的Kerberos故障是由计算机引起的,这些计算机的时钟相差“太远”。确保它们与域的官方时间同步。
达林海峡2012年

1
还要确保时区正确。
戴夫·马克尔2012年

Answers:


8

处理Active Directory总是很有趣。这里最重要的一点是要意识到您正在处理分布式数据,这可能需要花费一些时间才能在整个网络中传播。

在升级过程中,所涉及的SQL Server的名称已更改。我们将运行SQL Server 2005的现有计算机(SQL01)替换为运行SQL Server 2012的新计算机(SQL03)。当我最初在域中进行设置时,SQL03是新计算机的名称。SQL01有一个与单个域帐户关联的现有SPN,我们将其用于运行2005的多个SQL Server。由于最佳实践是仅在任何给定的域帐户下运行一台计算机,因此我创建了一个新帐户并配置了SQL03来与该帐户一起运行用户名。使原始SQL01停止服务并将SQL03重命名为SQL01之后,出现了SPN冲突。

我使用SetSPN.exe实用程序删除了冲突的SPN(在旧域帐户上)-仍然无法正常工作。在这一点上,我没有做进一步的事情,而是转到其他项目。当我大约30分钟后回来时,KERBEROS身份验证正在起作用。我只需要等待SPN更改在我们的域控制器之间传播即可。

我使用SetSPN -L DOMAIN\Account该输出并将其与SetSPN -Q MSSQLSvc/Machine.domain.inet:1433进行比较,以找到重复的SPN,然后SetSPN -D MSSQLSvc/Machine.domain.inet:1433 DOMAIN\Account将其用于删除旧的SPN。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.