Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 lebih lanjut, lihat Menggunakan Microsoft Entra ID 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 [TIDAK DIGUNAKAN LAGI] |
ActiveDirectoryPassword tidak digunakan lagi. Untuk informasi selengkapnya, lihat Contoh - menyambungkan menggunakan SqlPassword dan 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 Microsoft Entra yang ditetapkan sistem atau yang ditetapkan pengguna (memerlukan Driver ODBC versi 17.3.1.1 atau yang lebih baru). 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 lebih lanjut, lihat Objek aplikasi dan perwakilan layanan di Microsoft Entra ID. |
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
Important
Opsi autentikasi ActiveDirectoryPassword (autentikasi kata sandi Microsoft Entra ID) tidak digunakan lagi di driver SQL Microsoft. Alur autentikasi berisiko tinggi ini tidak kompatibel dengan autentikasi multifaktor (MFA) Microsoft Entra wajib dan mungkin tidak berfungsi di penyewa tempat MFA diberlakukan. Rencanakan untuk bermigrasi ke metode autentikasi Microsoft Entra yang berbeda.
Autentikasi kata sandi Microsoft Entra ID didasarkan pada grant OAuth 2.0 Resource Owner Password Credentials (ROPC), yang memungkinkan aplikasi mengautentikasi pengguna dengan menangani kata sandi mereka secara langsung.
Microsoft menyarankan agar Anda tidak menggunakan alur ROPC karena tidak kompatibel dengan MFA. Dalam kebanyakan skenario, alternatif yang lebih aman tersedia dan direkomendasikan. Alur ini membutuhkan tingkat kepercayaan yang tinggi pada aplikasi, dan membawa risiko yang tidak ada dalam alur lain. Gunakan alur ini hanya jika opsi yang lebih aman tidak memungkinkan. Microsoft menjauh dari alur autentikasi berisiko tinggi ini untuk melindungi pengguna dari serangan berbahaya. Untuk informasi selengkapnya, lihat Merencanakan autentikasi multifaktor wajib untuk Azure.
Saat pengguna hadir saat proses masuk, gunakan autentikasi ActiveDirectoryInteractive atau ActiveDirectoryIntegrated sehingga jejak audit dikaitkan dengan pengguna yang masuk dan kebijakan Akses Bersyarat diterapkan.
Untuk skenario layanan ke layanan tanpa pengawas, ikuti panduan akun layanan Microsoft Entra:
- Jika aplikasi Anda berjalan pada infrastruktur Azure, gunakan ActiveDirectoryMSI (atau ActiveDirectoryManagedIdentity di beberapa driver). Identitas terkelola menghilangkan overhead untuk memelihara dan memutar rahasia dan sertifikat.
- Jika identitas terkelola tidak tersedia (misalnya, aplikasi berjalan di luar Azure), gunakan ActiveDirectoryServicePrincipal. Di mana driver mendukungnya, lebih memilih sertifikat klien daripada rahasia klien. Dengan sertifikat, kunci privat tetap berada di klien dan hanya pernyataan yang ditandatangani yang dikirim ke Microsoft Entra untuk mengautentikasi klien. Jika kunci disimpan di perangkat keras (seperti TPM atau HSM) atau ditandai sebagai tidak dapat diekspor, kunci tersebut tidak dapat disalin keluar sebagai string sebagaimana rahasia klien dapat disalin.
- Jangan gunakan akun pengguna Microsoft Entra sebagai akun layanan.
<?php
// First connect to a local SQL Server instance by setting Authentication to SqlPassword
$serverName = "<server>";
$user = "<user_id>";
$password = "<password>";
$connectionInfo = array("UID"=>$user, "PWD"=>$password, "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 = "<server>.database.windows.net";
$azureDatabase = "<database>";
$azureUsername = "<user_id>";
$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);
}
?>
Contoh - menyambungkan menggunakan driver PDO_SQLSRV
<?php
// First connect to a local SQL Server instance by setting Authentication to SqlPassword
$serverName = "<server>";
$databaseName = "<database>";
$user = "<user_id>";
$password = "<password>";
$connectionInfo = "Database = $databaseName; Authentication = SqlPassword;";
try {
$conn = new PDO("sqlsrv:server = $serverName ; $connectionInfo", $user, $password);
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 = "<server>.database.windows.net";
$azureDatabase = "<database>";
$azureUsername = "<user_id>";
$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";
}
?>
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
$azureAdServer = "<server>.database.windows.net";
$azureAdDatabase = "<database>";
$accToken = "<access-token>";
$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
$azureAdServer = "<server>.database.windows.net";
$azureAdDatabase = "<database>";
$accToken = "<access-token>";
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 = '<server>.database.windows.net';
$azureDatabase = '<database>';
$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 - terhubung menggunakan service principal Microsoft Entra
Untuk mengautentikasi menggunakan objek service principal, Anda akan memerlukan ID klien aplikasi yang terkait dan secret klien.
Driver SQLSRV
<?php
$adServer = '<server>.database.windows.net';
$adDatabase = '<database>';
$adSPClientId = '<client-id>';
$adSPClientSecret = '<client-secret>';
$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 = '<server>.database.windows.net';
$adDatabase = '<database>';
$adSPClientId = '<client-id>';
$adSPClientSecret = '<client-secret>';
$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);
?>