2012-04-30 113 views
2

我刚刚完成了在AD中使用SPN注册我们的SQL Server 2008 R2。 我可以在使用经由SQLNCLI10.1 OLEDB使用以下关键字进行连接:如何使用SPN通过SSMS连接

Server SPN=MSSQLSvc/server.domain.local 

和一旦连接,以下查询验证正在使用的Kerberos:

SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid; 

结果:

KERBEROS 

不过,我无法弄清楚,或者搜索互联网上的信息,使用SPN内SSMS的连接。将建议的关键字添加到“其他连接参数”只是导致

Keyword not supported: 'serverspn' 
Keyword not supported: 'server spn' 

可以使用SPN在SSMS内进行连接吗?如果我这样做没有指定SPN,测试查询返回:

NTLM 

回答

0

您用什么命令创建SPN?

你应该有2个服务的SPNs。 1代表server.domain.local,1代表1433端口(或者你的服务使用的任何端口)。

下面是http://msdn.microsoft.com/en-us/library/ms191153.aspx例子:

setspn -A MSSQLSvc/myhost.redmond.microsoft.com:1433 accountname 
setspn –A MSSQLSvc/myhost.redmond.microsoft.com accountname 

一旦结节的创建,然后Windows身份验证应该是所有你需要得到Kerberos的。

为了验证什么的SPN创建您可以使用以下方法:

setspn -l accountname 

此外,如果服务帐户具有写的servicePrincipalName和读取的servicePrincipalName权限,它会自动注册在启动时的SPN。

见克林特的博客更多的信息:http://clintboessen.blogspot.com/2010/02/dynamically-set-spns-for-sql-service.html

+0

创建SPN的命令是'setspn -A MSSQLSvc/server.domain.local SQLDatabase'。我没有设置特定的TCP端口,希望不会限制使用SPN到TCPIP协议。我将通过向帐户授予SPN权限来尝试在博文中讨论的自动注册,并向后报告。谢谢 – TKInker

+0

我删除了手动设置的SPN:'setspn -D MSSQLSvc/server.domain.local SQLDatabase',使用ASDI Edit设置读/写servicePrincipalName'权限,如Clint博客文章中所述,并重新启动服务器。我可以看到现在自动设置的SPN:'setspn -T * -Q */server.domain.local' CN = SQL引擎帐号,OU =服务帐号,OU =办公网络,DC = DOMAIN,DC =本地''' MSSQLSvc/SERVER.DOMAIN.LOCAL'然而,没有任何改变。数据库服务在域帐户下运行,并且我作为系统管理员还与域帐户连接。我还缺少什么? – TKInker

+0

有可能存在重复的SPN(即与服务和不同的帐户有关联的SPN)。运行setspn -x。这将列出重复的spns。如果有任何欺骗,请使用setspn -d将其删除。此外,在命令提示符下,运行klist以验证您是否拥有端口1433 kerberos票证。 – brian

0

每当你得到NTLM这意味着SPN没有正确注册或账户,一个是不属于域名。否则,你应该总是得到一个KERBEROS连接。有几件事需要您确保始终获得KERBEROS连接。

  • 确保登录存在于运行SQL Server的域上。
  • 确保登录对AD足够烫发,登录使用SQL服务。
  • 手动创建SPN​​。该命令将在添加SPN之前检查重复项。
  • 上述步骤将确保当您重新启动SQL Server的SPN注册

要验证注册成功:

  • 可以在SSMS Management -> SQL Server Logs -> Current检查。
  • 你也可以在CMD setspn -L MSSQLSvc/<domain.com> <login>

运行以下命令你已经验证服务器SPN注册成功后,您可以使用域帐户登录,运行测试命令。之后你应该总是得到KERBEROS。