Vai al contenuto

Guida pratica: Usare l’identità gestita per accedere al database Azure SQL con PHP in App Service

Una guida passo passo su come utilizzare l’identità gestita per accedere al database Azure SQL con PHP in App Service, sfruttando la funzionalità di autenticazione Active Directory di Microsoft.

Microsoft ha introdotto con la versione 17.3.1.1 del suo ODBC Driver la possibilità di utilizzare le identità assegnate dal sistema e le identità assegnate dall’utente per accedere al server Azure SQL. La versione dell’ODBC driver di Microsoft presente in Azure Web App per PHP 8.1~ in Linux è successiva a questa versione, permettendo di utilizzare l’identità gestita assegnata dal sistema per accedere al database Azure SQL.

Prerequisiti:

  • il database Azure SQL deve essere configurato per utilizzare l’autenticazione Active Directory
  • la versione Microsoft ODBC Driver deve essere successiva alla 17.3.1.1

Istruzioni:

Seguire i seguenti passaggi per abilitare l’accesso al database Azure SQL con PHP in App Service utilizzando l’identità gestita:

  1. Abilitare l’identità gestita assegnata dal sistema per Azure App Service.
  2. Accedere al database Azure SQL, aprire il Query editor e utilizzare l’autenticazione Active Directory per effettuare l’accesso.
  3. Nel Query editor eseguire i seguenti comandi SQL per creare un utente, assegnare i ruoli adeguati e dare le autorizzazioni necessarie all’app service di Azure. Ricordare di sostituire con il nome effettivo del servizio app.
CREATE USER [] FROM EXTERNAL PROVIDER;ALTER ROLE db_datareader ADD MEMBER [];ALTER ROLE db_datawriter ADD MEMBER [];ALTER ROLE db_ddladmin ADD MEMBER [];GO

Nel codice dell’applicazione Azure App Service, seguire l’esempio di codice seguente per collegarsi al database Azure SQL target, ricordando di sostituire i parametri “$azureServer” e “$azureDatabase”. A questo punto l’applicazione dovrebbe essere in grado di connettersi al database Azure SQL e di estrarre i dati con successo, utilizzando l’identità gestita assegnata dal sistema.

$azureDatabase,	                        'Authentication'=>'ActiveDirectoryMsi');	$conn = sqlsrv_connect($azureServer, $connectionInfo);		if ($conn === false) {	    echo "Could not connect with Authentication=ActiveDirectoryMsi (system-assigned).\n";	    print_r(sqlsrv_errors());	} else {	    echo "Connected successfully with Authentication=ActiveDirectoryMsi (system-assigned).\n";	    	    $tsql = "SELECT @@Version AS SQL_VERSION";	    $stmt = sqlsrv_query($conn, $tsql);	    if ($stmt === false) {	        echo "Failed to run the simple query (system-assigned).\n";	        print_r(sqlsrv_errors());	    } else {	        while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {	            echo $row['SQL_VERSION'] . PHP_EOL;	        }		        sqlsrv_free_stmt($stmt);	    }	    sqlsrv_close($conn);	}?>