Bagikan melalui


Menyambungkan Menggunakan autentikasi Microsoft Entra

Unduh driver PHP

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 [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 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

Nota

Opsi autentikasi ActiveDirectoryPassword (autentikasi Kata Sandi Microsoft Entra ID) tidak digunakan lagi.

Kata sandi ID Microsoft Entra didasarkan pada pemberian OAuth 2.0 Resource Owner Password Credentials (ROPC), yang memungkinkan aplikasi untuk memasukkan pengguna dengan langsung menangani kata sandi mereka.

Microsoft menyarankan Agar Anda tidak menggunakan alur ROPC; tidak kompatibel dengan autentikasi multifaktor (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. Sebaiknya Anda hanya menggunakan alur ini ketika alur 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 konteks pengguna tersedia, gunakan autentikasi ActiveDirectoryInteractive.

Saat konteks pengguna tidak tersedia dan aplikasi Anda berjalan di infrastruktur Azure, gunakan ActiveDirectoryMSI (atau ActiveDirectoryManagedIdentity di beberapa driver). Identitas Terkelola menghilangkan overhead mengelola dan mengganti secara berkala data rahasia dan sertifikat. Jika Anda tidak dapat menggunakan Identitas Terkelola, gunakan autentikasi ActiveDirectoryServicePrincipal.

Peringatan

Jangan gunakan autentikasi Perwakilan Layanan ketika konteks pengguna tersedia. Akses yang hanya untuk aplikasi secara bawaan memiliki hak istimewa tinggi, sering kali memberikan akses seluas penyewa dan berpotensi memungkinkan penyerang jahat mengakses data pelanggan dari setiap pengguna.

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

?>

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 = "<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
$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);
?>

Lihat Juga

Menggunakan MICROSOFT Entra ID dengan Driver ODBC

Apa identitas terkelola untuk sumber daya Azure?