Han*_*non 8 sql-server linked-server sql-server-2012 kerberos
我正在使用 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;
Run Code Online (Sandbox Code Playgroud)
我懂了:
net_transport auth_scheme
TCP KERBEROS
Run Code Online (Sandbox Code Playgroud)
当我对新的 SQL Server 2012 实例执行相同的查询时,我看到:
net_transport auth_scheme
TCP NTLM
Run Code Online (Sandbox Code Playgroud)
如果我SetSPN -Q MSSQLSvc/*
用来查询服务主体名称的活动域,我会看到列出的 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
Run Code Online (Sandbox Code Playgroud)
我还需要做什么才能对 SQL Server 2012 启用 Kerberos 身份验证?Books Online 似乎没什么可说的,只是必须设置 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.
Run Code Online (Sandbox Code Playgroud)
处理 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。
归档时间: |
|
查看次数: |
6397 次 |
最近记录: |