Menyambungkan Menggunakan autentikasi Microsoft Entra
Microsoft Entra ID adalah teknologi manajemen ID pengguna pusat yang beroperasi sebagai alternatif untuk autentikasi SQL Server. MICROSOFT Entra ID memungkinkan koneksi ke Azure SQL Database, Azure SQL Managed Instance, dan Azure Synapse Analytics dengan identitas gabungan di MICROSOFT Entra ID menggunakan nama pengguna dan kata sandi, Autentikasi Terintegrasi Windows, atau token akses Microsoft Entra. Driver PHP untuk SQL Server menawarkan dukungan parsial untuk fitur-fitur ini.
Sebelum dapat menggunakan autentikasi Microsoft Entra, Anda harus Mengonfigurasi dan mengelola autentikasi Microsoft Entra dengan Azure SQL.
Untuk menggunakan ID Microsoft Entra, gunakan kata kunci Autentikasi atau AccessToken (saling eksklusif), seperti yang diperlihatkan dalam tabel berikut. Untuk detail teknis selengkapnya, lihat Menggunakan ID Microsoft Entra dengan Driver ODBC.
Kata kunci | Nilai | Deskripsi |
---|---|---|
AccessToken | Tidak diatur (default) | Mode autentikasi ditentukan oleh kata kunci lain. Untuk informasi selengkapnya, lihat Opsi Koneksi. |
String byte | Token akses Microsoft Entra yang diekstrak dari respons OAuth JSON. string koneksi tidak boleh berisi ID pengguna, kata sandi, atau Authentication kata kunci (memerlukan Driver ODBC versi 17 atau lebih tinggi di Linux atau macOS). |
|
Autentikasi | Tidak diatur (default) | Mode autentikasi ditentukan oleh kata kunci lain. Untuk informasi selengkapnya, lihat Opsi Koneksi. |
SqlPassword |
Autentikasi langsung ke instans SQL Server (yang mungkin instans Azure) menggunakan nama pengguna dan kata sandi. Nama pengguna dan kata sandi harus diteruskan ke string koneksi menggunakan kata kunci UID dan PWD. | |
ActiveDirectoryPassword |
Autentikasi dengan identitas Microsoft Entra menggunakan nama pengguna dan kata sandi. Nama pengguna dan kata sandi harus diteruskan ke string koneksi menggunakan kata kunci UID dan PWD. | |
ActiveDirectoryMsi |
Autentikasi menggunakan identitas terkelola yang ditetapkan pengguna yang ditetapkan sistem Microsoft Entra (memerlukan Driver ODBC versi 17.3.1.1 atau lebih tinggi). Untuk gambaran umum dan tutorial, lihat Apa itu identitas terkelola untuk sumber daya Azure?. | |
ActiveDirectoryServicePrincipal |
Autentikasi menggunakan objek perwakilan layanan (memerlukan Driver ODBC versi 17.7 atau lebih tinggi). Untuk detail dan contoh selengkapnya, lihat Aplikasi dan objek perwakilan layanan di ID Microsoft Entra. |
Kata kunci Autentikasi memengaruhi pengaturan keamanan koneksi. Jika diatur dalam string koneksi, maka secara default kata kunci Enkripsi diatur ke true, yang berarti klien akan meminta enkripsi. Selain itu, sertifikat server akan divalidasi terlepas dari pengaturan enkripsi kecuali TrustServerCertificate diatur ke true (salah secara default). Fitur ini dibedakan dari metode masuk lama yang kurang aman, di mana sertifikat server divalidasi hanya ketika enkripsi secara khusus diminta dalam string koneksi.
Batasan
Di Windows, driver ODBC yang mendasarinya mendukung satu nilai lagi untuk kata kunci Autentikasi , ActiveDirectoryIntegrated, tetapi driver PHP tidak mendukung nilai ini pada platform apa pun.
Contoh - menyambungkan menggunakan SqlPassword dan 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);
}
?>
Contoh - menyambungkan menggunakan 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 = "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";
}
?>
Contoh - menyambungkan menggunakan token akses 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);
}
?>
driver 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";
}
?>
Contoh - menyambungkan menggunakan identitas terkelola untuk sumber daya Azure
Menggunakan identitas terkelola yang ditetapkan sistem dengan driver SQLSRV
Saat menyambungkan menggunakan identitas terkelola yang ditetapkan sistem, jangan gunakan opsi UID atau 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);
}
?>
Contoh - menyambungkan menggunakan perwakilan layanan Microsoft Entra
Untuk mengautentikasi menggunakan objek perwakilan layanan, Anda akan memerlukan ID klien aplikasi yang sesuai dan rahasia klien.
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);
?>
driver 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);
?>