AD管理员使用setspn工具添加SQL Server SPN后,Linux服务器无法使用MS SQL Server ODBC驱动程序18来使用SPN,并出现错误“[HY000] [Microsoft][ODBC Driver 18 for SQL Server]SSPI Provider:在Kerberos数据库”中找不到服务器
我对一台服务器(dev)有一个基于Kerberos的有效身份验证,并且我正在尝试对一台新服务器(rel)实现相同的连接设置。要配置dev,我的AD管理员使用SPN设置工具设置了服务器SPN:
setspn -S MSSQLSvc/dev:dev_sql_port domain\dev_service_user
我们可以验证spn是否已使用
setspn -Q MSSQLSvc/dev*
ad域上有很多域控制器(7个左右,通过使用linux服务器上的adcli info domain.org
命令来确定)。起初我们无法使用ODBC连接到dev,但几个月后以下模式开始工作:
kinit
Password for user@domain.org: ********
后跟使用连接字符串的连接:
Driver={ODBC Driver 18 for SQL Server};Server=dev;Trusted_Connection=yes;Encrypt=No;TrustServerCertificate=yes
AD管理员使用rel sql服务器示例的正确信息复制了rel的dev设置中的所有内容。我可以使用以下内容为新服务器初始化kerberos票证:
kinit -S "MSSQLSvc\rel:rel_port"
Password for user@domain.org: ********
不过,Python图案:
cnxn_str = ("Driver={ODBC Driver 18 for SQL Server};Server=rel;Trusted_Connection=yes;Encrypt=No;TrustServerCertificate=yes")
cnxn = pyodbc.connect(cnxn_str)
给出错误:
Error: ('HY000', '[HY000] [Microsoft][ODBC Driver 18 for SQL Server]SSPI Provider: Server not found in Kerberos database (851968) (SQLDriverConnect)')
除了上面的部分之外,krb5.conf配置还有一些最小的更改:
[libdefaults]
default_realm = domain.org
dns_lookup_realm = true
dns_lookup_kdc = true
我可以访问适当的管理员进行研究的变化,但是,我们(我)有点困惑为什么开发工作,为什么它花了几个月的工作,为什么rel不工作(还)。
1条答案
按热度按时间rsaldnfx1#
为了解决这个问题,我们确定在原始rel setspn语句中有一个输入错误,并且在
setspn -L realm\rel_sql_service_account
下列出了两个端口,一个端口不正确,另一个没有端口。有可能这是从不同的windows服务器上的命令窗口完成的,而不是最初设置的地方。仔细检查一下,这都是一样的。