(05.05.2018)
Im Rahmen des Umzugs eines SQL Server 2008 von einem SBS2008 auf einen Windows Server 2012 R2 gab es das Problem, daß die Windows-Authentifizierung bei Clientverbindungen mit der Fehlermeldung "Der Prinzipalname des ziels ist nicht korrekt. SSPI Kontext kann nicht generiert werden" fehlschlug. Interessanterweise war auf dem System selbst die Verbindung mit Windows Auth möglich. Im Eventlog fanden sich folgende (sicherungsspezifische) Fehler:
Sqllib-Fehler: OLE DB-Fehler beim Aufrufen von IDBInitialize::Initialize. hr = 0x80004005. SQLSTATE: HY000, Native Error: -2146893022
Source: Microsoft SQL Server Native Client 10.0
Error message: Cannot generate SSPI context
SQLSTATE: HY000, Native Error: -2146893022
Error state: 1, Severity: 16
Source: Microsoft SQL Server Native Client 10.0
Error message: SQL Server Network Interfaces: Der Zielprinzipalname ist falsch.
DBPROP_INIT_DATASOURCE: <Netbios Servername>
DBPROP_INIT_CATALOG: master
DBPROP_AUTH_INTEGRATED: SSPI
Der Server war schon vor geraumer Zeit aufgesetzt worden, lediglich die Datenbanken wurden nun umgezogen - weswegen das Problem unbemerkt blieb.
Eine kurze Suche warf diesen MS-Support-Beitrag aus: https://support.microsoft.com/en-us/help/2443457/you-may-experience-connectivity-issues-to-sql-server-if-spns-are-misco
Das Problem dabei ist allerdings, daß man zum Löschen von SPNs den jeweiligen Kontonamen kennen muß, mit dem der SPN erstellt wurde.
In dem konkreten Fall wurde einfach mal der Servername angegeben - weil die Möglichkeit bestand, daß die SPNs für den lokalen Computeraccount hinzugefügt worden waren und im Nachnag der Service Account geändert - und das war auch so.
Wenn jedoch irgendeine Konfiguration vorliegt, dann müßte jedes Konto geprüft werden, was sich in der Praxis als mühselig herausstellen dürfte.
Glücklicherweise gibt es in der Technet Gallery einen Eintrag, der genau dieses Problem adressiert: https://gallery.technet.microsoft.com/scriptcenter/Get-SPN-Get-Service-3bd5524a
Das Script sucht SPNs und listet die auch über verschiedene Accountgrenzen hinweg auf.