Setup von SQL Server zu SQL Server-Verbindungsserver


25

Bitte erläutern Sie, was zum Einrichten eines SQL Server-Verbindungsservers erforderlich ist.

Server A ist nur für SQL 2005-Windows-Anmeldungen gültig. Server B ist identisch (nur für SQL 2005-Windows-Anmeldungen).

Auf Server A wird Windows XP ausgeführt. Auf Server B wird Windows Server 2003 ausgeführt

Beide SQL Server-Dienste werden unter demselben Domänenkonto ausgeführt. Ich bin auf meiner Workstation mit einem Domänenkonto angemeldet, das auf beiden SQL-Servern über Administratorrechte verfügt.

Beachten Sie, dass dies beide SQL Server 2005 SP2 sind. Ich habe auf alte Hotfixes hingewiesen, aber diese sind bereits angewendet.

Das Problem, das ich habe, ist dieser Fehler: "Anmeldung für Benutzer" NT AUTHORITY \ ANONYMOUS LOGON "fehlgeschlagen. (Microsoft SQL Server, Fehler: 18456)"

Antworten:


18

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.


Gute Antwort! Dies fasst definitiv eine Menge an Informationen zusammen, die an anderen Stellen nicht sinnvoll organisiert sind.
ConstantineK

3

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:

  1. Starten Sie SSMS und stellen Sie eine Verbindung zu einer der Instanzen von SQL Server her, die Sie verknüpfen möchten
  2. Erweitern Sie "Serverobjekte" im Objekt-Explorer
  3. Rechtsklicke auf "Verbindungsserver" und wähle "Neuer Verbindungsserver"
  4. Wählen Sie im Dialogfeld "Neuer Verbindungsserver" "SQL Server" als Servertyp aus und geben Sie die Instanz von SQL Server ein, zu der Sie eine Verknüpfung herstellen möchten.
  5. Wählen Sie auf der Seite "Sicherheit" aus, wie Benutzer sich vom aktuellen Server beim Verbindungsserver authentifizieren. Sie haben erwähnt, dass beide Server für die Verwendung von Windows-Anmeldungen eingerichtet sind. Wenn dies der Fall ist, werden im Abschnitt "Für eine Anmeldung, die in der obigen Liste nicht definiert ist, Verbindungen hergestellt" wahrscheinlich die Option "Mit dem aktuellen Sicherheitskontext der Anmeldung hergestellt werden" ausgewählt .

Beachten Sie, dass dies voraussetzt, dass Benutzer mit Anmeldungen auf Server A auch Anmeldungen auf Server B haben.


1

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:

EXEC sp_addlinkedserver 
    @server='statler', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='np:statler', 
    @provstr='Integrated Security=SSPI'

-- Then I try this:
select net_transport, auth_scheme 
from statler.master.sys.dm_exec_connections 
where session_id=@@spid

/*

Getting closer, but still fails:

OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "Login timeout expired".
OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "An error has occurred while establishing a connection to the server. 
    When connecting to SQL Server 2005, this failure may be caused by the 
    fact that under the default settings SQL Server does not allow 
    remote connections.".
Msg 5, Level 16, State 1, Line 0
Named Pipes Provider: Could not open a connection to SQL Server [5]. 
OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "Invalid connection string attribute".

*/

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:

WALDORF:>  Sqlcmd.exe /E /Snp:statler

Wenn ich keine Named Pipes verwendet habe und mache einfach:

New Linked Server
Server Type: SqlServer
Security: be made using the current login's security context

Ich verstehe das:

Login failed for user NT AUTHORITY\ANONYMOUS LOGIN

[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.


Weiter unten finden Sie Informationen zum komplizierten Einrichten von Kerberos. Dieses Zeug hat mich für eine lange, lange Zeit getötet!
Evilhomer

0

Wenn Sie nach sp_addlinkedserver und sp_linkedservers suchen, erhalten Sie einige Beispiele. Es ist ziemlich einfach einzurichten.


0

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).


0

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.


0

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.)


0

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.

TITEL: Microsoft SQL Server Management Studio

"Der Verbindungsserver wurde erstellt, hat aber keinen Verbindungstest bestanden. Möchten Sie den Verbindungsserver behalten?"

------------------------------ ZUSÄTZLICHE INFORMATION:

Beim Ausführen einer Transact-SQL-Anweisung oder eines Stapels ist eine Ausnahme aufgetreten. (Microsoft.SqlServer.ConnectionInfo)


Anmeldung für Benutzer 'NT AUTHORITY \ ANONYMOUS LOGON' fehlgeschlagen. (Microsoft SQL Server, Fehler: 18456)

Hilfe erhalten Sie unter: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.3068&EvtSrc=MSSQLServer&EvtID=18456&LinkId=20476


0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.