wake-up-neo.com

Herstellen einer Verbindung zu SQL Server mithilfe der Authentifizierung von PHP, ODBC und Windows

Ich versuche mit PHP eine Verbindung zu einer ODBC -Datenquelle herzustellen, die Windows-Authentifizierung verwendet. Ich kann eine Verbindung zum Server in SQL Server herstellen, also weiß ich, dass es läuft. Wenn ich versuche, den Befehl auszuführen 

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

Ich bekomme den Fehler:

"Warnung: odbc_connect (): SQL-Fehler: 
[Microsoft] [ODBC-Treiber 11 für SQL Server] [SQL Server]
Anmeldung für Benutzer '' fehlgeschlagen. SQL-Status 28000 in SQLConnect in C:\Users ... " 

Ich habe es versucht: 

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

Welche die Nachricht zurückgegeben hat:

Warnung: odbc_connect (): SQL-Fehler: 
[Microsoft] [ODBC-Treiber 11 für SQL Server]
Named Pipes Provider: Verbindung zu SQL Server konnte nicht hergestellt werden [53]. , SQL-Status 08001 in SQLConnect in C:\Users ... "

Nicht sicher, was ich falsch mache. 

  • my_odbc ist ein SQL Server (2008) auf einem anderen Computer. Ich habe keine Administratorrechte für diese Datenbank, daher kann ich an diesem Zweck nichts ändern (z. B. die SQL Server-Authentifizierung aktivieren).

  • Ich verwende Windows 7 und verwende PHP Version 5.6.12

  • phpinfo() zeigt an, dass die Unterstützung von ODBC und pdo_sqlsrv aktiviert ist

10
Compysaurus

Vielleicht sollten Sie PDO (der Leistungsunterschied ist nicht so groß) mit dem SQLsrv-Plugin (dies ist das, was ich verwende, um eine Verbindung zu der Software meines anderen Chefs herzustellen, die die SQL Server 2008-Datenbank verwendet):

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

Sie können das Plugin hier herunterladen

https://www.Microsoft.com/de/de/download/details.aspx?id=36434

In Xampp müssen Sie die DLL in diesem Ordner kopieren:

C:\xampp\php\ext

Und Sie müssen diese Zeile zu Ihrer php.ini hinzufügen

extension = php_pdo_sqlsrv_56_ts.dll

Note: Vergessen Sie nicht, Ihren Server neu zu starten, damit die neue php.ini-Datei berücksichtigt werden kann.

Lassen Sie mich wissen, ob es für Sie funktioniert

Jemand hatte die gleiche Fehlermeldung und fragte und beantwortete seine eigene Frage hier .

Zitieren...

Es tut mir leid für die Probleme.

Das Problem war, dass ich SQL Server Native Client 11.0 als Treiber verwendete. Ich habe es auf SQL Server umgestellt und jetzt funktioniert es:/

Hoffentlich hilft das wenigstens jemandem, der in einem ähnlichen Problem ist ...

2
ourmandave

Eine wesentliche Lücke in Ihrer Frage ist, wie Sie PHP ausführen und mit welchen Anmeldeinformationen.

Angenommen, Sie verwenden IIS oder Apache (oder einen anderen Webserver), dann wird Ihr Prozess PHP wahrscheinlich unter dem lokalen Systemkonto ausgeführt:

 IIS service properties  Apache service properties

Da dieses Konto local ist, hat es keine Berechtigung zum Zugriff auf Ihren remote SQL Server.

Sie können den IIS/Apache-Dienst so ändern, dass er mit den Anmeldeinformationen (Ihren?) Ausgeführt wird, die zum Herstellen einer Verbindung mit SQL Server berechtigt sind. Beachten Sie jedoch, dass dies zu anderen Berechtigungsproblemen mit dem Dienst führen kann und ein Problem darstellt, wenn Sie Ihr Kennwort ändern die Zukunft.

Führen Sie ein Testskript über die Befehlszeile aus (die standardmäßig mit Ihren Anmeldeinformationen ausgeführt werden sollte), um zu ermitteln, wo das Problem liegt:

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

Dieser Fehler ist ein allgemeiner Fehler, der auftritt, wenn aus bestimmten Gründen keine Verbindung zum Server hergestellt werden kann. Es ist wichtig zu wissen, welchen Server Sie mit PHP verwenden und welche Anwendung damit verwendet wird. Beispiel Apache, Xampp oder Wamp etc.

Hier sind einige Dinge, die Sie gerne ausprobieren könnten. 

Lassen Sie mich kurz sagen, unten sind die Referenzlinks.

  • Prüfen Sie, ob es pingt 
  • Aktivieren Sie die TCP/IP-Verbindung. SQL Server-Konfiguration, falls nicht aktiviert. Öffnen Sie dazu SQL Server Configuration Manager -> SQL Server Network Configuration->Protocols for SQL server->TCP/IP(set to enabled). Starten Sie die SQL-Dienste neu.
  • Aktivieren Sie die Remote-Verbindung vom Server
  • Öffnen Sie den Port, Windows Firewall Settings-> Exceptions -> add a Port (Name:SQL;Port:1433;TCP) then from Exceptions tick SQL, und speichern Sie.
  • Aktivieren Sie das Ausführen von Browserdiensten .SQL Server Configuration Manager -> SQL Server Services - > SQL Server Browser auf Ausführen eingestellt.
  • port in Verbindungszeichenfolge definieren
  • fügen Sie den Instanznamen mit dem Computernamen hinzu, wenn mehr als eine Instanz verwendet wird

probe

$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);

hier sind nützliche Links zu diesem Thema

Auflösung konnte keine Verbindung zu SQL Server-Fehlern öffnen

Fehler beim SQL-Server-Provider namens Pipes Provider

Schauen Sie sich auch diese Links an

Named Pipes Provider: Verbindung zu SQL Server konnte nicht geöffnet werden [53]

1
aimme

Schauen Sie sich die regedit HKLM/SOFTWARE/ODBC an

wie lautet Ihr Ordnername?

Wenn es einen "SQL Server Native Client 11.0" gibt, müssen Sie Ihren PHP-Code wie schreiben 

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

Allerdings werden einige der Server wie Server 2008 diese ODBC-Dateien aufnehmen 

ODBC Driver 11 for SQL Server

Dann müssen Sie den SQL Server Native Client 11.0 durch ODBC Driver 11 für SQL Server ersetzen.

0