Comment faire fonctionner cette connexion ODBC SQL Server?

30

Remarque: j'ai évidemment changé les noms de serveur et les adresses IP en noms fictifs.

Voici ce qui se passe. J'ai un serveur, que j'appelle MYSERVER, exécutant Microsoft SQL Server Express 2005. Sur ce serveur lui-même, j'ai une connexion ODBC configurée pointant sur lui-même, et qui fonctionne déjà parfaitement. Je me connecte à l'aide de l'authentification SQL Server (et non de l'authentification Windows), et il est configuré comme ceci:

Image d'une bonne connexion ODBC

Comme je l'ai dit, celui-là fonctionne. Mais ensuite, j'ai un autre ordinateur qui est sur un domaine totalement différent / pas sur l'intranet, qui doit accéder à ce même SQL Server hébergé sur MYSERVER. Parce que c'est sur un domaine différent, il ne reconnaît pas le nom "MYSERVER"; Je dois le pointer vers l'adresse IP de MYSERVER, qui sera, disons, 123.456.789.012. Mais la connexion ODBC ne semble pas fonctionner là-bas. J'ai essayé de le configurer comme ceci:

Image d'une mauvaise connexion ODBC

Ça ne marche pas. Lorsque je mets le nom d'utilisateur et le mot de passe et que j'appuie sur Suivant, il se bloque pendant 10 à 20 secondes, puis revient finalement avec l'erreur suivante:

Connection failed:
SQLState: '01000'
SQL Server Error: 1326
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).
Connection failed:
SQLState: '08001'
SQL Server Error: 17
[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.

Si j'essaie la même chose, mais que je change le "serveur" de 123.456.789.012\SQLEXPRESStout simplement ancien 123.456.789.012, j'obtiens une erreur différente:

Connection failed:
SQLState: '01000'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Invalid Instance()).
Connection failed:
SQLState: '08001'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]Invalid connection.

Maintenant je sais à quoi tu penses. Vous pensez peut-être, "duh, vous n'avez probablement pas ouvert le pare-feu pour le port 1433, factice." Sauf que je l'ai fait, et je l'ai vérifié, car je peux exécuter avec succès :

telnet 123.456.789.012 1433

... à partir de la ligne de commande tout ce que je veux. Je ne sais donc pas quoi faire. Je sais que SQL Server existe, fonctionne et qu'une connexion ODBC peut être configurée correctement; Je ne suis tout simplement pas sûr de ce que je me suis trompé dans mes paramètres de connexion qui génère ces erreurs. Sur la base de la dernière erreur que j'ai répertoriée, il semblerait qu'il puisse se connecter au serveur, mais ne peut tout simplement pas trouver l'instance (car je n'en ai pas spécifié une à ce moment-là). Cela signifie-t-il que j'ai juste besoin d'utiliser une syntaxe différente pour spécifier l'IP avec un nom d'instance? Que fais-je? Merci d'avance.

soapergem
la source

Réponses:

18

Les canaux nommés et les protocoles TCIP pour SQL Server 2005 sont désactivés par défaut. Les avez-vous activés sous "Gestionnaire de configuration du serveur SQL"? Vous pouvez trouver les protocoles dans la configuration du réseau SQL Server et sous la configuration xx du client SQL Native.

La connexion sur le serveur lui-même fonctionne grâce au protocole "Mémoire partagée".

Hakan Winther
la source
9
J'accepte votre réponse parce qu'elle m'a mis sur la bonne voie. Sous SQL Server Configuration Manager, TCP / IP était déjà activé sous "SQL Server 2005 Network Configuration> Protocols for SQLEXPRESS" et "SQL Native Client Configuration> Client Protocols". Named Pipes était déjà activé dans ce dernier. Je l'ai activé dans le premier, mais cela n'a pas semblé aider (mêmes messages d'erreur). Enfin, j'ai changé la source ODBC pour utiliser le pilote "SQL Native Client" au lieu du pilote "SQL Server", et cela a finalement fonctionné.
soapergem
Merci SoaperGEM! Je n'aurais jamais pensé avoir essayé SQL Native Client! A fonctionné comme un charme!
Phillip Senn
5

Avez-vous activé le service SQL Server Browser selon Comment configurer SQL Server 2005 pour autoriser les connexions à distance ?:

