Configuration du serveur lié SQL Server vers SQL Server


25

Veuillez expliquer ce qui est requis pour configurer un serveur lié SQL Server.

Le serveur A est uniquement les connexions Windows SQL 2005 Le serveur B est le même (connexions Windows SQL 2005 uniquement)

Le serveur A exécute Windows XP Le serveur B exécute Windows Server 2003

Les deux services SQL Server s'exécutent sous le même compte de domaine. Je suis connecté à mon poste de travail avec un compte de domaine disposant de droits administratifs sur les deux serveurs SQL.

Notez que ce sont tous les deux SQL Server 2005 SP2 - des correctifs m'ont été signalés, mais ils sont déjà appliqués.

Le problème que je rencontre est cette erreur: «Échec de la connexion pour l'utilisateur« NT AUTHORITY \ ANONYMOUS LOGON ». (Microsoft SQL Server, erreur: 18456)»

Réponses:


18

D'après ma compréhension de ce problème, c'est un problème "HOP".

c'est-à-dire que vous essayez d'utiliser le serveur A pour relayer vos informations de connexion (avec SSPI) au serveur B.

Dans SQL Server 2005, ils ont ajouté toute une série de problèmes de sécurité qui rendent cela plus difficile qu'il ne devrait l'être. Les mots «Kerberos Authentication» deviendront le bain de la vie de la plupart des administrateurs système / DBA. Il est effectivement utilisé pour l'authentification unique.

Voici les bases de ce dont vous avez besoin. 1) Les serveurs (A et B) doivent être configurés dans Active Directory (AD) avec la délégation pour Kerberos activée. (ceci est défini via votre panneau d'administration Active Directory)

2) Le compte de service sous lequel vos serveurs SQL s'exécutent doit également avoir la délégation activée (cela est également défini via votre panneau d'administration Active Directory). - s'ils ne fonctionnent pas sous un compte de service, vous devez en créer un.

3) Les serveurs doivent avoir des SPN définis pour l'instance et l'hôte et le nom de la machine. (Utilisation d'un outil appelé SetSPN dans les outils de support de Windows)

Outils de support (SetSPN est dans cet ensemble) http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=en

(Présentation de l'ajout d'un SPN) http://technet.microsoft.com/en-us/library/bb735885.aspx

4) Vous devrez peut-être définir votre base de données sur "digne de confiance"

ALTER DATABASE SET digne de confiance le

5) Une fois tout cela terminé, redémarrez vos instances.

6) Essayez à nouveau de créer votre serveur lié.

Enfin, vous pouvez tester votre connexion à SQL Server. Cela devrait fonctionner correctement si vous avez tout configuré correctement.

SELECT *
FROM OPENDATASOURCE('SQLNCLI',
    'Data Source=ServerB;Integrated Security=SSPI;'
    ).MASTER.dbo.syscolumns

Cela vous indiquera votre type d'authentification de connexion.

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

Vous voulez obtenir «KERBEROS» ici et non «NTLM».

C'est une pente glissante, KERBEROS et délégation de passage, respectez-la et vous finirez par le comprendre.

Références 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

Autres manifestations du problème 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

J'espère que tout cela aide.


Très bonne réponse! Cela résume définitivement une charge d'informations qui n'est pas utilement organisée dans d'autres endroits.
ConstantineK

3

Vous pouvez également utiliser SQL Server Management Studio (SSMS) pour gérer \ créer des serveurs liés également si vous êtes plus à l'aise avec l'interface graphique. Faire cela:

  1. Lancez SSMS et connectez-vous à l'une des instances de SQL Server que vous souhaitez lier
  2. Développez "Objets serveur" dans l'Explorateur d'objets
  3. Faites un clic droit sur "Serveurs liés" et choisissez "Nouveau serveur lié"
  4. Dans la boîte de dialogue "Nouveau serveur lié", sélectionnez "SQL Server" comme type de serveur et entrez l'instance de SQL Server à laquelle vous souhaitez établir un lien.
  5. Sur la page "Sécurité", sélectionnez comment les utilisateurs s'authentifieront du serveur actuel vers le serveur lié. Vous avez mentionné que les deux serveurs sont configurés pour utiliser les connexions Windows. Si tel est le cas, dans la section intitulée "Pour une connexion non définie dans la liste ci-dessus, les connexions seront:" Je choisirais probablement l'option intitulée "Se faire en utilisant le contexte de sécurité actuel de la connexion" .

