Partilhar via


Ligue-se Usando a autenticação Microsoft Entra

Descarregar o driver PHP

O Microsoft Entra ID é uma tecnologia central de gestão de ID de utilizador que funciona como alternativa à autenticação SQL Server. O Microsoft Entra ID permite ligações ao Azure SQL Database, Azure SQL Managed Instance e Azure Synapse Analytics com identidades federadas no Microsoft Entra ID, usando um nome de utilizador e palavra-passe, Autenticação Integrada do Windows ou um token de acesso Microsoft Entra. Os drivers PHP para SQL Server oferecem suporte parcial para estas funcionalidades.

Antes de poder usar a autenticação Microsoft Entra, deve configurar e gerir a autenticação Microsoft Entra com Azure SQL.

Para usar o Microsoft Entra ID, utilize as palavras-chave Authentication ou AccessToken (são mutuamente exclusivas), conforme mostrado na tabela seguinte. Para mais detalhes técnicos, consulte Utilização do Microsoft Entra ID com o Driver ODBC.

Keyword Valores Description
AccessToken Não definido (por defeito) Modo de autenticação determinado por outras palavras-chave. Para mais informações, consulte Opções de Ligação.
Uma cadeia de bytes Token de acesso Microsoft Entra extraído de uma resposta JSON do OAuth. A cadeia de ligação não deve conter ID de utilizador, palavra-passe ou a Authentication palavra-chave (requer o ODBC Driver versão 17 ou superior em Linux ou macOS).
Authentication Não definido (por defeito) Modo de autenticação determinado por outras palavras-chave. Para mais informações, consulte Opções de Ligação.
SqlPassword Autenticar diretamente numa instância SQL Server (que pode ser uma instância Azure) usando um nome de utilizador e palavra-passe. O nome de utilizador e a palavra-passe devem ser passados para a cadeia de ligação usando as palavras-chave UID e PWD .
ActiveDirectoryPassword Autenticar com uma identidade Microsoft Entra usando um nome de utilizador e palavra-passe. O nome de utilizador e a palavra-passe devem ser passados para a cadeia de ligação usando as palavras-chave UID e PWD .
ActiveDirectoryMsi Autenticar usando uma identidade gerida do Microsoft Entra atribuída pelo sistema ou atribuída por utilizador (requer o Driver ODBC versão 17.3.1.1 ou superior). Para uma visão geral e tutoriais, consulte O que são identidades geridas para recursos Azure?.
ActiveDirectoryServicePrincipal Autenticar usando objetos principais de serviço (requer o Driver ODBC versão 17.7 ou superior). Para mais detalhes e exemplos, consulte os objetos principais de aplicação e serviço no Microsoft Entra ID.

A palavra-chave Autenticação afeta as definições de segurança da ligação. Se estiver definida na string de ligação, então por defeito a palavra-chave Encrypt está definida como true, o que significa que o cliente irá pedir encriptação. Além disso, o certificado do servidor será validado independentemente da configuração de encriptação, a menos que o TrustServerCertificate esteja definido como true (falso por defeito). Esta funcionalidade distingue-se do antigo método de login menos seguro, em que o certificado do servidor só é validado quando a encriptação é especificamente solicitada na cadeia de ligação.

Limitações

No Windows, o driver ODBC subjacente suporta mais um valor para a palavra-chave de Autenticação , ActiveDirectoryIntegrated, mas os drivers PHP não suportam este valor em nenhuma plataforma.

Exemplo - liga-te usando SqlPassword e 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);
}

?>

Exemplo - liga-te usando o driver 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";
}
?>

Exemplo - ligar-se usando o token de acesso Microsoft Entra

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

PDO_SQLSRV driver

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

Exemplo - ligar usando identidades geridas para recursos Azure

Usando a identidade gerida pelo sistema associada ao driver SQLSRV

Ao ligar-se usando a identidade gerida atribuída ao sistema, não utilize as opções UID ou 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);
}
?>

Exemplo - conectar usando o service principal do Microsoft Entra

Para autenticar usando um objeto principal de serviço, será necessário o correspondente ID do cliente da aplicação e o segredo do cliente.

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

?>

PDO_SQLSRV driver

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

Ver também

Utilizar o Microsoft Entra ID com o Driver ODBC

O que são identidades gerenciadas para recursos do Azure?