Memigrasikan aplikasi Python untuk menggunakan koneksi tanpa kata sandi dengan Azure SQL Database

Berlaku untuk:Azure SQL Database

Permintaan aplikasi ke Azure SQL Database harus diautentikasi. Meskipun ada beberapa opsi untuk mengautentikasi ke Azure SQL Database, Anda harus memprioritaskan koneksi tanpa kata sandi di aplikasi Anda jika memungkinkan. Metode autentikasi tradisional yang menggunakan kata sandi atau kunci rahasia menciptakan risiko dan komplikasi keamanan. Kunjungi koneksi tanpa kata sandi untuk hub layanan Azure untuk mempelajari selengkapnya tentang keuntungan pindah ke koneksi tanpa kata sandi. Tutorial berikut menjelaskan cara memigrasikan aplikasi Python yang ada untuk menyambungkan ke Azure SQL Database untuk menggunakan koneksi tanpa kata sandi alih-alih solusi nama pengguna dan kata sandi.

Mengonfigurasi Azure SQL Database

Koneksi tanpa kata sandi menggunakan autentikasi Microsoft Entra untuk menyambungkan ke layanan Azure, termasuk Azure SQL Database. Autentikasi Microsoft Entra, Anda dapat mengelola identitas di lokasi pusat untuk menyederhanakan manajemen izin. Pelajari selengkapnya tentang mengonfigurasi autentikasi Microsoft Entra untuk Azure SQL Database Anda:

Untuk panduan migrasi ini, pastikan Anda memiliki admin Microsoft Entra yang ditetapkan ke Azure SQL Database Anda.

  1. Navigasi ke halaman Microsoft Entra dari server logis Anda.

  2. Pilih Atur admin untuk membuka menu flyout ID Microsoft Entra.

  3. Di menu flyout ID Microsoft Entra, cari pengguna yang ingin Anda tetapkan sebagai admin.

  4. Pilih pengguna dan pilih Pilih.

    A screenshot showing how to enable Microsoft Entra admin.

Mengonfigurasi lingkungan pengembangan lokal Anda

Koneksi tanpa kata sandi dapat dikonfigurasi agar berfungsi untuk lingkungan lokal dan yang dihosting Azure. Di bagian ini, Anda menerapkan konfigurasi untuk memungkinkan pengguna individual mengautentikasi ke Azure SQL Database untuk pengembangan lokal.

Masuk ke Azure

Untuk pengembangan lokal, pastikan Anda masuk dengan akun Microsoft Azure AD yang sama dengan yang ingin Anda gunakan untuk mengakses Azure SQL Database. Anda dapat mengautentikasi melalui alat pengembangan populer, seperti Azure CLI atau Azure PowerShell. Alat pengembangan yang dapat Anda autentikasi bervariasi di seluruh bahasa.

Masuk ke Azure melalui Azure CLI menggunakan perintah berikut:

az login

Membuat pengguna database dan menetapkan peran

Membuat pengguna di Azure SQL Database. Pengguna harus sesuai dengan akun Azure yang Anda gunakan untuk masuk secara lokal di bagian Masuk ke Azure .

  1. Di portal Azure, telusuri ke database SQL Anda dan pilih Editor kueri (pratinjau).

  2. Pilih Lanjutkan seperti <your-username> di sisi kanan layar untuk masuk ke database menggunakan akun Anda.

  3. Pada tampilan editor kueri, jalankan perintah T-SQL berikut ini:

    CREATE USER [user@domain] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [user@domain];
    ALTER ROLE db_datawriter ADD MEMBER [user@domain];
    ALTER ROLE db_ddladmin ADD MEMBER [user@domain];
    GO
    

    A screenshot showing how to use the Azure Query editor.

    Menjalankan perintah ini menetapkan peran Kontributor SQL DB ke akun yang ditentukan. Peran ini memungkinkan identitas untuk membaca, menulis, dan memodifikasi data dan skema database Anda. Untuk informasi selengkapnya tentang peran yang ditetapkan, lihat Peran database tetap.

Memperbarui konfigurasi koneksi lokal

Kode aplikasi yang ada yang tersambung ke Azure SQL Database menggunakan Driver Python SQL - pyodbc terus bekerja dengan koneksi tanpa kata sandi dengan perubahan kecil. Misalnya, kode berikut berfungsi dengan autentikasi SQL dan koneksi tanpa kata sandi saat berjalan secara lokal dan saat disebarkan ke Azure App Service.

import os
import pyodbc, struct
from azure.identity import DefaultAzureCredential

connection_string = os.environ["AZURE_SQL_CONNECTIONSTRING"]

