Dela via


Ansluta med Microsoft Entra-autentisering

Ladda ned PHP-drivrutin

Microsoft Entra ID är en central användar-ID-hanteringsteknik som fungerar som ett alternativ till SQL Server-autentisering. Microsoft Entra ID tillåter anslutningar till Azure SQL Database, Azure SQL Managed Instance och Azure Synapse Analytics med federerade identiteter i Microsoft Entra-ID med hjälp av användarnamn och lösenord, Windows-integrerad autentisering eller en Microsoft Entra-åtkomsttoken. PHP-drivrutinerna för SQL Server har delvis stöd för dessa funktioner.

Innan du kan använda Microsoft Entra-autentisering måste du konfigurera och hantera Microsoft Entra-autentisering med Azure SQL.

Om du vill använda Microsoft Entra-ID använder du nyckelorden Autentisering eller AccessToken (de är ömsesidigt uteslutande) enligt följande tabell. Mer teknisk information finns i Använda Microsoft Entra-ID med ODBC-drivrutinen.

Keyword Värden Description
AccessToken Inte inställt (standard) Autentiseringsläge som bestäms av andra nyckelord. Mer information finns i Anslutningsalternativ.
En bytesträng Microsoft Entra-åtkomsttoken som extraherats från ett OAuth JSON-svar. Anslutningssträngen får inte innehålla användar-ID, lösenord eller nyckelord ( Authentication kräver ODBC-drivrutinsversion 17 eller senare i Linux eller macOS).
autentisering Inte inställt (standard) Autentiseringsläge som bestäms av andra nyckelord. Mer information finns i Anslutningsalternativ.
SqlPassword Autentisera direkt till en SQL Server-instans (som kan vara en Azure-instans) med ett användarnamn och lösenord. Användarnamnet och lösenordet måste skickas till anslutningssträngen med hjälp av nyckelorden UID och PWD .
ActiveDirectoryPassword Autentisera med en Microsoft Entra-identitet med ett användarnamn och lösenord. Användarnamnet och lösenordet måste skickas till anslutningssträngen med hjälp av nyckelorden UID och PWD .
ActiveDirectoryMsi Autentisera med antingen en Microsoft Entra-systemtilldelad eller användartilldelad hanterad identitet (kräver ODBC-drivrutinsversion 17.3.1.1 eller senare). En översikt och självstudier finns i Vad är hanterade identiteter för Azure-resurser?.
ActiveDirectoryServicePrincipal Autentisera med hjälp av tjänstens huvudnamnsobjekt (kräver ODBC-drivrutinsversion 17.7 eller senare). Mer information och exempel finns i Program- och tjänsthuvudnamnsobjekt i Microsoft Entra-ID.

Nyckelordet Autentisering påverkar inställningarna för anslutningssäkerhet. Om det anges i anslutningssträngen är nyckelordet Kryptera som standard inställt på true, vilket innebär att klienten begär kryptering. Dessutom verifieras servercertifikatet oavsett krypteringsinställningen såvida inte TrustServerCertificate är inställt på sant (falskt som standard). Den här funktionen skiljer sig från den gamla, mindre säkra inloggningsmetoden, där servercertifikatet endast verifieras när kryptering specifikt begärs i anslutningssträngen.

Begränsningar

I Windows stöder den underliggande ODBC-drivrutinen ytterligare ett värde för nyckelordet Autentisering , ActiveDirectoryIntegrated, men PHP-drivrutinerna stöder inte det här värdet på någon plattform.

Exempel – ansluta med SqlPassword och 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);
}

?>

Exempel – ansluta med drivrutinen 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 = "<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";
}
?>

Exempel – ansluta med Microsoft Entra-åtkomsttoken

SQLSRV-drivrutin

<?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 drivrutin

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

Exempel – ansluta med hanterade identiteter för Azure-resurser

Använda systemtilldelad hanteringsidentitet med SQLSRV-drivrutinen

När du ansluter med den systemtilldelade hanterade identiteten ska du inte använda UID- eller PWD-alternativen.

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

Exempel – ansluta med Microsoft Entra serviceprincipal

Om du vill autentisera med ett objekt för tjänstens huvudnamn behöver du motsvarande programklient-ID och klienthemligheten.

SQLSRV-drivrutin

<?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 drivrutin

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

Se även

Använda Microsoft Entra-ID med ODBC-drivrutinen

Vad är hanterade identiteter för Azure-resurser?