Active-Directory

Linux pod 使用 keytab 對 MS-SQL windows 伺服器進行身份驗證

  • June 2, 2021

無法讓 Kerberos 身份驗證從 linux 工作到 Windows 上的 MS-SQL 伺服器。在 AD 中添加了新使用者。

New-ADUser -Name "user" -GivenName "user" -SamAccountName "user" -UserPrincipalName "user@my.domain"  –AccountPassword (ConvertTo-SecureString "password" -AsPlainText -force) -Enabled $true

生成的密鑰表文件。

ktpass -out krb5.keytab -mapUser user@MY.DOMAIN -pass password  -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -princ MSSQLSvc/sql.my.domain:1433@MY.DOMAIN

將 krb5.conf 的配置添加到 linux 伺服器

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
default_ccache_name = KEYRING:persistent:%{uid}

default_realm = MY.DOMAIN
[realms]

MY.DOMAIN = {
}

[domain_realm]
my.domain = MY.DOMAIN
.my.domain = MY.DOMAIN

將 keytab 複製到 linux serv

做過 kinit

kinit -k  MSSQLSvc/sql.my.domain:1433@MY.DOMAIN

klist 節目

klist
Ticket cache: FILE:/etc/krb/cache
Default principal: MSSQLSvc/sql.my.domain:1433@MY.DOMAIN

Valid starting     Expires            Service principal
05/27/21 07:24:27  05/27/21 17:24:27  krbtgt/MY.DOMAIN@MY.DOMAIN
   renew until 06/03/21 07:24:27

和失敗…

/opt/mssql-tools/bin/sqlcmd -S sql.my.domain
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : SSPI Provider: Message stream modified.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Cannot generate SSPI context.

問題出在 Active Directory 端的 SPN 記錄中。Microsoft SQL Kerberos 工具幫助很大。如果 kerberos 工具未在 SQL 伺服器上啟動,請嘗試從 SQL 伺服器上的本地管理員中刪除您的 AD 使用者。

https://docs.microsoft.com/en-us/troubleshoot/sql/connect/kerberos-configuration-manager-available

引用自:https://serverfault.com/questions/1064837