def get_all():
    with get_conn() as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM Persons")
        # Do something with the data
    return

def get_conn():
    credential = DefaultAzureCredential(exclude_interactive_browser_credential=False)
    token_bytes = credential.get_token("https://database.windows.net/.default").token.encode("UTF-16-LE")
    token_struct = struct.pack(f'<I{len(token_bytes)}s', len(token_bytes), token_bytes)
    SQL_COPT_SS_ACCESS_TOKEN = 1256  # This connection option is defined by microsoft in msodbcsql.h
    conn = pyodbc.connect(connection_string, attrs_before={SQL_COPT_SS_ACCESS_TOKEN: token_struct})
    return conn

Tip

Dalam contoh kode ini, variabel WEBSITE_HOSTNAME lingkungan App Service digunakan untuk menentukan lingkungan tempat kode berjalan. Untuk skenario penyebaran lainnya, Anda dapat menggunakan variabel lingkungan lain untuk menentukan lingkungan.

Untuk memperbarui string koneksi yang dirujuk (AZURE_SQL_CONNECTIONSTRING) untuk pengembangan lokal, gunakan format string koneksi tanpa kata sandi:

Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30

Menguji aplikasi

Jalankan aplikasi Anda secara lokal dan verifikasi bahwa koneksi ke Azure SQL Database berfungsi seperti yang diharapkan. Perlu diingat bahwa mungkin perlu beberapa menit agar perubahan pada pengguna dan peran Azure disebarluaskan melalui lingkungan Azure Anda. Aplikasi Anda sekarang dikonfigurasi untuk berjalan secara lokal tanpa pengembang harus mengelola rahasia dalam aplikasi itu sendiri.

Mengonfigurasikan lingkungan hosting Azure

Setelah aplikasi Anda dikonfigurasi untuk menggunakan koneksi tanpa kata sandi secara lokal, kode yang sama dapat mengautentikasi ke Azure SQL Database setelah disebarkan ke Azure. Bagian yang mengikuti menjelaskan cara mengonfigurasi aplikasi yang disebarkan untuk menyambungkan ke Azure SQL Database menggunakan identitas terkelola. Identitas terkelola menyediakan identitas terkelola secara otomatis di ID Microsoft Entra (sebelumnya Azure Active Directory) untuk digunakan aplikasi saat menyambungkan ke sumber daya yang mendukung autentikasi Microsoft Entra. Pelajari selengkapnya tentang identitas terkelola:

Buat identitas terkelola

Buat identitas terkelola yang ditetapkan pengguna menggunakan portal Azure atau Azure CLI. Aplikasi Anda menggunakan identitas untuk mengautentikasi ke layanan lain.

  1. Di bagian atas portal Azure, cari Identitas terkelola. Pilih hasil Identitas Terkelola.
  2. Pilih + Buat di bagian atas halaman gambaran umum Identitas Terkelola.
  3. Pada tab Dasar , masukkan nilai berikut ini:
    • Langganan: Pilih langganan yang Anda inginkan.
    • Grup sumber daya: Pilih grup sumber daya yang Anda inginkan.
    • Wilayah: Pilih wilayah di dekat lokasi Anda.
    • Nama: Masukkan nama yang dapat dikenali untuk identitas Anda, seperti MigrationIdentity.
  4. Pilih Tinjau + buat di bagian bawah halaman.
  5. Setelah pemeriksaan validasi selesai, pilih Buat. Azure membuat identitas baru yang ditetapkan pengguna.

Setelah sumber daya dibuat, pilih Buka sumber daya untuk melihat detail identitas terkelola.

A screenshot showing how to create a managed identity using the Azure portal.

Mengaitkan identitas terkelola dengan aplikasi web Anda

Konfigurasikan aplikasi web Anda untuk menggunakan identitas terkelola yang ditetapkan pengguna yang Anda buat.

Selesaikan langkah-langkah berikut di portal Azure untuk mengaitkan identitas terkelola yang ditetapkan pengguna dengan aplikasi Anda. Langkah-langkah yang sama ini berlaku untuk layanan Azure berikut ini:

  • Azure Spring Apps
  • Azure Container Apps
  • Komputer virtual Azure
  • Azure Kubernetes Service
  • Navigasi ke halaman gambaran umum aplikasi web Anda.
  1. Pilih Identitas dari navigasi kiri.

  2. Pada halaman Identitas , beralihlah ke tab Pengguna yang ditetapkan.

  3. Pilih + Tambahkan untuk membuka flyout Tambahkan identitas terkelola yang ditetapkan pengguna.

  4. Pilih langganan yang Anda gunakan sebelumnya untuk membuat identitas.

  5. Cari MigrationIdentity menurut nama dan pilih dari hasil pencarian.

  6. Pilih Tambahkan untuk mengaitkan identitas dengan aplikasi Anda.

    A screenshot showing how to assign a managed identity.

