Connexion à l’aide de l’authentification Microsoft Entra

Télécharger le pilote PHP

Microsoft Entra ID est une technologie de gestion centralisée des identifiants utilisateur qui représente une solution de substitution à l’authentification SQL Server. Microsoft Entra ID permet des connexions à la base de données Azure SQL à Azure SQL Managed Instance et à Azure Synapse Analytics avec des identités fédérées dans Microsoft Entra ID à l’aide d’un nom d’utilisateur et d’un mot de passe, de l’authentification intégrée de Windows ou d’un jeton d’accès Microsoft Entra. Les pilotes PHP pour SQL Server offrent une prise en charge partielle de ces fonctionnalités.

Avant de pouvoir utiliser l’authentification Microsoft Entra, vous devez configurer et gérer l’authentification Microsoft Entra avec Azure SQL.

Pour utiliser Microsoft Entra ID, utilisez les mots clés Authentication ou AccessToken (mutuellement exclusifs), comme le montre la table suivante. Pour plus de détails techniques, consultez Utilisation de Microsoft Entra ID avec le pilote ODBC.

Mot clé Valeurs Description
AccessToken Non défini (par défaut) Mode d’authentification déterminé par les autres mots clés. Pour plus d’informations, consultez Connection Options.
Chaîne d’octets Jeton d’accès Microsoft Entra extrait d’une réponse JSON OAuth. La chaîne de connexion ne doit pas contenir l’identifiant utilisateur, le mot de passe ou le mot clé Authentication (version 17 ou ultérieure du pilote ODBC requise sur Linux ou macOS).
Authentification Non défini (par défaut) Mode d’authentification déterminé par les autres mots clés. Pour plus d’informations, consultez Connection Options.
SqlPassword Authentification directe auprès d’une instance SQL Server (qui peut être une instance Azure) à l’aide d’un nom d’utilisateur et d’un mot de passe, qui doivent être transmis dans chaîne de connexion avec les mots clés UID et PWD.
ActiveDirectoryPassword Authentifiez-vous avec une identité Microsoft Entra à l’aide d’un nom d’utilisateur et d’un mot de passe. qui doivent être transmis dans chaîne de connexion avec les mots clés UID et PWD.
ActiveDirectoryMsi Authentification avec une identité managée affectée par le système Microsoft Entra (version 17.3.1.1 ou ultérieure du pilote ODBC requise). Pour obtenir une vue d’ensemble et des tutoriels, consultez À quoi correspondent les identités managées pour les ressources Azure ?.
ActiveDirectoryServicePrincipal Authentification en utilisant des objets de principal de service (nécessite le pilote ODBC version 17.7 ou ultérieure). Pour obtenir plus d’informations et des exemples, consultez Objets d’application et de principal de service dans Microsoft Entra ID.

Le mot clé Authentication affecte les paramètres de sécurité de la connexion. S’il est défini dans la chaîne de connexion, le mot clé Encrypt a alors par défaut la valeur true, ce qui signifie que le client demandera un chiffrement. Par ailleurs, le certificat de serveur sera validé indépendamment du paramètre de chiffrement, sauf si TrustServerCertificate a la valeur true (false par défaut). Cette fonctionnalité est à distinguer de l’ancienne méthode de connexion, moins sécurisée, selon laquelle le certificat de serveur n’était validé que si le chiffrement était spécifiquement demandé dans la chaîne de connexion.

Limites

Sur Windows, le pilote ODBC sous-jacent prend en charge une valeur supplémentaire pour le mot clé Authentication, ActiveDirectoryIntegrated, mais les pilotes PHP ne la gèrent sur aucune plateforme.

Exemple : Connexion avec SqlPassword et ActiveDirectoryPassword

<?php
// First connect to a local SQL Server instance by setting Authentication to SqlPassword
$serverName = "myserver.mydomain";

$connectionInfo = array("UID"=>$myusername, "PWD"=>$mypassword, "Authentication"=>'SqlPassword');

$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
    echo "Could not connect with Authentication=SqlPassword.\n";
    print_r(sqlsrv_errors());
} else {
    echo "Connected successfully with Authentication=SqlPassword.\n";
    sqlsrv_close($conn);
}

// Now connect to an Azure SQL database by setting Authentication to ActiveDirectoryPassword
$azureServer = "myazureserver.database.windows.net";
$azureDatabase = "myazuredatabase";
$azureUsername = "myuid";
$azurePassword = "mypassword";
$connectionInfo = array("Database"=>$azureDatabase,
                        "UID"=>$azureUsername,
                        "PWD"=>$azurePassword,
                        "Authentication"=>'ActiveDirectoryPassword');

$conn = sqlsrv_connect($azureServer, $connectionInfo);
if ($conn === false) {
    echo "Could not connect with Authentication=ActiveDirectoryPassword.\n";
    print_r(sqlsrv_errors());
} else {
    echo "Connected successfully with Authentication=ActiveDirectoryPassword.\n";
    sqlsrv_close($conn);
}

