Share via


Verbinding maken met Behulp van Microsoft Entra-verificatie

PHP-stuurprogramma downloaden

Microsoft Entra ID is een centrale technologie voor het beheer van gebruikers-id's die fungeert als alternatief voor SQL Server-verificatie. Microsoft Entra ID staat verbindingen toe met Azure SQL Database, Azure SQL Managed Instance en Azure Synapse Analytics met federatieve identiteiten in Microsoft Entra-id met behulp van een gebruikersnaam en wachtwoord, geïntegreerde Windows-verificatie of een Microsoft Entra-toegangstoken. De PHP-stuurprogramma's voor SQL Server bieden gedeeltelijke ondersteuning voor deze functies.

Voordat u Microsoft Entra-verificatie kunt gebruiken, moet u Microsoft Entra-verificatie configureren en beheren met Azure SQL.

Als u Microsoft Entra ID wilt gebruiken, gebruikt u de trefwoorden Authentication of AccessToken (ze sluiten elkaar wederzijds uit), zoals wordt weergegeven in de volgende tabel. Raadpleeg Microsoft Entra-id gebruiken met het ODBC-stuurprogramma voor meer technische informatie.

Keyword Waarden Description
AccessToken Niet ingesteld (standaard) Verificatiemodus die wordt bepaald door andere trefwoorden. Zie Verbindingsopties voor meer informatie.
Een bytetekenreeks Het Microsoft Entra-toegangstoken dat is geëxtraheerd uit een OAuth JSON-antwoord. De verbindingsreeks mag geen gebruikers-id, wachtwoord of trefwoord Authentication bevatten (vereist ODBC-stuurprogrammaversie 17 of hoger in Linux of macOS).
Authentication Niet ingesteld (standaard) Verificatiemodus die wordt bepaald door andere trefwoorden. Zie Verbindingsopties voor meer informatie.
SqlPassword Rechtstreeks verifiëren bij een SQL Server-exemplaar (dit kan een Azure-exemplaar zijn) met behulp van een gebruikersnaam en wachtwoord. De gebruikersnaam en het wachtwoord moeten worden doorgegeven aan de verbindingsreeks met behulp van de trefwoorden UID en PWD .
ActiveDirectoryPassword Verifieer met een Microsoft Entra-identiteit met behulp van een gebruikersnaam en wachtwoord. De gebruikersnaam en het wachtwoord moeten worden doorgegeven aan de verbindingsreeks met behulp van de trefwoorden UID en PWD .
ActiveDirectoryMsi Verifieer met behulp van een door het Microsoft Entra-systeem toegewezen beheerde identiteit (vereist ODBC-stuurprogrammaversie 17.3.1.1 of hoger). Raadpleeg wat zijn beheerde identiteiten voor Azure-resources? voor een overzicht en tutorials.
ActiveDirectoryServicePrincipal Verifiëren met behulp van service-principal-objecten (vereist ODBC-stuurprogramma versie 17.7 of hoger). Raadpleeg toepassings- en service-principalobjecten in Microsoft Entra-id voor meer informatie en voorbeelden.

Het trefwoord Verificatie is van invloed op de beveiligingsinstellingen van de verbinding. Als deze is ingesteld in de verbindingsreeks, wordt het trefwoord Versleutelen standaard ingesteld op waar, wat betekent dat de client versleuteling aanvraagt. Bovendien wordt het servercertificaat gevalideerd, ongeacht de versleutelingsinstelling, tenzij TrustServerCertificate is ingesteld op true (standaard false). Deze functie is onderscheiden van de oude, minder veilige aanmeldingsmethode, waarbij het servercertificaat alleen wordt gevalideerd wanneer versleuteling specifiek wordt aangevraagd in de verbindingsreeks.

Beperkingen

In Windows ondersteunt het onderliggende ODBC-stuurprogramma nog één waarde voor het trefwoord Verificatie , ActiveDirectoryIntegrated, maar de PHP-stuurprogramma's bieden geen ondersteuning voor deze waarde op een platform.

Voorbeeld: verbinding maken met sqlPassword en 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 = "<password>";
$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);
}

?>

Voorbeeld: verbinding maken met behulp van het PDO_SQLSRV-stuurprogramma

<?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 = "<password>";
$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";
}
?>

Voorbeeld: verbinding maken met behulp van microsoft Entra-toegangstoken

SQLSRV-stuurprogramma

<?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);
}
?>

PDO_SQLSRV stuurprogramma

<?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";
}
?>

Voorbeeld: verbinding maken met beheerde identiteiten voor Azure-resources

De door het systeem toegewezen beheerde identiteit gebruiken met het SQLSRV-stuurprogramma

Gebruik de UID- of PWD-opties niet wanneer u verbinding maakt met behulp van de door het systeem toegewezen beheerde identiteit.

<?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);
}
?>

Voorbeeld: verbinding maken met behulp van de Microsoft Entra-service-principal

Voor verificatie met behulp van een service-principal-object hebt u de bijbehorende client-id van de toepassing en het clientgeheim nodig.

SQLSRV-stuurprogramma

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

?>

PDO_SQLSRV stuurprogramma

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

Zie ook

Microsoft Entra-id gebruiken met het ODBC-stuurprogramma

Wat zijn beheerde identiteiten voor Azure-resources?