将 Kerberos 身份验证用于 SQL Server
若要将 Kerberos 身份验证用于 SQL Server,则以下两个条件都必须得到满足:
客户端计算机和服务器计算机必须属于同一 Windows 域或在可信域中。
服务主体名称 (SPN) 必须在 Active Directory 中进行注册,后者在 Windows 域中起到密钥分发中心的作用。SPN 在注册后会映射到启动 SQL Server 实例服务的 Windows 帐户。如果未进行 SPN 注册或注册失败,则 Windows 安全层无法确定与 SPN 关联的帐户,因而无法使用 Kerberos 身份验证。
注意 如果服务器无法自动注册 SPN,则必须手动注册 SPN。
可以通过查询 sys.dm_exec_connections 动态管理视图来验证连接使用的是否为 Kerberos。请运行下面的查询并检查 auth_scheme 列的值,如果 Kerberos 已启用,该值应为“KERBEROS”。
SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid ;
SPN 在身份验证过程中所起的作用
当应用程序打开一个连接并使用 Windows 身份验证时,SQL Server Native Client 会传递 SQL Server 服务器名、实例名和 SPN(可选)。如果该连接传递了 SPN,则使用它时不对它做任何更改。
如果该连接未传递 SPN,则将根据所使用的协议、服务器名和实例名构造一个默认的 SPN。
在上面这两种情况下,都会将 SPN 发送到密钥分发中心以获取用于对连接进行身份验证的安全标记。如果无法获取安全标记,则身份验证采用 NTLM。