Ich finde widersprüchliche Informationen darüber, wie SPNs (Service Principle Names) genau formatiert werden müssen, um die richtigen Kerberos-Verbindungen zu erhalten, und wie viele ich für jede SQL-Instanz benötige.
Dieses MS-Dokument 2017 enthält Folgendes:
Ab SQL Server 2008 wird das SPN-Format geändert, um die Kerberos-Authentifizierung unter TCP / IP, Named Pipes und Shared Memory zu unterstützen. Die unterstützten SPN-Formate für benannte und Standardinstanzen lauten wie folgt.
- Benannte Instanz:
MSSQLSvc/FQDN:[port|instancename]
- Standardinstanz:
MSSQLSvc/FQDN:port|MSSQLSvc/FQDN
Das neue SPN-Format erfordert keine Portnummer . Dies bedeutet, dass ein Server mit mehreren Ports oder ein Protokoll, das keine Portnummern verwendet, die Kerberos-Authentifizierung verwenden kann.
Ich habe diesen letzten Absatz so verstanden, dass ich nur einen einzigen Eintrag benötige, einen der folgenden:
- Benannte Instanz:
MSSQLSvc/sqlbox1.mydomain.org/instance2
- Standardinstanz:
MSSQLSvc/sqlbox1.mydomain.org
Dies scheint diesem älteren (2011) MS-Dokument zu widersprechen , nicht nur in Bezug auf die Portnummer, sondern auch in Bezug auf den zu verwendenden Namen:
Zum Erstellen des SPN können Sie den NetBIOS-Namen oder den vollqualifizierten Domänennamen (FQDN) des SQL Servers verwenden. Allerdings müssen Sie ein SPN sowohl für den NetBIOS - Namen und den FQDN erstellen .
Wenn ich mir die SPNs ansehe, die bereits in meiner Umgebung vorhanden sind, sehe ich eine Vielzahl von Kombinationen. Einige Server haben bis zu 4 Einträge:
MSSQLSvc/sqlbox1
MSSQLSvc/sqlbox1:1433
MSSQLSvc/sqlbox1.mydomain.org
MSSQLSvc/sqlbox1.mydomain.org:1433
Selbst der Kerberos-Konfigurationsmanager von MS scheint die letzten beiden Versionen (mit entsprechender Verschleierung) generieren zu wollen:
In ähnlicher Weise sehe ich für vorhandene benannte Instanzen eine seltsame Mischung, von denen einige mit ziemlicher Sicherheit ungültig sind:
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
Wie sollten meine DSNs sowohl für Standardinstanzen als auch für benannte Instanzen aussehen, wenn ich nur TCP in meiner Umgebung verwende?
Soll ich den Port einschließen oder nicht? Oder eins mit und eins ohne Port?
Verwenden Sie nur den vollqualifizierten Domänennamen oder benötige ich die Einträge nur mit dem Netbios-Namen? Oder wäre das nur, wenn wir Named Pipes verwenden würden (was wir nicht sind)?
(Für den Kontext führen wir SQL 2005 bis 2014 aus, einige gruppiert, andere eigenständig. Die Konnektivität erfolgt nur über TCP, Named Pipes sind im Konfigurationsmanager deaktiviert. Wir werden diese manuell reparieren / erstellen, anstatt dem SQL-Dienstkonto zu erlauben, sie zu erstellen Serverstart.)