Membuat pengguna database untuk identitas dan menetapkan peran

Buat pengguna database SQL yang memetakan kembali ke identitas terkelola yang ditetapkan pengguna. Tetapkan peran SQL yang diperlukan kepada pengguna untuk memungkinkan aplikasi Anda membaca, menulis, dan memodifikasi data dan skema database Anda.

  1. Di portal Azure, telusuri ke database SQL Anda dan pilih Editor kueri (pratinjau).

  2. Pilih Lanjutkan seperti <username> di sisi kanan layar untuk masuk ke database menggunakan akun Anda.

  3. Pada tampilan editor kueri, jalankan perintah T-SQL berikut ini:

    CREATE USER [user-assigned-identity-name] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [user-assigned-identity-name];
    ALTER ROLE db_datawriter ADD MEMBER [user-assigned-identity-name];
    ALTER ROLE db_ddladmin ADD MEMBER [user-assigned-identity-name];
    GO
    

    A screenshot showing how to use the Azure Query editor to create a SQL user for a managed identity.

    Menjalankan perintah ini menetapkan peran Kontributor SQL DB ke identitas terkelola yang ditetapkan pengguna. Peran ini memungkinkan identitas untuk membaca, menulis, dan memodifikasi data dan skema database Anda.


Penting

Berhati-hatilah saat menetapkan peran pengguna database di lingkungan produksi perusahaan. Dalam skenario tersebut, aplikasi tidak boleh melakukan semua operasi menggunakan satu identitas yang ditingkatkan. Cobalah untuk menerapkan prinsip hak istimewa paling sedikit dengan mengonfigurasi beberapa identitas dengan izin tertentu untuk tugas tertentu.

Anda dapat membaca selengkapnya tentang mengonfigurasi peran database dan keamanan pada sumber daya berikut:

Memperbarui string koneksi

Perbarui konfigurasi aplikasi Azure Anda untuk menggunakan format string koneksi tanpa kata sandi. Format harus sama dengan yang digunakan di lingkungan lokal Anda.

string Koneksi ion dapat disimpan sebagai variabel lingkungan di lingkungan hosting aplikasi Anda. Instruksi berikut berfokus pada App Service, tetapi layanan hosting Azure lainnya menyediakan konfigurasi serupa.

Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30

<database-server-name> adalah nama server Azure SQL Database Anda dan <database-name> merupakan nama Azure SQL Database Anda.

Membuat pengaturan aplikasi untuk ID klien identitas terkelola

Untuk menggunakan identitas terkelola yang ditetapkan pengguna, buat variabel lingkungan AZURE_CLIENT_ID dan atur sama dengan ID klien identitas terkelola. Anda dapat mengatur variabel ini di bagian Konfigurasi aplikasi Anda di portal Azure. Anda dapat menemukan ID klien di bagian Gambaran Umum sumber daya identitas terkelola di portal Azure.

Simpan perubahan Anda dan mulai ulang aplikasi jika tidak melakukannya secara otomatis.

Catatan

Contoh kode koneksi yang ditampilkan dalam panduan migrasi ini menggunakan kelas DefaultAzureCredential saat disebarkan. Secara khusus, ia menggunakan DefaultAzureCredential tanpa meneruskan ID klien identitas terkelola yang ditetapkan pengguna ke konstruktor. Dalam skenario ini, fallback adalah memeriksa variabel lingkungan AZURE_CLIENT_ID. Jika variabel lingkungan AZURE_CLIENT_ID tidak ada, identitas terkelola yang ditetapkan sistem akan digunakan jika dikonfigurasi.

Jika Anda meneruskan ID klien identitas terkelola di konstruktor DefaultAzureCredential, kode koneksi masih dapat digunakan secara lokal dan disebarkan karena proses autentikasi kembali ke autentikasi interaktif dalam skenario lokal. Untuk informasi selengkapnya, lihat pustaka klien Azure Identity untuk Python.

Uji aplikasi

Uji aplikasi Anda untuk memastikan semuanya masih berfungsi. Mungkin perlu waktu beberapa menit agar semua perubahan disebarluaskan melalui lingkungan Azure Anda.

Langkah berikutnya

Dalam tutorial ini, Anda belajar cara memigrasikan aplikasi ke koneksi tanpa kata sandi.

Anda dapat membaca sumber daya berikut untuk menjelajahi konsep yang dibahas dalam artikel ini secara lebih mendalam: