我们目前正在设置 SQL 2012 环境,它将用于存储在 SharePoint 集成模式下 SSRS 访问的数据。我们将使用 Kerberos 进行身份验证。
我们希望能够将 cname 用于 sql 服务器。我们使用默认实例,并且每个服务器只需要一个实例。
我担心的是 kerberos、IE/.NET 和 CNAME 的已知问题。我想知道,只要我确保为 SQL 服务器的 CNAME 和 A 记录正确设置了 SPN,此配置是否有效?
答案1
一开始我很想说不,你不能这样做,但转念一想,还是去做吧。
“您必须为所有新的 DNS 别名 (CNAME) 记录注册 Kerberos 服务主体名称 (SPN)、主机名和完全限定域名 (FQDN)。如果不这样做,DNS 别名 (CNAME) 记录的 Kerberos 票证请求可能会失败并返回错误代码 KDC_ERR_S_SPRINCIPAL_UNKNOWN。”
为了跟进,我可以确认 kerberos 连接已正确建立。感谢提供链接,因为它确认只要为 SQL 群集名称创建 SPN,就只需要 CNAME。
从技术上讲,由于 SQL Server SPN 包含实例名称(如果您在同一台计算机上使用第二个命名的实例),您可以将群集的 DNS 主机注册为 CNAME 别名,并避免附录 A Kerberos 配置已知问题 (SharePoint Server 2010) 中描述的 CNAME 问题。但是,如果您选择使用 CNAME,则必须使用 DNS (A) 记录主机名注册 CNAME 别名的 SPN。
答案2
您可以为 CNAME 注册 SPN。我们在我工作的地方这样做,而且很有效。
答案3
答案中的大多数链接不再有效,并且没有一个答案是完全正确的。
以下是一个正确答案:使用 CNAME DNS 记录时出现 Kerberos 错误 APP_MODIFIED
总结:你需要为后面的机器注册 SPN你的 A 记录,而不是您的 CNAME 记录。对于 Windows 系统,最好使用此命令而不是 CNAME-DNS 条目进行别名设置:
netdom computername <HOST> /Add:<ALIAS>
这会使 DNS 和 SPN 自动保持最新状态。
CNAMES 对某些人“有效”的一个可能原因是,他们要么没有注意到自动回退到 NTLM,要么启用了 DisableStrictNameChecking。或者他们已将 SPN 注册到 CNAME 和 A 记录,这当然也可以正常工作。
为了证明我的答案,下面是我在我的环境中进行的测试。出于隐私原因,屏幕截图已模糊处理。
我们可以观察到
- 浏览器正在打开 testgrc.domain.local
- DNS 包含指向 grc.domain.local 的 CNAME 条目
- DNS 查找正在请求 testgrc.domain.local,DNS 服务器响应 CNAME 记录“grc.domain.local”的目标以及此主机的 IP
- 浏览器向域控制器发起 Kerberos 请求对于 grc.domain.local (不是 grctest.domain.local)
我使用 MS SQL Management Studio 运行了相同的测试,可以观察到相同的结果。当 SPN 注册到 CNAME 指向的主机(A 记录)而不是 CNAME 本身时,Kerberos 可以正常工作。