?>

Exemple : Connexion avec le pilote PDO_SQLSRV

<?php
// First connect to a local SQL Server instance by setting Authentication to SqlPassword
$serverName = "myserver.mydomain";

$connectionInfo = "Database = $databaseName; Authentication = SqlPassword;";

try {
    $conn = new PDO("sqlsrv:server = $serverName ; $connectionInfo", $myusername, $mypassword);
    echo "Connected successfully with Authentication=SqlPassword.\n";
    $conn = null;
} catch (PDOException $e) {
    echo "Could not connect with Authentication=SqlPassword.\n";
    print_r($e->getMessage());
    echo "\n";
}

// Now connect to an Azure SQL database by setting Authentication to ActiveDirectoryPassword
$azureServer = "myazureserver.database.windows.net";
$azureDatabase = "myazuredatabase";
$azureUsername = "myuid";
$azurePassword = "mypassword";
$connectionInfo = "Database = $azureDatabase; Authentication = ActiveDirectoryPassword;";

try {
    $conn = new PDO("sqlsrv:server = $azureServer ; $connectionInfo", $azureUsername, $azurePassword);
    echo "Connected successfully with Authentication=ActiveDirectoryPassword.\n";
    unset($conn);
} catch (PDOException $e) {
    echo "Could not connect with Authentication=ActiveDirectoryPassword.\n";
    print_r($e->getMessage());
    echo "\n";
}
?>

Exemple : se connecter à l’aide du jeton d’accès Microsoft Entra

Pilote SQLSRV

<?php
// Using an access token to connect: do not use UID or PWD connection options
// Assume $accToken is the valid byte string extracted from an OAuth JSON response
$connectionInfo = array("Database"=>$azureAdDatabase, "AccessToken"=>$accToken);
$conn = sqlsrv_connect($azureAdServer, $connectionInfo);
if ($conn === false) {
    echo "Could not connect with Azure AD Access Token.\n";
    print_r(sqlsrv_errors());
} else {
    echo "Connected successfully with Azure AD Access Token.\n";
    sqlsrv_close($conn);
}
?>

Pilote PDO_SQLSRV

<?php
try {
    // Using an access token to connect: do not pass in $uid or $pwd
    // Assume $accToken is the valid byte string extracted from an OAuth JSON response
    $connectionInfo = "Database = $azureAdDatabase; AccessToken = $accToken;";
    $conn = new PDO("sqlsrv:server = $azureAdServer; $connectionInfo");
    echo "Connected successfully with Azure AD Access Token\n";
    unset($conn);
} catch (PDOException $e) {
    echo "Could not connect with Azure AD Access Token.\n";
    print_r($e->getMessage());
    echo "\n";
}
?>

Exemple : Connexion avec les identités managées pour les ressources Azure

Utiliser l’identité managée affectée par le système avec le pilote SQLSRV

Si vous vous connectez avec l’identité managée affectée par le système, n’utilisez pas les options UID et PWD.

<?php

$azureServer = 'myazureserver.database.windows.net';
$azureDatabase = 'myazuredatabase';
$connectionInfo = array('Database'=>$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);
}
?>

Exemple : se connecter à l’aide du principal de service Microsoft Entra

Pour s’authentifier en utilisant un objet de principal de service, vous avez besoin de l’ID client de l’application correspondante et du secret client.

Pilote SQLSRV

<?php

$adServer = 'myazureserver.database.windows.net';
$adDatabase = 'myazuredatabase';
$adSPClientId = 'myAppClientId';
$adSPClientSecret = 'myClientSecret';

$conn = false;
$connectionInfo = array("Database"=>$adDatabase, 
                        "Authentication"=>"ActiveDirectoryServicePrincipal",
                        "UID"=>$adSPClientId,
                        "PWD"=>$adSPClientSecret);

$conn = sqlsrv_connect($adServer, $connectionInfo);
if ($conn === false) {
    echo "Could not connect using Azure AD Service Principal." . PHP_EOL;
    print_r(sqlsrv_errors());
}

sqlsrv_close($conn);

?>

Pilote PDO_SQLSRV

<?php

$adServer = 'myazureserver.database.windows.net';
$adDatabase = 'myazuredatabase';
$adSPClientId = 'myAppClientId';
$adSPClientSecret = 'myClientSecret';

$conn = false;
try {
    $connectionInfo = "Database = $adDatabase; Authentication = ActiveDirectoryServicePrincipal;";
    $conn = new PDO("sqlsrv:server = $adServer; $connectionInfo", $adSPClientId, $adSPClientSecret);
} catch (PDOException $e) {
    echo "Could not connect using Azure AD Service Principal.\n";
    print_r($e->getMessage());
    echo PHP_EOL;
}

unset($conn);
?>

Voir aussi

Utilisation de Microsoft Entra ID avec le pilote ODBC

Que sont les identités managées pour les ressources Azure ?