Notez que cela suppose que les utilisateurs qui ont des connexions sur le serveur A ont également des connexions sur le serveur B.


1

Je deviens fou avec le même problème! Je me souviens que faire ça avec 2000 était toujours facile. J'ai été sur Google et je n'arrive pas à faire fonctionner cela. Exactement la même configuration, les deux serveurs fonctionnant sur un compte de domaine, Windows authentification.

J'essaie d'utiliser des canaux nommés au lieu de TCP et au moins j'obtiens une erreur différente:

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

*/

Cela pourrait avoir quelque chose à voir avec l'activation des canaux de noms, mais je peux me connecter via sqlcmd du serveur A au serveur B comme ceci:

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

Si je n'utilise pas de canaux nommés, je fais juste:

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

J'ai compris:

Login failed for user NT AUTHORITY\ANONYMOUS LOGIN

[Modifier] J'ai commencé une discussion sur Sql Server Central à ce sujet. Fondamentalement, vous devez effectuer une configuration compliquée liée à la délégation Kerberos pour que cela fonctionne.

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

J'ai décidé de créer un seul compte de connexion SQL limité pour gérer les requêtes liées. Je déteste y avoir recours, mais cela semble plus sûr que les modifications que vous devez apporter pour le faire fonctionner avec Windows Auth.


Voir ci-dessous pour une configuration Kerberos compliquée. Ce truc m'a tué pendant très, très longtemps!
evilhomer

0

Si vous effectuez une recherche sur sp_addlinkedserver et sp_linkedservers, vous obtenez quelques exemples. Il est assez simple à configurer.


0

De plus, si vous avez SQL Manager, vous pouvez ajouter avec son interface graphique.

Fondamentalement, vous devez lier les deux serveurs soit par les SP mentionnés par Tim, soit via l'interface graphique, puis définir les règles d'accès (ce qui n'est même pas nécessaire si vous utilisez l'authentification Windows sur les deux serveurs).


0

Je sais que c'est censé être facile, mais cela ne fonctionne pas du tout pour moi - j'ai des problèmes de sécurité ici. Je voudrais donc que quelqu'un m'explique les étapes.

J'ai fait cela dans le passé sur SQL 2000 sans aucun problème.


0

Vous pouvez donc les lier, mais ne pouvez pas exécuter une requête en raison de mauvais comptes?

L'utilisateur Windows que vous essayez d'utiliser a-t-il le droit de lire les données sur les deux serveurs?

Une fois, j'ai également eu un problème car la propriété "accès aux données" était définie sur false pour une raison inconnue.

Essayez également ce qui se passe si vous définissez explicitement un utilisateur sur un autre utilisateur pour le lien.

(Tout cela peut être fait dans SQL Manager.)


0

Tim a affiché les étapes exactes que j'avais supposées être les bonnes. L'étape 5 est la page de sécurité. Je sélectionne "Être créé en utilisant le contexte de sécurité actuel de la connexion".

Lorsque je clique sur OK, j'obtiens l'erreur suivante. Je ne sais pas pourquoi il essaie d'utiliser 'Autorité NT \ Connexion anonyme'. Je suis connecté à mon poste de travail avec mon compte de domaine qui a tous les droits sur les deux serveurs.

TITRE: Microsoft SQL Server Management Studio

"Le serveur lié a été créé mais a échoué à un test de connexion. Voulez-vous conserver le serveur lié?"

------------------------------ INFORMATION ADDITIONNELLE:

Une exception s'est produite lors de l'exécution d'une instruction ou d'un lot Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)


La connexion a échoué pour l'utilisateur «NT AUTHORITY \ ANONYMOUS LOGON». (Microsoft SQL Server, erreur: 18456)

Pour obtenir de l'aide, cliquez sur: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.3068&EvtSrc=MSSQLServer&EvtID=18456&LinkId=20476


0

Essayez de le faire pendant que vous êtes connecté localement au serveur, si vous le faites à partir d'une machine distante, vous risquez de ne pas envoyer les informations d'identification appropriées.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.