Nach meinem Verständnis dieses Problems handelt es sich um ein "HOP" -Problem.
Sie versuchen also, Server A zu verwenden, um Ihre Anmeldedaten (mit SSPI) an Server B weiterzuleiten.
In SQL Server 2005 haben sie eine ganze Reihe von Sicherheitsproblemen hinzugefügt, die dies schwieriger machen, als es sein sollte. Die Worte "Kerberos-Authentifizierung" werden für die meisten Systemadministratoren / Datenbankadministratoren von großer Bedeutung sein. Es wird effektiv für die Passthrough-Authentifizierung verwendet.
Hier sind die Grundlagen dessen, was Sie brauchen. 1) Die Server (A und B) müssen in Active Directory (AD) mit aktivierter Kerberos-Delegierung eingerichtet werden. (Dies wird in Ihrem Active Directory-Verwaltungsbereich festgelegt.)
2) Für das Dienstkonto, unter dem Ihre SQL Server ausgeführt werden, muss auch die Delegierung aktiviert sein (dies wird auch in Ihrem Active Directory-Verwaltungsbereich festgelegt). - Wenn sie nicht unter einem Dienstkonto ausgeführt werden, müssen Sie ein Konto erstellen.
3) Auf den Servern müssen SPNs für die Instanz und den Host sowie den Computernamen definiert sein. (Verwenden eines Tools namens SetSPN in den Windows-Supporttools)
Support-Tools (SetSPN ist in diesem Set enthalten)
http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=de
(Übersicht über das Hinzufügen eines SPN)
http://technet.microsoft.com/en-us/library/bb735885.aspx
4) Möglicherweise müssen Sie Ihre Datenbank auf "vertrauenswürdig" einstellen.
ALTER DATABASE SET vertrauenswürdig ein
5) Nachdem Sie dies alles erledigt haben, starten Sie Ihre Instanzen neu.
6) Versuchen Sie dann erneut, Ihren Verbindungsserver zu erstellen.
Schließlich können Sie Ihre Verbindung zu SQL Server testen. Dies sollte gut funktionieren, wenn Sie alles richtig konfiguriert haben.
SELECT *
FROM OPENDATASOURCE('SQLNCLI',
'Data Source=ServerB;Integrated Security=SSPI;'
).MASTER.dbo.syscolumns
Hier erfahren Sie, welche Art der Verbindungsauthentifizierung Sie verwenden.
select auth_scheme from sys.dm_exec_connections where session_id=@@SPID
Sie möchten 'KERBEROS' hier und nicht 'NTLM' erhalten.
Es ist eine rutschige Piste, KERBEROS und Pass-Through-Delegation, bleiben Sie dabei und Sie werden es irgendwann herausfinden.
Verweise
Kerberos
http://blogs.msdn.com/sql_protocols/archive/2005/10/12/479871.aspx
http://blogs.msdn.com/sql_protocols/archive/2006/12/02/understanding-kerberos-and-ntlm-authentication-in-sql-server-connections.aspx
http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/the-biggest-mistake-serviceprincipalname-s.aspx
Andere Erscheinungsformen des Problems
http://www.sqlservercentral.com/Forums/Topic460425-359-1.aspx
http://msdn2.microsoft.com/en-us/library/aa905162(sql.80).aspx
http://msdn2.microsoft.com/en-us/library/ms189580.aspx
Ich hoffe das alles hilft.
Sie können auch SQL Server Management Studio (SSMS) zum Verwalten \ Erstellen von Verbindungsservern verwenden, wenn Sie mit der GUI besser vertraut sind. Um dies zu tun:
Beachten Sie, dass dies voraussetzt, dass Benutzer mit Anmeldungen auf Server A auch Anmeldungen auf Server B haben.
quelle
Ich werde verrückt mit dem gleichen Problem! Ich erinnere mich, dass dies mit 2000 immer einfach war. Ich war schon in ganz Google und kann das nicht zum Laufen bringen. Genau das gleiche Setup, beide Server laufen auf einem Domänenkonto, Windows-Authentifizierung.
Ich versuche Named Pipes anstelle von TCP zu verwenden und bekomme zumindest einen anderen Fehler:
Dies hat möglicherweise etwas mit der Aktivierung von Namespipes zu tun, aber ich kann über sqlcmd eine Verbindung von Server A zu Server B herstellen, und zwar folgendermaßen:
Wenn ich keine Named Pipes verwendet habe und mache einfach:
Ich verstehe das:
[Bearbeiten] Ich habe eine Diskussion darüber in Sql Server Central gestartet. Grundsätzlich müssen Sie einige komplizierte Konfigurationsschritte im Zusammenhang mit der Kerberos-Delegierung ausführen, damit dies funktioniert.
http://www.sqlservercentral.com/Forums/Topic574262-146-1.aspx
Ich habe beschlossen, nur ein einziges, beschränktes SQL-Anmeldekonto zu erstellen, um die verknüpften Abfragen zu bearbeiten. Ich hasse es, darauf zurückzugreifen, aber es scheint sicherer zu sein als die Änderungen, die Sie vornehmen müssen, um es mit Windows Auth zum Laufen zu bringen.
quelle
Wenn Sie nach sp_addlinkedserver und sp_linkedservers suchen, erhalten Sie einige Beispiele. Es ist ziemlich einfach einzurichten.
quelle
Wenn Sie über SQL Manager verfügen, können Sie dies auch über die grafische Benutzeroberfläche hinzufügen.
Grundsätzlich müssen Sie die beiden Server entweder über die von Tim genannten SPs oder über die GUI verbinden und dann die Zugriffsregeln festlegen (was nicht einmal erforderlich ist, wenn Sie auf beiden Servern die Windows-Authentifizierung verwenden).
quelle
Ich weiß, dass dies einfach sein soll, aber es funktioniert überhaupt nicht für mich - ich habe hier Sicherheitsprobleme. Deshalb möchte ich, dass jemand die Schritte für mich formuliert.
Ich habe dies in der Vergangenheit mit SQL 2000 ohne Probleme gemacht.
quelle
Sie können sie also verknüpfen, aber aufgrund falscher Konten keine Abfrage ausführen?
Hat der Windows-Benutzer, den Sie verwenden möchten, Rechte zum Lesen von Daten auf beiden Servern?
Einmal hatte ich auch ein Problem, weil die Eigenschaft "Datenzugriff" aus einem unbekannten Grund auf "false" gesetzt war.
Probieren Sie auch aus, was passiert, wenn Sie explizit einen Benutzer für den Link auf einen anderen Benutzer setzen.
(Dies alles kann in SQL Manager durchgeführt werden.)
quelle
Tim hat die genauen Schritte veröffentlicht, von denen ich angenommen habe, dass sie die richtigen sind. Schritt 5 ist die Sicherheitsseite. Ich wähle "Mit dem aktuellen Sicherheitskontext des Logins erstellt werden".
Wenn ich auf OK klicke, wird folgende Fehlermeldung angezeigt. Ich weiß nicht, warum versucht wird, "NT Authority \ Anonymous Login" zu verwenden. Ich bin auf meiner Workstation mit meinem Domänenkonto angemeldet, das auf beiden Servern alle Rechte besitzt.
quelle
Versuchen Sie dies, während Sie lokal am Server angemeldet sind. Wenn Sie dies von einem Remotecomputer aus tun, senden Sie möglicherweise nicht die richtigen Anmeldeinformationen.
quelle