2017-06-08 3 views
1

Verbindung zu MsSQL fehlgeschlagen. Fehlermeldung:Verbindung zu MSSQL über PHP nicht möglich

SQLSTATE: HYT00 

Code: 0 

Message: [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired 

SQLSTATE: 08001 

Code: 10057 

Message: [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]TCP Provider: Error code 0x2749 

SQLSTATE: 08001 

Code: 10057 

Message: [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. 

OS: Ubuntu 16.04

installiert ich alle Treiber benötigt nach dem guide.

try { 
    $conn = new PDO ("sqlsrv:Server=host.com\instance; Database = DBName",NULL,NULL); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $e){ 
    die(print_r($e->getMessage())); 
} 

Da ich Windows NT-Authentifizierung verwendet, Endivie ich Benutzername und Passwort leer.

Wirklich Hilfe HILFE !!!!

Danke !!

+0

Verwenden Sie Kerberos? Und bestätigen Sie bitte, ob Ihr Client Ubuntu oder Ihr Server ist. –

+0

Mein Webserver ist Ubuntu. Das Web wird auf einer Remote-Ubuntu-VM gehostet. Dann versuche ich nun von meinem lokalen Rechner aus auf die Website zuzugreifen. Beim Laden der Website muss das Back-End mit einem anderen Remote-Datenbankserver kommunizieren. Meine Verbindung mit der Website ist gut, aber die Verbindung vom Website-Back-End zur Datenbank ist fehlgeschlagen. –

Antwort

1

Beste kann ich Sie anbieten (und auf der Gefahr nur einen Link) ist der folgende MSDN Beitrag: SQL Server Driver for PHP: Understanding Windows Authentication

Hier ist wohl das interessanteste Stück:

(Im Anschluss ist nicht meine Arbeit, aber Brian Swan)

aber zu verstehen, was Identität wurde im Zusammenhang Versuch verwendet wird, war verwirrend. Was half, meine Verwirrung zu klären, war das Lernen dies: Die Identität, die verwendet wird, um eine Verbindung mit dem Server wird immer die Identität des Prozesses, in dem PHP ausgeführt wird. Das kann ein Bit übermäßig vereinfacht sein (Identitätswechsel ermöglicht den Prozess vorübergehend eine andere Identität verwenden), aber das Verständnis hat mir erlaubt, vorwärts zu bewegen. Nach etwas mehr Graben und einigen Experimenten, ich fand I benötigt, um zwei Fragen zu beantworten, um zu wissen, welche Identität in der Verbindungsversuch verwendet würde:

1) Was war der Authentifizierungsmodus für IIS? (Anonyme Authentifizierung? Windows-Authentifizierung? Beide?)

2) War Identitätswechsel für das FastCGI-Modul an oder aus? (Dh War die fastcgi.impersonate Einstellung in meiner php.ini auf 0 oder 1?)

Hier ist, was ich gefunden habe:

A. IIS anonyme Authentifizierung aktiviert und fastcgi.impersonate = 1: Da ich mich anonym mit IIS verbunden habe, wurde das integrierte anonyme Konto (das NT AUTHORITY \ IUSER standardmäßig in IIS 7.0+ ist) imitiert. Daher ist mein Verbindungsversuch fehlgeschlagen, da diese Identität nicht einer gültigen Anmeldung auf meinem Server zugeordnet ist.

B. IIS anonyme Authentifizierung aktiviert und fastcgi.impersonate = 0: Da Identitätswechsel war weg, wurde meine Identität nicht als Identität des PHP-Prozess verwendet. Stattdessen wurde die tatsächliche Identität des PHP-Prozesses im Verbindungsversuch verwendet. In IIS 7.5 hängt die Identität des PHP-Prozesses von der Identität des Anwendungspools ab, in dem er ausgeführt wird.In in diesem Fall war PHP in der Standard-Anwendung Pool und die Identität in der Verbindung verwendet wurde, war IIS APPPOOL \ DefaultAppPool (so mein Verbindungsversuch gescheitert). Dieser Artikel enthält weitere Informationen über verschiedene Versionen von IIS und die Identität von Anwendungen: Wer ist meine IIS Application Process Identity?

C. IIS Windows-Authentifizierung aktiviert und fastcgi.impersonate = 1: Bei Windows Authentifizierung (und anonyme Authentifizierung deaktiviert), I verbunden mit der Identität IIS, dass mein Web-Browser unter (Microsoft lief \ brian.swan, die Identität, mit der ich mich angemeldet habe). Und mit Identitätswechsel auf, lief der PHP-Prozess unter der Microsoft \ brian.swan Identität. Da diese Identität einem gültigen Login auf meinem Server zugeordnet ist, ist mein Verbindungsversuch erfolgreich.

D. IIS Windows-Authentifizierung aktiviert und fastcgi.impersonate = 0: Die Ergebnisse waren hier das gleiche wie bei der anonymen Authentifizierung aktiviert und fastcgi.impersonate = 0 (der Verbindungsversuch fehlgeschlagen). Der einzige Unterschied trat auf, als ich die Seite vom Webserver anforderte: Ein Popup-Fenster fragte nach meiner Identität, als ich die Seite anforderte.

E.Both Anonym und Windows-Authentifizierung aktiviert: Web-Browser wird versuchen, einen Web-Server zunächst mithilfe von anonymer Authentifizierung zuzugreifen. Wenn also sowohl die anonyme als auch die Windows-Authentifizierung aktiviert sind, entsprechen die Ergebnisse denen, bei denen die anonyme Authentifizierung aktiviert ist (A und B). Weitere Informationen hierzu finden Sie unter Authentifizierung von Webbrowser-Clients durch IIS .

+0

Hier ist die Situation, vor der ich stehe. Der MS SQL-Server, mit dem ich mich verbinde, verwendet NT-Authentifizierung. Also, gibt es irgendeine Konfiguration, die ich tun könnte, um eine Verbindung zur Datenbank herzustellen? Danke vielmals. –

+0

Siehe meine aktualisierte Antwort –

+0

Danke. Dieser Beitrag ist wirklich hilfreich. –

Verwandte Themen