SQL Server MSSQL服务器SPN连接:Linux到MSSQL服务器(setspn、kinit、Kerberos身份验证)

lztngnrs  于 2022-11-21  发布在  Linux
关注(0)|答案(1)|浏览(123)

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不工作(还)。

rsaldnfx

rsaldnfx1#

为了解决这个问题,我们确定在原始rel setspn语句中有一个输入错误,并且在setspn -L realm\rel_sql_service_account下列出了两个端口,一个端口不正确,另一个没有端口。

setspn -D MSSQLSvc/rel.domain:wrong_port realm\rel_sql_service_account
setspn -D MSSQLSvc/rel.domain realm\rel_sql_service_account
setspn -S MSSQLSvc/rel.domain:right_port realm\rel_sql_service_account

有可能这是从不同的windows服务器上的命令窗口完成的,而不是最初设置的地方。仔细检查一下,这都是一样的。

相关问题