Puncte:0

Nu se poate conecta SQL Server de la PHP utilizând autentificarea Windows

drapel cn

Încerc să mă conectez la MS-SQL Server de la PHP-8.0 (găzduire pe IIS-10 localhost) folosind SQL Server Driver pentru PHP, adică SQLSRV-5.9. În timp ce mă conectez de la o pagină PHP, dacă folosesc SQL Server Authentication, se conectează imediat. Dar în timp ce utilizați autentificarea Windows, se afișează o eroare în browser care spune:

Conexiunea nu a putut fi stabilită.
Array ( [0] => Array ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [cod] => 18456 [2] => [Microsoft][ODBC Driver 17 pentru SQL Server][ SQL Server]Autentificarea eșuată pentru utilizatorul „NT AUTHORITY\IUSR”. [mesaj] => [Microsoft][ODBC Driver 17 pentru SQL Server][SQL Server]Autentificarea eșuată pentru utilizatorul „NT AUTHORITY\IUSR”.) [1] => Array ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [cod] => 18456 [2] => [Microsoft][ODBC Driver 17 pentru SQL Server][SQL Server]Autentificarea eșuată pentru utilizatorul „NT AUTHORITY\IUSR”. [mesaj] => [Microsoft][ODBC Driver 17 pentru SQL Server][SQL Server]Autentificarea eșuată pentru utilizatorul „NT AUTHORITY\IUSR”. ) )

Mediul meu este Windows 10 Pro, versiunea 21H2, pe 64 de biți. În serverul meu SQL, atât Autentificarea Windows, cât și Autentificarea SQL Server sunt activate și mă pot conecta la server folosind ambele prin SQL Server Management Studio. Deci, ce oprește codul meu PHP să se conecteze la server folosind autentificarea Windows? Atât PHP, cât și SQL Server sunt pe același computer. ce fac greșit? Deoarece sunt nou în PHP, vă rog să-l clarificați cu un exemplu simplu?

Urmează codul meu connect-db.php. Observați cum am folosit șirul de conexiune atât pentru Windows, cât și pentru autentificarea SQL Server.

?php
    $serverName = "(local)"; // Folosiți opțional numărul portului (1433 în mod implicit).
    $connectionString = array("Bază de date"=>"TestDB"); // Șir de conexiune de autentificare Windows.
    // $connectionString = array("UID"=>"sa","PWD"=>"sa","Baza de date"=>"TestDB"); // Șir de conexiune de autentificare SQL Server.
    $conn = sqlsrv_connect($serverName, $connectionString); // Conectați-vă la server.

    if($conn === false) {
        echo „Conexiunea nu a putut fi stabilită.<br/>”;
        die(print_r(sqlsrv_errors(), true));
    } altfel {
        echo „Conexiune stabilită cu succes.<br/>”;
    }

    sqlsrv_close($conn); // Închide resursele de conectare.
?>

Multumesc si Salutari!

Puncte:0
drapel cn

Problema a fost că NT AUTHORITY\IUSR nu avea niciun login în SQL Server. Spre deosebire de aplicațiile .Net, IIS nu utilizează autentificarea implicită Windows Authenticated care vine cu instalarea SQL Server. Folosește NT AUTHORITY\IUSR, de care nu știam. Dar NT AUTHORITY\IUSR nu are niciun utilizator implicit de conectare sau DB creat pentru el în SQL Server. Trebuie să le creați în mod explicit. Crearea acestora și acordarea lor de privilegii pentru baza de date a rezolvat problema. Acum mă pot autentifica din PHP folosind autentificarea SQL Server. Sper că acest lucru îi va ajuta pe spectatorii din posteritate.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.