Поделиться через


Подключение использование проверки подлинности Microsoft Entra

Скачать драйвер PHP

Идентификатор Microsoft Entra — это центральная технология управления идентификаторами пользователей, которая работает в качестве альтернативы проверке подлинности SQL Server. Идентификатор Microsoft Entra позволяет подключениям База данных SQL Azure, Управляемый экземпляр SQL Azure и Azure Synapse Analytics с федеративными удостоверениями в Идентификаторе Microsoft Entra с помощью имени пользователя и пароля, встроенной проверки подлинности Windows или маркера доступа Microsoft Entra. Драйверы PHP для SQL Server предоставляют частичную поддержку этих функций.

Прежде чем использовать проверку подлинности Microsoft Entra, необходимо настроить проверку подлинности Microsoft Entra и управлять ими с помощью SQL Azure.

Чтобы использовать идентификатор Microsoft Entra, используйте ключевое слово проверки подлинности или AccessToken (они являются взаимоисключающими), как показано в следующей таблице. Дополнительные технические сведения см. в статье об использовании идентификатора Microsoft Entra с драйвером ODBC.

Ключевое слово Значения Description
AccessToken Не задано (по умолчанию). Режим проверки подлинности определяется другими ключевыми словами. Дополнительные сведения см. в статье Connection Options.
Байтовая строка Маркер доступа Microsoft Entra, извлеченный из ответа OAuth JSON. Строка подключения не должны содержать идентификатор пользователя, пароль или Authentication ключевое слово (требуется драйвер ODBC версии 17 или выше в Linux или macOS).
Аутентификация Не задано (по умолчанию). Режим проверки подлинности определяется другими ключевыми словами. Дополнительные сведения см. в статье Connection Options.
SqlPassword Прямая проверка подлинности в экземпляре SQL Server (может быть экземпляром Azure) по имени пользователя и паролю. Имя пользователя и пароль необходимо передать в строку подключения с использованием ключевых слов UID и PWD.
ActiveDirectoryPassword Проверка подлинности с помощью удостоверения Microsoft Entra с помощью имени пользователя и пароля. Имя пользователя и пароль необходимо передать в строку подключения с использованием ключевых слов UID и PWD.
ActiveDirectoryMsi Проверка подлинности с помощью управляемого удостоверения, назначаемого пользователем назначаемого системой Microsoft Entra (требуется драйвер ODBC версии 17.3.1.1 или более поздней). Общие сведения и руководства см. в статье "Что такое управляемые удостоверения для ресурсов Azure?".
ActiveDirectoryServicePrincipal Проверка подлинности с помощью объектов субъекта-службы (требуется ODBC Driver версии 17.7 или более поздней). Дополнительные сведения и примеры см. в разделе "Объекты приложения и субъекта-службы" в идентификаторе Microsoft Entra.

Ключевое слово Authentication влияет на параметры безопасности подключения. Если оно задано в строке подключения, по умолчанию для ключевого слова Encrypt указано значение true, то есть клиент будет запрашивать шифрование. Кроме того, сертификат сервера будет проверяться независимо от параметра шифрования, если для параметра TrustServerCertificate установлено значение true (false по умолчанию). Эта функция отличается от старого, менее безопасного метода входа в систему, при котором сертификат сервера проверяется только в том случае, если шифрование запрашивается в строке подключения.

Ограничения

В Windows базовый драйвер ODBC поддерживает еще одно значение для ключевого слова Authentication — ActiveDirectoryIntegrated, но драйверы PHP не поддерживают это значение в любой платформе.

Пример: подключение с использованием SqlPassword и 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);
}

?>

Пример: подключение с использованием драйвера 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";
}
?>

Пример подключения с помощью маркера доступа Microsoft Entra

Драйвер 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

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

Пример: подключение с использованием управляемых удостоверений для ресурсов Azure

Использование управляемого удостоверения, назначаемого системой, с драйвером SQLSRV

При подключении с использованием управляемого удостоверения, назначаемого системой, не указывайте параметры UID или 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);
}
?>

Пример подключения с помощью субъекта-службы Microsoft Entra

Для проверки подлинности с помощью объекта субъекта-службы потребуется соответствующий идентификатор клиента приложения и секрет клиента.

Драйвер 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

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

См. также

Использование идентификатора Microsoft Entra с драйвером ODBC

Что такое управляемые удостоверения для ресурсов Azure?