Si vous exécutez SQL Server 2005 à l'aide d'un nom d'instance et que vous n'utilisez pas de numéro de port TCP / IP spécifique dans votre chaîne de connexion, vous devez activer le service SQL Server Browser pour autoriser les connexions à distance. Par exemple, SQL Server 2005 Express est installé avec un nom d'instance par défaut Computer Name \ SQLEXPRESS.

Sim
la source
La connexion au serveur \ instance sur le local utilise-t-elle un mécanisme différent de celui à distance ??
Sam
@Sam voir la réponse de Hakan Winther.
Sim
4

Ce fil a corrigé le même message d'erreur pour moi lorsque j'utilise Access pour me connecter à un serveur MSSQL 2008. MSSQL 2005 et versions antérieures ont bien fonctionné en utilisant simplement le nom de l'ordinateur dans la chaîne de connexion, mais j'ai dû passer à la chaîne de connexion dans Access au formulaire complet lorsque l'instance a été mise à niveau vers 2008:

servername\instancename,portnumber

Mufasa
la source
2
Cela l'a fait pour moi, sauf que je n'avais pas besoin du numéro de port.
bgmCoder
2

J'ai eu ce même problème et j'ai réussi à le résoudre en changeant également le pilote SQL en pilote SQL Native Client. C'était bizarre, car dans mon cas, cela fonctionnait bien depuis des années, puis cessait de fonctionner. Je soupçonne que c'est quelque chose dans le sens où le pilote est corrompu, peut-être qu'une réinstallation de MDAC pourrait aider, mais pour le moment, je suis heureux que cela fonctionne du tout!


la source
1

Reconnaîtrait-il le nom du serveur s'il était pleinement qualifié? Si c'était MYSERVER.domain.com? Nous avons dû le faire avec SQL Server lors de la connexion à partir d'un autre domaine. Si vous pouvez obtenir la connexion DSN du système ODBC lorsque vous testez la source de données, vous progressez. S'il ne se connecte pas dans la configuration ODBC, vous devez d'abord le corriger.

thursdaysgeek
la source
C'est exactement ce que j'essaie de faire - pour que le DSN du système ODBC se connecte en premier lieu lorsque je teste la source de données. J'ai donc essayé votre suggestion, en essayant les deux MYSERVER.domain.com\SQLEXPRESSet MYSERVER.domain.com, mais ces deux m'ont donné les mêmes erreurs que celles que j'ai énumérées ci-dessus, respectivement.
soapergem
À une invite de commandes sur l'autre ordinateur, tapez "nslookup MYSERVER.domain.com" - cela résout-il la bonne adresse IP (123.456.789.012) ou pas du tout?
Sim
@Sim - Oui, cette commande ne résolution correctement.
soapergem
1

Utilisez-vous des canaux nommés ou TCP sur la connexion ODBC qui fonctionne? TCP est-il activé?

aNullValue
la source
1

Assurez-vous que les connexions TCP à distance sont activées pour le serveur SQL.

Sam
la source
0

Juste un tir sauvage ici, mais que se passe-t-il si vous mettez une double barre oblique inverse avant le nom du serveur ou l'adresse IP? Il me semble que c'est normalement requis pour la plupart des autres connexions Windows / Microsoft.

John Gardeniers
la source
Essayer la double barre oblique inverse entraîne la même erreur 1326 (la première que j'ai répertoriée).
soapergem
0

J'ai eu un problème similaire. Dans mon cas, un autre sw configure le paramètre ODBC donc je ne peux pas changer le pilote. J'ai résolu mon cas comme ceci:

  1. Définissez les paramètres TCP / IP pour que le serveur utilise le port 1433
  2. Sur le client, entrez l'adresse du serveur comme: 192.168.1.5,1433 (pas de nom d'instance)

Puis cela a commencé à fonctionner. Système d'exploitation client: pilote Win7 x64: sqlsrv32.dll

Mert Gülsoy
la source
0

Pour ce que ça vaut, j'ai commencé à obtenir cette erreur sur une connexion qui fonctionnait auparavant. Il s'est avéré que le service MSSQL $ SQLEXPRESS s'était en quelque sorte arrêté. Le redémarrer a résolu le problème.

dsteele
la source
0

J'ai également eu ce problème, et c'était aussi simple que cela: le serveur répertorié comme serveur DNS principal pour ce serveur a été supprimé, et l'application n'a plus été en mesure de résoudre correctement le nom du serveur SQL sur le réseau. Tout a immédiatement recommencé à fonctionner lorsque j'ai corrigé le serveur DNS local pour qu'il fonctionne.

yourcomputergenius
la source