Bra*_*adC 10 sql-server kerberos spn
我发现有关如何准确格式化 SPN(服务原则名称)以获得正确的 Kerberos 连接以及每个 SQL 实例需要多少个的矛盾信息。
此 2017 年 MS 文档包含以下内容:
从 SQL Server 2008 开始,SPN 格式已更改,以支持 TCP/IP、命名管道和共享内存上的 Kerberos 身份验证。命名实例和默认实例支持的 SPN 格式如下。
- 命名实例:
MSSQLSvc/FQDN:[port|instancename]
- 默认实例:
MSSQLSvc/FQDN:port|MSSQLSvc/FQDN
新的 SPN 格式不需要端口号。这意味着多端口服务器或不使用端口号的协议可以使用 Kerberos 身份验证。
我认为最后一段的意思是我只需要一个条目,以下之一:
MSSQLSvc/sqlbox1.mydomain.org/instance2
MSSQLSvc/sqlbox1.mydomain.org
这似乎与这个较旧的 (2011) MS 文档相矛盾,不仅是关于端口号,还关于使用什么名称:
要创建 SPN,您可以使用 SQL Server 的 NetBIOS 名称或完全限定域名 (FQDN)。但是,您必须为 NetBIOS 名称和 FQDN 创建一个 SPN。
当我查看环境中已经存在的 SPN 时,我看到了各种各样的组合,有些服务器最多有 4 个条目:
MSSQLSvc/sqlbox1
MSSQLSvc/sqlbox1:1433
MSSQLSvc/sqlbox1.mydomain.org
MSSQLSvc/sqlbox1.mydomain.org:1433
甚至MS 自己的 Kerberos 配置管理器似乎也想生成最后两个版本(使用适当的混淆处理):
同样,对于现有的命名实例,我看到了一个奇怪的组合,其中一些几乎肯定是无效的:
MSSQLSvc/sqlbox1:1522
MSSQLSvc/sqlbox1:instance2
MSSQLSvc/sqlbox1.mydomain.org:1522
MSSQLSvc/sqlbox1.mydomain.org:instance2
MSSQLSvc/sqlbox1.mydomain.org/instance2
MSSQLSvc/sqlbox1.mydomain.org:1522:instance2
那么,如果我只在我的环境中使用 TCP,那么对于默认实例和命名实例,我的 DSN 实际上应该是什么样的?
我应该包括端口,还是不包括?或者包括一个带端口和一个不带?
仅使用 FQDN,还是只需要 Netbios 名称的条目?或者只有当我们使用命名管道(我们不是)时才会这样?
(对于上下文,我们运行 SQL 2005 到 2014,一些是集群的,另一些是独立的。连接仅通过 TCP,在配置管理器中禁用命名管道。我们将手动修复/创建这些,而不是允许 SQL 服务帐户创建它们服务器启动。)
如果您仅使用 TCP/IP 连接到您的实例,则只需要指定端口。通过命名管道协议连接到 SQL 实例时使用实例名称。遗憾的是,MS 文章并没有直接说明哪种协议需要哪种格式,但它源自(我环境中的许多测试)和以下MS 文章句子:
对于命名管道和共享内存连接,格式为MSSQLSvc/FQDN:instancename的 SPN用于命名实例,MSSQLSvc/FQDN用于默认实例。
关于 FQDN 与 NETBIOS 名称,我会推荐 FQDN,因为如果您遇到随机 DNS 服务器问题,它们不会那么容易出现问题。
从我关于此事的博客文章中提取,格式应如下所示:
可以在此处找到 MS 的源参考。
现在让您的网络管理员日(例如,允许自注册 SPN 的 OU 配置)
您的网络管理员可以在包含您所有 SQL Server 服务帐户的域上创建一个 OU,这些帐户可以以这样的方式配置,即服务帐户可以为自己和自己单独创建 SPN。该方法主要遵循Ryan Reis 的博客,但有一些细微的调整,因此不会执行过度授权。
此过程描述了在域上创建 OU 以允许其中的帐户自行注册自己的 SPN:
执行上述步骤后,有问题的 OU 容器现在已配置为添加到其中的任何帐户都可以单独注册和删除 SPN。这正是正确数量的权限,因为这些帐户将无法践踏其他帐户注册的 SPN。
在步骤 16 中重新启动 SQL Server 的目的是确保按预期注册 SPN。SQL 将尝试在关闭时删除任何已注册的 SPN 并在启动时添加它们,因此只有当所述 SQL Server 服务当前不存在 SPN 时才真正需要重新启动。
关于此方法的最后一点是,如果您在传统的故障转移群集实例 (FCI) 配置中运行 SQL Server,则不建议将此实例的服务帐户添加到此 OU,每KB 2443457。
我真的需要发布我的 Kerberos 系列的第 2 部分...