Frage SQL Server zu SQL Server Server-Verbindungsserver-Setup


Erläutern Sie, was erforderlich ist, um einen SQL Server-Verbindungsserver einzurichten.

Server A ist nur SQL 2005-Windows-Logins Server B ist identisch (nur SQL 2005-Windows-Logins)

Server A führt Windows XP aus Server B führt Windows Server 2003 aus

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

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

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


25
2017-08-28 19:13


Ursprung




Antworten:


Von meinem Verständnis dieses Problems handelt es sich um ein "HOP" -Problem.

Sie versuchen, 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 das Problem erschweren. Die Wörter "Kerberos Authentication" werden zum Bain der meisten sys-admins / DBAs Leben. Es wird effektiv für die Pass-Through-Authentifizierung verwendet.

Hier sind die Grundlagen von dem, was Sie brauchen. 1) Die Server (A und B) müssen in Active Directory (AD) mit Delegierung für Kerberos aktiviert werden. (Dies wird über Ihr Active Directory Admin Panel 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-Verwaltungsfenster festgelegt).  - Wenn sie nicht unter einem Dienstkonto ausgeführt werden, müssen Sie eines erstellen.

3) Auf den Servern müssen SPNs für die Instanz und den Host und den Computernamen definiert sein. (Verwenden eines Tools namens SetSPN in den Windows-Supporttools)

Support Tools (SetSPN ist in diesem Set) http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=en

(Überblick zum Hinzufügen eines SPN) http://technet.microsoft.com/en-us/library/bb735885.aspx

4) Möglicherweise müssen Sie Ihre DB auf "vertrauenswürdig" setzen

ALTER DATABASE SET vertrauenswürdig auf

5) Nachdem Sie dies getan haben, starten Sie Ihre Instanzen neu.

6) Versuchen Sie dann, den Verbindungsserver erneut zu erstellen.

Abschließend 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

Dies wird Ihnen den Verbindungsauthentifizierungstyp mitteilen.

select auth_scheme from sys.dm_exec_connections where session_id=@@SPID

Du willst 'KERBEROS' hier und nicht 'NTLM' bekommen.

Es ist eine rutschige Piste, KERBEROS und Pass-Through-Delegation, bleiben Sie dabei und Sie werden es schließlich 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 Manifestationen 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 hilft alles.


18
2017-10-07 14:25



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


Sie können auch SQL Server Management Studio (SSMS) zum Verwalten von Verbindungsservern verwenden, wenn Sie mit der GUI vertrauter 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 "Server-Objekte" im Objekt-Explorer
  3. Klicken Sie mit der rechten Maustaste auf "Linked Servers" und wählen Sie "New Linked Server"
  4. Wählen Sie im Dialogfeld "Neuer verknüpfter Server" als Servertyp "SQL Server" aus, und geben Sie die Instanz von SQL Server ein, mit der Sie eine Verknüpfung herstellen möchten.
  5. Wählen Sie auf der Seite "Sicherheit" aus, wie sich Benutzer vom aktuellen Server beim Verbindungsserver authentifizieren. Sie haben erwähnt, dass beide Server für die Verwendung von Windows-Logins eingerichtet sind. Wenn dies der Fall ist, unter dem Abschnitt mit der Bezeichnung "Für eine Anmeldung, die nicht in der obigen Liste definiert ist, werden Verbindungen:" Ich würde wahrscheinlich die Option mit der Bezeichnung wählen "Wird mit dem aktuellen Sicherheitskontext des Login erstellt".

Beachten Sie, dass davon ausgegangen wird, dass Benutzer, die sich auf Server A anmelden, auch auf Server B angemeldet sind.


3
2017-08-28 19:36





Ich bin verrückt mit dem gleichen Problem! Ich erinnere mich, dass ich das mit 2000 immer leicht gemacht habe. Ich war über Google und ich kann das nicht zur Arbeit bringen. Genau dasselbe Setup, beide Server laufen auf einem Domänenkonto, Windows Auth.

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 könnte etwas mit dem Aktivieren von Namens-Pipes zu tun haben, aber ich kann mich folgendermaßen mit sqlcmd von Server A zu Server B verbinden:

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

Wenn ich keine Named Pipes verwende und einfach folgendes mache:

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 über Sql Server Central darüber begonnen. Im Grunde müssen Sie einige komplizierte Konfiguration in Bezug auf Kerberos-Delegation zu tun, um dies zu arbeiten.

http://www.sqlservercentral.com/Forums/Topic574262-146-1.aspx

Ich beschloss, nur ein einziges, begrenztes SQL Login-Konto 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, damit es mit Windows Auth funktioniert.


1
2017-09-23 13:36



Siehe unten für komplizierte Kerberos-Einstellungen. Dieses Zeug hat mich für eine lange, lange Zeit getötet! - evilhomer


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


0
2017-08-28 19:16





Auch wenn Sie SQL Manager haben, können Sie mit seiner GUI 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 bei Windows-Authentifizierung auf beiden Servern nicht einmal benötigt wird).


0
2017-08-28 19:19





Ich weiß, das sollte einfach sein, aber es funktioniert überhaupt nicht für mich - ich habe hier Sicherheitsprobleme. Also möchte ich, dass jemand die Schritte für mich buchstabiert.

Ich habe dies in der Vergangenheit auf SQL 2000 ohne Probleme getan.


0
2017-08-28 19:33





Sie können sie also verknüpfen, aber wegen falscher Konten keine Abfrage ausführen?

Hat der Windows-Benutzer, den Sie zu verwenden versuchen, die Rechte, Daten auf beiden Servern zu lesen?

Einmal hatte ich auch ein Problem, weil die Eigenschaft "Datenzugriff" aus einem unbekannten Grund auf falsch gesetzt wurde.

Probieren Sie auch aus, was passiert, wenn Sie einen Benutzer explizit auf einen anderen Benutzer für den Link festlegen.

(Dies alles kann im SQL Manager durchgeführt werden.)


0
2017-08-28 19:40





Tim hat die genauen Schritte gepostet, die ich für richtig gehalten hatte. Schritt 5 ist die Sicherheitsseite. Ich wähle "Mit dem aktuellen Sicherheitskontext des Logins gemacht werden".

Wenn ich ok klicke, erhalte ich den folgenden Fehler. Ich weiß nicht, warum es versucht, "NT-Autorität \ Anonymous Login" zu verwenden. Ich bin bei meiner Arbeitsstation mit meinem Domänenkonto angemeldet, das auf beiden Servern über alle Rechte verfügt.

TITEL: Microsoft SQL Server Management Studio

"Der Verbindungsserver wurde erstellt   aber ein Verbindungstest ist fehlgeschlagen. Machst du   Möchten Sie den Verbindungsserver behalten? "

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

Während der Ausführung ist eine Ausnahme aufgetreten   eine Transact-SQL-Anweisung oder einen Batch.   (Microsoft.SqlServer.ConnectionInfo)


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

Klicken Sie für Hilfe auf:    http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.3068&EvtSrc=MSSQLServer&EvtID=18456&LinkId=20476


0
2017-08-29 14:57





Versuchen Sie dies, während Sie lokal auf dem Server angemeldet sind. Wenn Sie dies von einem Remote-Computer aus tun, senden Sie möglicherweise nicht die richtigen Anmeldeinformationen.


0
2017-11-04 22:39