Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Microsoft Entra ID je centrální technologie správy ID uživatele, která funguje jako alternativa k ověřování SQL Serveru. Microsoft Entra ID umožňuje připojení ke službě Azure SQL Database, Azure SQL Managed Instance a Azure Synapse Analytics s federovanými identitami v Microsoft Entra ID pomocí uživatelského jména a hesla, integrovaného ověřování systému Windows nebo přístupového tokenu Microsoft Entra. Ovladače PHP pro SQL Server nabízejí částečnou podporu těchto funkcí.
Než budete moct používat ověřování Microsoft Entra, musíte nakonfigurovat a spravovat ověřování Microsoft Entra pomocí Azure SQL.
Pokud chcete použít ID Microsoft Entra, použijte klíčová slova Ověřování nebo AccessToken (vzájemně se vylučují), jak je znázorněno v následující tabulce. Další technické podrobnosti najdete v tématu Použití Microsoft Entra ID s ovladačem ODBC.
| Keyword | Hodnoty | Description |
|---|---|---|
| AccessToken | Nenastaví se (výchozí) | Režim ověřování určený jinými klíčovými slovy Další informace naleznete v tématu Možnosti připojení. |
| Bajtový řetězec | Přístupový token Microsoft Entra extrahovaný z odpovědi JSON OAuth. Připojovací řetězec nesmí obsahovat ID uživatele, heslo ani Authentication klíčové slovo (vyžaduje ovladač ODBC verze 17 nebo vyšší v Linuxu nebo macOS). |
|
| Autentizace | Nenastaví se (výchozí) | Režim ověřování určený jinými klíčovými slovy Další informace naleznete v tématu Možnosti připojení. |
SqlPassword |
Přímo se ověřuje u instance SQL Serveru (což může být instance Azure) pomocí uživatelského jména a hesla. Uživatelské jméno a heslo musí být předány do připojovacího řetězce pomocí klíčových slov UID a PWD . | |
ActiveDirectoryPassword |
Ověřte se pomocí identity Microsoft Entra pomocí uživatelského jména a hesla. Uživatelské jméno a heslo musí být předány do připojovacího řetězce pomocí klíčových slov UID a PWD . | |
ActiveDirectoryMsi |
Ověřte se pomocí spravované identity přiřazené systémem nebo uživatelem v rámci Microsoft Entra (vyžaduje ovladač ODBC verze 17.3.1.1 nebo vyšší). Přehled a kurzy najdete v tématu Co jsou spravované identity pro prostředky Azure? | |
ActiveDirectoryServicePrincipal |
Ověření pomocí objektů služby principal (vyžaduje ovladač ODBC verze 17.7 nebo vyšší). Další podrobnosti a příklady najdete v tématu Aplikační a instanční objekty v Microsoft Entra ID. |
Klíčové slovo Ověřování ovlivňuje nastavení zabezpečení připojení. Pokud je nastavena v připojovacím řetězci, ve výchozím nastavení je klíčové slovo Encrypt nastaveno na true, což znamená, že klient požádá o šifrování. Kromě toho se certifikát serveru ověří bez ohledu na nastavení šifrování, pokud není hodnota TrustServerCertificate nastavená na true (false ve výchozím nastavení). Tato funkce se odlišuje od staré, méně zabezpečené metody přihlášení, ve které je certifikát serveru ověřen pouze v případě, že je v připojovacím řetězci požadováno šifrování.
Omezení
Základní ovladač ODBC ve Windows podporuje jednu další hodnotu pro klíčové slovo OvěřováníActiveDirectoryIntegrated, ale ovladače PHP tuto hodnotu nepodporují na žádné platformě.
Příklad – připojení pomocí SqlPassword a 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);
}
?>
Příklad – připojení pomocí ovladače 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";
}
?>
Příklad – připojení pomocí přístupového tokenu Microsoft Entra
Ovladač 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);
}
?>
ovladač 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";
}
?>
Příklad : Připojení pomocí spravovaných identit pro prostředky Azure
Použití spravované identity přiřazené systémem s ovladačem SQLSRV
Při připojování pomocí spravované identity přiřazené systémem nepoužívejte možnosti UID ani 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);
}
?>
Příklad – připojení pomocí služebního účtu Microsoft Entra
K ověření pomocí instančního objektu budete potřebovat odpovídající ID klienta aplikace a tajný klíč klienta.
Ovladač 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);
?>
ovladač 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);
?>