Connexion au serveur SQL en utilisant L'authentification PHP, ODBC et Windows

j'essaie D'utiliser PHP pour me connecter à une source de données ODBC en utilisant L'authentification Windows. Je peux très bien me connecter au serveur de SQL Server donc je sais qu'il est en cours d'exécution. Lorsque j'essaie d'exécuter la commande

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

j'obtiens l'erreur:

"Warning: odbc_connect(): erreur SQL:

[Microsoft] [ODBC Driver 11 for SQL Server] [SQL Server]

échec de la connexion pour l'utilisateur"., État SQL 28000 en SQLConnect en C:Users..."

j'ai essayé:

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

Qui a retourné le message:

Avertissement: odbc_connect(): erreur SQL:

[Microsoft][Pilote ODBC 11 pour SQL Server]

fournisseur de Pipes nommé: impossible d'ouvrir une connexion au serveur SQL [53]. , État SQL 08001 en SQLConnect en C:Users..."

Je ne suis pas sûr de ce que je fais mal.

  • my_odbc est un serveur SQL (2008) sur un autre machine. Je n'ai pas de privilèges admin sur cette base de données, donc je ne peux rien y changer (comme activer L'authentification SQL Server).

  • j'exécute Windows 7 et j'utilise PHP Version 5.6.12

  • phpinfo() indique que le Support ODBC est activé aussi bien que pdo_sqlsrv soutien

10
demandé sur Compysaurus 2015-08-18 00:29:45

6 réponses

peut-être que vous devriez essayer PDO (la différence de performance n'est pas si grande) avec le plugin SQLsrv (c'est ce que j'utilise pour me connecter au logiciel de mon autre boss 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

Dans Xampp, vous devez copier la dll dans le dossier:

C:\xampp\php\ext

Et vous devez ajouter cette ligne à votre php.ini

extension = php_pdo_sqlsrv_56_ts.dll

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

Laissez-moi savoir si cela fonctionne pour vous

3
répondu Jonathan Parent Lévesque 2015-08-26 14:51:48

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

Pour citer...

je suis désolé pour les ennuis.

le problème était que J'utilisais SQL Server natif Client 11.0 comme pilote. Je l'ai commuté sur SQL Server et maintenant il fonctionne:/

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

2
répondu ourmandave 2017-05-23 12:01:52

une omission importante de votre question Est de savoir comment vous utilisez PHP et avec quels justificatifs d'identité.

en supposant que vous utilisez IIS ou Apache( ou un autre serveur web), alors votre processus PHP tourne probablement sous le compte système local:

IIS service properties Apache service properties

puisque ce compte est il n'a pas l'autorisation d'accéder à votre distance SQL Serveur.

Vous pouvez modifier le service IIS/Apache pour exécuter avec les justificatifs d'identité (le vôtre?) qui sont autorisés à se connecter au serveur SQL, mais soyez conscient que cela pourrait causer d'autres problèmes de permissions avec le service ainsi que d'être un problème si vous changez votre mot de passe dans le futur.

essayez d'exécuter un script de test à partir de la ligne de commande (qui devrait s'exécuter avec vos identifiants par défaut) pour déterminer où le problème est:

php -r "var_dump(odbc_connect(...));"
2
répondu timclutton 2015-08-27 08:49:38

cette erreur est une erreur générale qui résulte de l'impossibilité de se connecter au serveur pour certaines raisons. Il est important de savoir quel serveur vous utilisez avec PHP et l'application utilisée avec elle. Exemple Apache, Xampp ou Wamp etc.

voici quelque chose que vous pourriez essayer.

permettez-moi de résumer, ci-dessous sont les liens de référence.

  • Vérifier si il envoie un ping
  • activer la Configuration du serveur SQL de connexion TCP/IP si elle n'est pas activée. 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 à partir du serveur
  • Ouvrir le Port, De le faire Windows Firewall Settings-> Exceptions -> add a Port (Name:SQL;Port:1433;TCP) then from Exceptions tick SQL et enregistrer.
  • Activer l'exécution des services de navigateur.SQL Server Configuration Manager -> SQL Server Services - > SQL Server Browser prêt à courir.
  • définition du Port dans la chaîne de connexion
  • ajouter le nom de l'instance avec le nom de la machine si plus d'une instance est utilisé

exemple

$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é concernant la question

résolution impossible d'ouvrir une connexion à sql server-les erreurs

fournisseur sql server nommée fournisseur de canaux d'erreur

consultez aussi ces liens

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

1
répondu aimme 2017-05-23 12:33:53

Look at the regedit HKLM/SOFTWARE/ODBC

quel est le nom de votre dossier ?

S'il y a un "client natif SQL Server 11.0" alors vous devez écrire votre code php comme

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

cependant, certains des serveurs comme server 2008 enregistreront cette odbc comme

ODBC Driver 11 for SQL Server

alors vous devez remplacer SQL Server Native Client 11.0 par ODBC Driver 11 pour SQL Server.

0
répondu Emre Karataşoğlu 2015-11-04 11:34:16

Enable in IIS on Manager PHP o PDO_ODBC:

j'ai authentifié par Windows avec la déclaration PHP suivante:

$ Conn = new PDO ("odbc: Driver = {SQL Server}; Server = JAMILI-PC \ SQLEXPRESS; null; null");

J'utilise Windows 2008.

j'espère que ça résoudra votre problème.

-1
répondu Luis D 2017-01-16 20:01:53