2015-08-17 8 views
10

Sto provando a utilizzare PHP per connettersi a un'origine dati ODBC utilizzando l'autenticazione di Windows. Posso collegarmi perfettamente al server in SQL Server, quindi so che è in esecuzione. Quando provo ad eseguire il comandoConnessione a SQL Server tramite l'autenticazione PHP, ODBC e Windows

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

ottengo l'errore:

"Warning: odbc_connect(): SQL error:
[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]
Login failed for user ''., SQL state 28000 in SQLConnect in C:\Users..."

ho provato:

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

che ha restituito il messaggio:

Warning: odbc_connect(): SQL error:
[Microsoft][ODBC Driver 11 for SQL Server]
Named Pipes Provider: Could not open a connection to SQL Server [53]. , SQL state 08001 in SQLConnect in C:\Users..."

Non è sicuro cosa sto facendo di sbagliato

  • my_odbc è un server SQL (2008) su una macchina diversa. Non ho privilegi di amministratore su quel database, quindi non posso cambiare nulla a tale scopo (come l'abilitazione dell'autenticazione di SQL Server).

  • Sono in esecuzione Windows 7 e utilizzando PHP versione 5.6.12

  • phpinfo() indica che ODBC supporto è abilitato così come pdo_sqlsrv supporto

+2

Sicurezza integrata = SSPI nella stringa di connessione indica al driver ODBC di utilizzare l'utente corrente per il processo in esecuzione. Forse user id e password specifici nella stringa di connessione. – togocoder

+0

Sei sicuro che l'identità utilizzata dal tuo codice abbia i diritti di connessione a SQL Server? http://blogs.msdn.com/b/brian_swan/archive/2010/02/10/sql-server-driver-for-php-understanding-windows-authentication.aspx – Rory

+4

Perché stai usando ODBC invece di usare SQL Autista nativo? per esempio. utilizzando sqlsrv_connect() - https://msdn.microsoft.com/en-us/library/cc296205%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396 – Rory

risposta

3

Forse si dovrebbe provare DOP (la differenza di prestazioni non è eccezionale) con il plug-in SQLsrv (ciò che sto usando per connettermi al software del mio altro capo che utilizza il database 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); 

È possibile scaricare il plugin qui

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

in XAMPP, è necessario copiare la dll nella cartella:

C:\xampp\php\ext 

E si deve aggiungere che la linea al vostro php.ini

extension = php_pdo_sqlsrv_56_ts.dll 

Nota: Non dimenticare di riavviare il server in modo che può prendere in considerazione il nuovo file php.ini.

farmi sapere se funziona per voi

2

qualcuno ha avuto lo stesso messaggio di errore e chiesto e ha risposto alla sua stessa domanda here.

Per citare ...

mi dispiace per i guai.

Il problema era che stavo usando SQL Server Native Client 11.0 come driver. L'ho passato a SQL Server e ora funziona:/

Speriamo che questo almeno aiuti qualcuno, trovandosi in un problema simile ....

2

Un'omissione significativa dalla tua domanda è come stai eseguendo PHP e con quali credenziali.

Supponendo che si sta utilizzando IIS o Apache (o un altro server Web), quindi il processo di PHP è probabilmente in esecuzione con l'account di sistema locale:

IIS service properties Apache service properties

Dal momento che questo account è locale esso non ha alcuna autorizzazione per accedere al tuo server remoto con SQL Server.

È possibile modificare il servizio IIS/Apache per l'esecuzione con le credenziali (la vostra?) Autorizzate a connettersi a SQL Server, ma tenere presente che questo potrebbe causare altri problemi di autorizzazione con il servizio oltre ad essere un problema se si cambia la tua password in futuro.

provare a eseguire uno script di test dalla riga di comando (che dovrebbe funzionare con le proprie credenziali per impostazione predefinita) per determinare dove il problema è:

php -r "var_dump(odbc_connect(...));" 
1

Questo errore è un errore generale che si pone a causa di in grado di stabilire connettersi al server per alcuni motivi. È importante sapere quale server stai usando con PHP e l'applicazione utilizzata con esso. Esempio Apache, Xampp o Wamp, ecc.

Qui ci sono alcuni che potresti provare.

Lasciatemi brevemente, di seguito sono i collegamenti di riferimento.

  • Controllare se fa un rumore metallico
  • Enable Server Configuration TCP/IP di connessione SQL se non abilitato. Per fare ciò, apri SQL Server Configuration Manager -> SQL Server Network Configuration->Protocols for SQL server->TCP/IP(set to enabled). Riavvia i servizi SQL.
  • Abilita connessione remota dal server
  • Aprire la porta, per fare ciò Windows Firewall Settings-> Exceptions -> add a Port (Name:SQL;Port:1433;TCP) then from Exceptions tick SQL e salvare.
  • Abilita i servizi del browser in esecuzione. SQL Server Configuration Manager -> SQL Server Services - > SQL Server Browser impostato per l'esecuzione.
  • definire Port nella stringa di connessione
  • aggiungere nome di istanza con il nome della macchina se più di un'istanza viene utilizzato

campione

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

Ecco i link utili che ho trovato in materia di emissione

resolving could not open a connection to sql server-errors

sql server provider named pipes provider error

Date un'occhiata a questi link troppo

Named Pipes Provider: Could not open a connection to SQL Server [53]

0

guardare il regedit HKLM/SOFTWARE/ODBC

qual è il tuo nome della cartella?

Se c'è un "SQL Server Native Client 11.0" allora dovete scrivere il codice php come

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

Tuttavia alcuni dei server, come assistente 2008 sarà record di questa ODBC come

ODBC Driver 11 for SQL Server 

Quindi è necessario sostituire SQL Server Native Client 11.0 dal driver ODBC 11 per SQL Server.

-1

Attiva in IIS su PHP Responsabile o PDO_ODBC:

ho autenticato da Windows con seguente dichiarazione PHP:

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

Sto usando Windows 2008.

Spero che risolve il problema.

+0

Non sembra una sintassi PHP valida? – Carpetsmoker