Sto trovando informazioni contraddittorie su come formattare esattamente SPN (Service Principle Names) per ottenere le connessioni Kerberos corrette e quante ne ho bisogno per ogni istanza SQL.
Questo documento MS 2017 contiene quanto segue:
A partire da SQL Server 2008, il formato SPN viene modificato per supportare l'autenticazione Kerberos su TCP / IP, named pipe e memoria condivisa. I formati SPN supportati per le istanze denominate e predefinite sono i seguenti.
- Istanza denominata:
MSSQLSvc/FQDN:[port|instancename]
- Istanza predefinita:
MSSQLSvc/FQDN:port|MSSQLSvc/FQDN
Il nuovo formato SPN non richiede un numero di porta . Ciò significa che un server a più porte o un protocollo che non utilizza numeri di porta possono utilizzare l'autenticazione Kerberos.
Ho preso quest'ultimo paragrafo per indicare che ho bisogno di una sola voce, una delle seguenti:
- Istanza denominata:
MSSQLSvc/sqlbox1.mydomain.org/instance2
- Istanza predefinita:
MSSQLSvc/sqlbox1.mydomain.org
Ciò sembra contraddire questo vecchio documento MS (2011) , non solo sul numero di porta, ma anche su quale nome usare:
Per creare il nome SPN, è possibile utilizzare il nome NetBIOS o il nome di dominio completo (FQDN) di SQL Server. Tuttavia, è necessario creare un nome SPN sia per il nome NetBIOS che per il nome FQDN .
Quando guardo gli SPN già esistenti nel mio ambiente, vedo una grande varietà di combinazioni, alcuni server hanno fino a 4 voci:
MSSQLSvc/sqlbox1
MSSQLSvc/sqlbox1:1433
MSSQLSvc/sqlbox1.mydomain.org
MSSQLSvc/sqlbox1.mydomain.org:1433
Persino il gestore della configurazione Kerberos di MS sembra voler generare le ultime due versioni (con la relativa offuscamento):
Allo stesso modo per le istanze nominate esistenti, vedo uno strano mix, alcuni dei quali quasi certamente non validi:
MSSQLSvc/sqlbox1:1522
MSSQLSvc/sqlbox1:instance2
MSSQLSvc/sqlbox1.mydomain.org:1522
MSSQLSvc/sqlbox1.mydomain.org:instance2
MSSQLSvc/sqlbox1.mydomain.org/instance2
MSSQLSvc/sqlbox1.mydomain.org:1522:instance2
Quindi, come dovrebbero essere i miei DSN in realtà, sia per le istanze predefinite che per quelle nominate, se uso TCP nel mio ambiente?
Devo includere la porta o no? O includerne uno con la porta e uno senza?
Utilizzare solo il nome FQDN o sono necessarie le voci con solo il nome Netbios? O sarebbe solo se stessimo usando named pipe (cosa che non siamo)?
(Per il contesto, eseguiamo SQL 2005 fino al 2014, alcuni in cluster, altri autonomi. La connettività è solo tramite TCP, named pipe è disabilitata in Config Manager. Ripareremo / creeremo questi manualmente invece di consentire all'account del servizio SQL di crearli su avvio del server.)