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 menyediakan autentikasi berbasis identitas untuk Azure SQL Database, Azure SQL Managed Instance, dan database SQL di Microsoft Fabric melalui driver mssql-python. Autentikasi Microsoft Entra menawarkan kemampuan ini melalui autentikasi SQL:
- Manajemen identitas terpusat melalui Microsoft Entra ID.
- Autentikasi berbasis token yang menghilangkan kebutuhan akan kata sandi.
- Dukungan untuk kebijakan akses bersyarat.
- Identitas terkelola untuk aplikasi yang dihosting Azure.
Driver mssql-python mendukung tujuh mode autentikasi Microsoft Entra, semuanya dikonfigurasi melalui Authentication kata kunci string koneksi.
Modus autentikasi
Atur Authentication kata kunci di string koneksi Anda ke salah satu nilai berikut:
| Nilai autentikasi | Deskripsi |
|---|---|
ActiveDirectoryDefault |
Menggunakan DefaultAzureCredential, yang mencoba beberapa metode secara otomatis. |
ActiveDirectoryInteractive |
Masuk interaktif berbasis browser. |
ActiveDirectoryDeviceCode |
Entri kode di https://microsoft.com/devicelogin. |
ActiveDirectoryPassword |
Nama pengguna dan kata sandi dengan Microsoft Entra ID. Tidak digunakan lagi. |
ActiveDirectoryMSI |
Identitas terkelola (ditetapkan sistem atau ditetapkan pengguna). |
ActiveDirectoryServicePrincipal |
Perwakilan layanan dengan ID klien dan rahasia. |
ActiveDirectoryIntegrated |
Windows Terintegrasi dengan Microsoft Entra ID (Kerberos). |
Note
Mode ActiveDirectoryDefault, ActiveDirectoryInteractive, dan ActiveDirectoryDeviceCode memerlukan paket azure-identity. Instal itu dengan pip install azure-identity.
DefaultAzureCredential
Mode ActiveDirectoryDefault ini menggunakan DefaultAzureCredential dari Azure Identity SDK, yang mencoba metode autentikasi berikut dalam urutan ini:
- Variabel lingkungan.
- Identitas beban kerja untuk Kubernetes.
- Identitas yang dikelola
- Kredensial Azure CLI.
- Kredensial Azure PowerShell.
- Kredensial CLI Pengembang Azure.
- Browser interaktif, jika diaktifkan.
Contoh: Autentikasi bawaan
Contoh berikut terhubung dengan ActiveDirectoryDefault, yang menggunakan DefaultAzureCredential rantai untuk menemukan kredensial yang valid secara otomatis:
import mssql_python
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
)
cursor = conn.cursor()
cursor.execute("SELECT USER_NAME()")
print(f"Connected as: {cursor.fetchval()}")
Gunakan mode ini untuk pengembangan lokal karena mengambil kredensial Azure CLI secara otomatis. Untuk produksi, gunakan mode autentikasi tertentu (ActiveDirectoryMSI, ActiveDirectoryServicePrincipal) sebagai gantinya.
DefaultAzureCredential memeriksa beberapa penyedia kredensial pada setiap koneksi awal, yang menambah latensi yang tidak diperlukan oleh beban kerja produksi.
Autentikasi interaktif
Untuk aplikasi interaktif, gunakan autentikasi berbasis browser. Pengguna harus memiliki akun database yang dibuat dengan CREATE USER [user@domain.com] FROM EXTERNAL PROVIDER. Untuk prasyarat lengkap, lihat Mengonfigurasi autentikasi Microsoft Entra.
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryInteractive;"
"Encrypt=yes;"
)
Di Windows, mode ini mendelegasikan ke alur interaktif asli driver ODBC. Pada platform lain, ini menggunakan autentikasi berbasis browser Azure Identity SDK.
Autentikasi kode perangkat
Gunakan autentikasi kode perangkat untuk lingkungan tanpa browser, seperti sesi atau kontainer SSH. Pengguna harus memiliki akun database yang dibuat dengan CREATE USER [user@domain.com] FROM EXTERNAL PROVIDER. Untuk prasyarat, lihat Mengonfigurasi autentikasi Microsoft Entra.
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDeviceCode;"
"Encrypt=yes;"
)
# Output: To sign in, use a web browser to open https://microsoft.com/devicelogin
# and enter the code XXXXXXX to authenticate.
Ikuti perintah untuk mengautentikasi di browser di perangkat lain.
Autentikasi pokok layanan
Gunakan autentikasi perwakilan layanan untuk aplikasi otomatis yang tidak memerlukan interaksi pengguna:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryServicePrincipal;"
"UID=<client-id>;" # Application (client) ID
"PWD=<client-secret>;" # Client secret
"Encrypt=yes;"
)
Membuat "Service Principal"
- Daftarkan aplikasi di Microsoft Entra ID.
- Buat rahasia klien.
- Berikan akses kepada perwakilan layanan ke database Anda:
-- In Azure SQL
CREATE USER [app-name] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [app-name];
ALTER ROLE db_datawriter ADD MEMBER [app-name];
Tip
Jika CREATE USER gagal dengan kesalahan 33131 (nama tampilan duplikat), gunakan WITH OBJECT_ID untuk menentukan ID Objek perwakilan layanan dari halaman aplikasi Perusahaan di portal Azure (bukan halaman pendaftaran aplikasi):
CREATE USER [app-name] FROM EXTERNAL PROVIDER
WITH OBJECT_ID = '<enterprise-app-object-id>';
Untuk detailnya, lihat Login Microsoft Entra dan pengguna dengan nama tampilan nonunik.
Identitas yang dikelola
Gunakan autentikasi identitas terkelola untuk aplikasi yang dihosting Azure, seperti App Service, Azure Functions, dan VM:
Identitas terkelola yang diberikan oleh sistem
Sambungkan menggunakan identitas yang ditetapkan langsung ke sumber daya Azure:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryMSI;"
"Encrypt=yes;"
)
Identitas terkelola yang ditetapkan pengguna
Tentukan ID klien dari identitas terkelola yang ditetapkan pengguna dalam bidang UID:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryMSI;"
"UID=<managed-identity-client-id>;"
"Encrypt=yes;"
)
Mengonfigurasi akses database
Berikan akses identitas terkelola di database Anda. Admin Microsoft Entra harus dikonfigurasi di server sebelum Anda dapat membuat pengguna eksternal. Untuk mengaktifkan identitas terkelola pada sumber daya Azure Anda, lihat Identitas terkelola untuk sumber daya Azure.
-- Replace 'my-app-service' with your Azure resource name
CREATE USER [my-app-service] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [my-app-service];
ALTER ROLE db_datawriter ADD MEMBER [my-app-service];
Autentikasi sandi (tidak digunakan lagi)
Penting
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 sebagian besar 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.
Gunakan autentikasi kata sandi saat Anda memerlukan nama pengguna dan kata sandi dengan akun Microsoft Entra. Pengguna harus memiliki akun database yang dibuat dengan CREATE USER [user@domain.com] FROM EXTERNAL PROVIDER:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryPassword;"
"UID=<login@domain.com>;"
"PWD=<password>;"
"Encrypt=yes;"
)
Autentikasi terintegrasi Windows
Gunakan autentikasi Terintegrasi Windows untuk lingkungan Windows yang bergabung dengan domain dengan Kerberos. Mode ini mengharuskan Active Directory lokal Anda untuk difederasikan dengan Microsoft Entra ID dan administrator Microsoft Entra yang dikonfigurasi di server:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryIntegrated;"
"Encrypt=yes;"
)
Mode ini menggunakan kredensial Kerberos pengguna Windows saat ini. Di Linux dan macOS, Anda harus mengonfigurasi Kerberos secara manual (krb5.conf dan keytab atau tiket yang valid). Lihat Menggunakan autentikasi Direktori Aktif dengan SQL Server on Linux untuk penyiapan Kerberos sisi klien.
Akses autentikasi token
Anda dapat memperoleh token secara eksternal, misalnya, melalui penyedia token kustom atau cache token bersama. Dalam kasus ini, gunakan SQL_COPT_SS_ACCESS_TOKEN dengan attrs_before parameter untuk meneruskan token secara langsung. Pendekatan ini melewati alur akuisisi token bawaan driver.
import mssql_python
from azure.identity import DefaultAzureCredential
import struct
def get_token():
credential = DefaultAzureCredential(
exclude_interactive_browser_credential=False
)
token_bytes = credential.get_token(
"https://database.windows.net/.default"
).token.encode("utf-16le")
token_struct = struct.pack(
f'<I{len(token_bytes)}s', len(token_bytes), token_bytes
)
return token_struct
SQL_COPT_SS_ACCESS_TOKEN = 1256
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;",
attrs_before={SQL_COPT_SS_ACCESS_TOKEN: get_token()}
)
Penting
Saat menggunakan SQL_COPT_SS_ACCESS_TOKEN, string koneksi tidak boleh menyertakan UID, PWD, Authentication, atau Trusted_Connection. Token itu sendiri menangani autentikasi.
Memilih mode autentikasi
| Scenario | Mode yang disarankan |
|---|---|
| Komputer pengembangan |
ActiveDirectoryDefault(menggunakan Azure CLI) |
| Azure App Service / Fungsi |
ActiveDirectoryMSI (lebih cepat dari Default) |
| Azure Kubernetes Service |
ActiveDirectoryDefault (identitas beban kerja) |
| Skrip otomatis di lingkungan lokal | ActiveDirectoryServicePrincipal |
| Aplikasi desktop interaktif | ActiveDirectoryInteractive |
| SSH/kontainer tanpa browser | ActiveDirectoryDeviceCode |
Troubleshoot
Log masuk gagal bagi pengguna 'NT AUTHORITY\ANONYMOUS LOGON'
Verifikasi bahwa pengguna atau identitas terkelola ada di database:
CREATE USER [identity-name] FROM EXTERNAL PROVIDER;
"AADSTS700016: Aplikasi tidak ditemukan"
Perwakilan layanan atau ID aplikasi salah. Verifikasi ID klien dan aplikasi terdaftar di penyewa Microsoft Entra Anda.
"Titik akhir Identitas Terkelola tidak dapat dijangkau"
- Verifikasi bahwa identitas terkelola diaktifkan pada sumber daya Azure.
- Untuk identitas yang ditetapkan pengguna, pastikan ID klien sudah benar.
- Periksa apakah sumber daya memiliki akses jaringan ke titik akhir identitas.
Batas waktu akuisisi token
ActiveDirectoryDefault menggunakan DefaultAzureCredential, yang menelusuri rangkaian penyedia kredensial secara berurutan hingga salah satunya berhasil. Penelusuran rantai ini menambah latensi beberapa detik pada koneksi pertama, terutama ketika penyedia yang lebih awal dalam rantai (variabel lingkungan, identitas beban kerja) gagal sebelum mencapai penyedia yang berfungsi. Di lingkungan produksi, tentukan jenis kredensial secara langsung untuk menghindari rantai tersebut:
# Slow: DefaultAzureCredential tries multiple providers
conn = mssql_python.connect(connection_string, authentication="ActiveDirectoryDefault")
# Fast: Skip directly to managed identity
conn = mssql_python.connect(connection_string, authentication="ActiveDirectoryMSI")