我在寻找相互矛盾的信息,以了解如何精确格式化SPN(服务主体名称)以获取正确的Kerberos连接,以及每个SQL实例需要多少连接。
该2017 MS文档包含以下内容:
从SQL Server 2008开始,为了支持TCP / IP,命名管道和共享内存上的Kerberos身份验证,更改了SPN格式。命名实例和默认实例支持的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服务帐户在创建时服务器启动。)