web-dev-qa-db-fra.com

Connexion à SQL Server à l'aide de l'authentification PHP, ODBC et Windows

J'essaie d'utiliser PHP pour vous connecter à une source de données ODBC à l'aide de l'authentification Windows. Je peux très bien me connecter au serveur dans SQL Server afin que je sache qu'il fonctionne. Quand j'essaye de lancer la commande 

$link = odbc_connect("my_odbc","",""); 

Je reçois l'erreur:

"Avertissement: odbc_connect (): erreur SQL: 
[Microsoft] [Pilote ODBC 11 pour SQL Server] [SQL Server]
Échec de la connexion de l'utilisateur ''. Etat SQL 28000 dans SQLConnect dans C:\Users ... " 

J'ai essayé: 

$link = odbc_connect("Driver={ODBC Driver 11 for SQL Server};   
        Server='my_odbc';Integrated Security=SSPI","","");

Ce qui a renvoyé le message:

Avertissement: odbc_connect (): erreur SQL: 
[Microsoft] [Pilote ODBC 11 pour SQL Server]
Fournisseur de canaux nommés: Impossible d'ouvrir une connexion à SQL Server [53]. , État SQL 08001 dans SQLConnect dans C:\Users ... "

Pas sûr de ce que je fais mal. 

  • my_odbc est un serveur SQL Server (2008) situé sur une autre machine. Je n'ai pas de privilèges d'administrateur sur cette base de données, je ne peux donc rien y changer (par exemple, activer l'authentification SQL Server).

  • J'utilise Windows 7 et j'utilise PHP version 5.6.12

  • phpinfo() indique que la prise en charge ODBC est activée ainsi que la prise en charge de pdo_sqlsrv

10
Compysaurus

Vous devriez peut-être essayer PDO (la différence de performances n’est pas terrible) avec le plugin SQLsrv (c’est ce que j’utilise pour me connecter au logiciel de mon autre patron qui utilise la base de données SQL Server 2008):

$connection = new PDO("sqlsrv:Server=" . $this->sourceServer . ";Database=" . $this->sourceDB, $this->sourceUser, $this->sourcePW);
$connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Vous pouvez télécharger le plugin ici

https://www.Microsoft.com/en-ca/download/details.aspx?id=36434

Sous Xampp, vous devez copier la dll dans ce dossier:

C:\xampp\php\ext

Et vous devez ajouter cette ligne à votre php.ini

extension = php_pdo_sqlsrv_56_ts.dll

Note: N'oubliez pas de redémarrer votre serveur pour qu'il puisse prendre en compte le nouveau fichier php.ini.

Dites-moi si cela marche pour vous

Quelqu'un avait le même message d'erreur et a demandé et répondu à sa propre question ici .

Citer...

Je suis désolé pour les ennuis.

Le problème était que j'utilisais SQL Server Native Client 11.0 comme pilote. Je suis passé à SQL Server et maintenant ça marche:/

Espérons que cela aide au moins quelqu'un, étant dans un problème similaire ....

2
ourmandave

Une omission importante de votre question concerne la manière dont vous exécutez PHP et avec quels identifiants.

En supposant que vous utilisez IIS ou Apache (ou un autre serveur Web), votre processus PHP s'exécute probablement sous le compte système local:

 IIS service properties  Apache service properties

Comme ce compte est local, il n’est pas autorisé à accéder à votre remote SQL Server.

Vous pouvez modifier le service IIS/Apache pour qu'il fonctionne avec les informations d'identification (les vôtres?) Autorisées à se connecter à SQL Server, mais sachez que cela pourrait entraîner d'autres problèmes d'autorisations avec le service, ainsi qu'un problème si vous modifiez votre mot de passe dans l'avenir.

Essayez d’exécuter un script de test à partir de la ligne de commande (qui devrait s’exécuter avec vos informations d’identification par défaut) pour déterminer l’origine du problème:

php -r "var_dump(odbc_connect(...));"
2
timclutton

Cette erreur est une erreur générale due à l'impossibilité d'établir une connexion au serveur pour certaines raisons. Il est important de savoir quel serveur utilisez-vous avec PHP et avec l'application utilisée. Exemple Apache, Xampp ou Wamp etc.

Voici quelques choses que vous pourriez essayer. 

Laissez-moi bref, ci-dessous sont les liens de référence.

  • Vérifiez si ça pings 
  • Activer la connexion TCP/IP Configuration du serveur SQL si non activé. Pour ce faire, ouvrez SQL Server Configuration Manager -> SQL Server Network Configuration->Protocols for SQL server->TCP/IP(set to enabled). Redémarrez les services SQL.
  • Activer la connexion à distance depuis le serveur
  • Ouvrez le port, pour ce faire Windows Firewall Settings-> Exceptions -> add a Port (Name:SQL;Port:1433;TCP) then from Exceptions tick SQL et enregistrez.
  • Activer les services de navigateur en cours .SQL Server Configuration Manager -> SQL Server Services - > SQL Server Browser défini sur en cours d'exécution.
  • définition du port dans la chaîne de connexion
  • ajouter un nom d'instance avec un nom d'ordinateur si plusieurs instances sont utilisées

échantillon

$user = 'username';
$pass = 'password';
//Use the machine name and instance if multiple instances are used
$server = 'serverName\instanceName';
//Define Port
$port='Port=1433';
$database = 'database';

$connection_string = "DRIVER={ODBC Driver 11 for SQL Server};SERVER=$server;$port;DATABASE=$database";
$conn = odbc_connect($connection_string,$user,$pass);

voici des liens utiles que j'ai trouvés concernant la question

la résolution n'a pas pu ouvrir une connexion à SQL server-errors

fournisseur de serveur SQL nommé erreur de fournisseur de canaux

Regardez aussi ces liens

Fournisseur de canaux nommés: Impossible d'ouvrir une connexion à SQL Server [53]

1
aimme

Regardez le regedit HKLM/SOFTWARE/ODBC

quel est votre nom de dossier?

S'il existe un "SQL Server Native Client 11.0", vous devez écrire votre code php comme 

odbc_connect("Driver={SQL Server Native Client 11.0};Server=ip;Database=db;", "user", "pass");

Cependant, certains serveurs comme le serveur 2008 enregistrent cet odbc comme 

ODBC Driver 11 for SQL Server

Ensuite, vous devez remplacer SQL Server Native Client 11.0 par le pilote ODBC 11 pour SQL Server.

0