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.
Berlaku untuk:Azure SQL Database
Panduan kilat ini menjelaskan cara menyambungkan aplikasi ke database di Azure SQL Database dan melakukan kueri menggunakan Python dan driver mssql-python. Driver mssql-python memiliki dukungan bawaan untuk autentikasi Microsoft Entra, membuat koneksi tanpa kata sandi menjadi sederhana. Anda dapat mempelajari lebih lanjut tentang koneksi tanpa kata sandi di hub tanpa kata sandi.
Prasyarat
- Langganan Azure.
- Database Azure SQL yang dikonfigurasi dengan autentikasi Microsoft Entra. Anda bisa membuatnya menggunakan Mulai Cepat: Membuat database tunggal - Azure SQL Database. Atau, Anda dapat menggunakan database SQL di Microsoft Fabric.
- Visual Studio Code dengan ekstensi Python terpasang.
- Python 3.10 atau yang lebih baru.
- Azure CLI untuk autentikasi tanpa kata sandi (berfungsi di Windows, macOS, dan Linux).
Konfigurasi database
Koneksi aman tanpa kata sandi ke Azure SQL Database memerlukan konfigurasi database tertentu. Verifikasi pengaturan berikut di server logis Anda di Azure untuk menyambungkan dengan benar ke Azure SQL Database di lingkungan lokal dan yang dihosting:
Untuk koneksi pengembangan lokal, pastikan server logis Azure SQL Anda dikonfigurasi untuk memungkinkan alamat IP komputer lokal Anda dan layanan Azure lainnya tersambung:
Di portal Microsoft Azure, di menu sumber daya, di bawah Keamanan, pilih Jaringan.
Pilih tombol Jaringan yang dipilih untuk menampilkan opsi konfigurasi tambahan.
Pilih Tambahkan alamat IPv4 klien Anda(xx.xx.xx.xx) untuk menambahkan aturan firewall yang akan mengaktifkan koneksi dari alamat IPv4 komputer lokal Anda. Atau, Anda juga dapat memilih + Tambahkan aturan firewall untuk memasukkan alamat IP tertentu pilihan Anda.
Pastikan kotak centang Izinkan layanan dan sumber daya Azure untuk mengakses server ini dipilih.
Peringatan
Mengaktifkan pengaturan Izinkan layanan dan sumber daya Azure untuk mengakses server ini bukanlah praktik keamanan yang direkomendasikan untuk skenario produksi. Aplikasi nyata harus menerapkan pendekatan yang lebih aman, seperti pembatasan firewall yang lebih kuat atau konfigurasi jaringan virtual.
Anda bisa membaca selengkapnya tentang konfigurasi keamanan database pada sumber daya berikut:
Server juga harus mengaktifkan autentikasi Microsoft Entra dan memiliki akun admin Microsoft Entra yang ditetapkan. Untuk koneksi pengembangan lokal, akun admin Microsoft Entra harus menjadi akun yang juga dapat Anda masuk ke Visual Studio atau Azure CLI dengan secara lokal. Anda dapat memverifikasi apakah server Anda mengaktifkan autentikasi Microsoft Entra di halaman ID Microsoft Entra server logis Anda.
Jika Anda menggunakan akun Azure pribadi, pastikan Anda memiliki penyiapan Microsoft Entra dan dikonfigurasi untuk Azure SQL Database untuk menetapkan akun Anda sebagai admin server. Jika Anda menggunakan akun perusahaan, ID Microsoft Entra kemungkinan besar sudah dikonfigurasi untuk Anda.
Membuat proyek
Buat proyek Python baru menggunakan Visual Studio Code.
Buka Visual Studio Code, buat folder baru untuk proyek Anda, dan ubah ke direktori tersebut.
mkdir python-sql-azure cd python-sql-azureBuat lingkungan virtual untuk aplikasi.
py -m venv .venv .venv\scripts\activateBuat file Python baru yang disebut
app.py.
Menginstal driver mssql-python
Untuk menyambungkan ke Azure SQL Database menggunakan Python, instal mssql-python driver. Driver ini memiliki dukungan bawaan untuk autentikasi Microsoft Entra, menghilangkan kebutuhan akan penanganan token manual. Dalam panduan memulai cepat ini, Anda juga menginstal paket fastapi, uvicorn, dan pydantic untuk mengembangkan dan menjalankan API.
Nota
Di macOS dan Linux, dependensi sistem diperlukan sebelum menginstal mssql-python. Lihat Menginstal paket mssql-python untuk instruksi khusus platform.
Buat file requirements.txt dengan baris-baris berikut:
mssql-python fastapi uvicorn[standard] pydantic python-dotenvInstal persyaratan.
pip install -r requirements.txt
Mengonfigurasi string koneksi lokal
Untuk pengembangan lokal, buat .env file di folder proyek Anda untuk menyimpan string koneksi Anda. Ini menjaga kredensial keluar dari kode dan kontrol sumber Anda.
Di folder proyek, buat file baru bernama
.env.Tambahkan variabel
AZURE_SQL_CONNECTIONSTRINGdengan string koneksi Anda. Ganti tempat penampung<database-server-name>dan<database-name>dengan nilai Anda sendiri.
Driver mssql-python memiliki dukungan bawaan untuk autentikasi Microsoft Entra.
Authentication Gunakan parameter untuk menentukan metode autentikasi.
ActiveDirectoryDefault secara otomatis menemukan kredensial dari beberapa sumber tanpa memerlukan masuk interaktif. Ini adalah opsi yang direkomendasikan untuk pengembangan lokal.
Untuk pengalaman pengembangan lokal yang paling andal, masuk dengan Azure CLI terlebih dahulu:
az login
Kemudian gunakan format string koneksi ini dalam file Anda .env :
AZURE_SQL_CONNECTIONSTRING=Server=<database-server-name>.database.windows.net;Database=<database-name>;Authentication=ActiveDirectoryDefault;Encrypt=yes;TrustServerCertificate=no;
ActiveDirectoryDefault mengevaluasi kredensial dalam urutan berikut:
- Variabel lingkungan (untuk kredensial perwakilan layanan)
- Identitas terkelola (saat berjalan di Azure)
-
Azure CLI (dari
az login) - Visual Studio (khusus Windows)
-
Azure PowerShell (dari
Connect-AzAccount)
Petunjuk / Saran
Untuk aplikasi produksi, gunakan metode autentikasi tertentu untuk skenario Anda untuk menghindari latensi penemuan kredensial:
-
Azure App Service/Functions: Gunakan
ActiveDirectoryMSI(identitas terkelola) -
Login pengguna interaktif: Gunakan
ActiveDirectoryInteractive -
Prinsipal layanan: Gunakan
ActiveDirectoryServicePrincipal
Anda bisa mendapatkan detail untuk membuat string koneksi dari portal Azure:
Buka Azure SQL Server, pilih halaman database SQL untuk menemukan nama database Anda, dan pilih database.
Pada database, buka halaman Gambaran Umum untuk mendapatkan nama server.
Menambahkan kode untuk menyambungkan ke Azure SQL Database
Di folder proyek, buat file app.py dan tambahkan kode sampel. Kode ini membuat API yang:
- Memuat konfigurasi dari berkas
.envmenggunakanpython-dotenv. - Mengambil string koneksi Azure SQL Database dari variabel lingkungan.
-
PersonsMembuat tabel dalam database selama startup (hanya untuk skenario pengujian). - Menentukan fungsi untuk mengambil semua
Personrekaman dari database. - Menentukan fungsi untuk mengambil satu
Personrekaman dari database. - Menentukan fungsi untuk menambahkan rekaman baru
Personke database.
from os import getenv
from typing import Union
from dotenv import load_dotenv
from fastapi import FastAPI
from pydantic import BaseModel
from mssql_python import connect
load_dotenv()
class Person(BaseModel):
first_name: str
last_name: Union[str, None] = None
connection_string = getenv("AZURE_SQL_CONNECTIONSTRING")
app = FastAPI()
@app.get("/")
def root():
print("Root of Person API")
try:
conn = get_conn()
cursor = conn.cursor()
# Table should be created ahead of time in production app.
cursor.execute("""
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Persons')
CREATE TABLE Persons (
ID int NOT NULL PRIMARY KEY IDENTITY,
FirstName varchar(255),
LastName varchar(255)
);
""")
conn.commit()
conn.close()
except Exception as e:
# Table might already exist
print(e)
return "Person API"
@app.get("/all")
def get_persons():
rows = []
with get_conn() as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM Persons")
for row in cursor.fetchall():
print(row.FirstName, row.LastName)
rows.append(f"{row.ID}, {row.FirstName}, {row.LastName}")
return rows
@app.get("/person/{person_id}")
def get_person(person_id: int):
with get_conn() as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM Persons WHERE ID = ?", (person_id,))
row = cursor.fetchone()
return f"{row.ID}, {row.FirstName}, {row.LastName}"
@app.post("/person")
def create_person(item: Person):
with get_conn() as conn:
cursor = conn.cursor()
cursor.execute("INSERT INTO Persons (FirstName, LastName) VALUES (?, ?)",
(item.first_name, item.last_name))
conn.commit()
return item
def get_conn():
"""Connect using mssql-python with built-in Microsoft Entra authentication."""
conn = connect(connection_string)
conn.setautocommit(True)
return conn
Peringatan
Kode sampel menunjukkan pernyataan SQL mentah, yang seharusnya tidak digunakan dalam kode produksi. Sebagai gantinya, gunakan paket Object Relational Mapper (ORM) seperti SqlAlchemy yang menghasilkan lapisan objek yang lebih aman untuk mengakses database Anda.
Jalankan dan uji aplikasi secara lokal
Aplikasi ini siap untuk diuji secara lokal.
Jalankan
app.pyfile di Visual Studio Code.uvicorn app:app --reloadPada halaman UI Swagger untuk aplikasi
http://127.0.0.1:8000/docs, perluas metode POST dan pilih Cobalah.Anda juga dapat mencoba
/redocmelihat bentuk lain dari dokumentasi yang dihasilkan untuk API.Ubah contoh JSON untuk menyertakan nilai untuk nama depan dan belakang. Pilih Jalankan untuk menambahkan rekaman baru ke database. API mengembalikan respons yang berhasil.
GETPerluas metode pada halaman antarmuka pengguna Swagger dan pilih Coba. Pilih Jalankan, dan orang yang baru saja Anda buat dikembalikan.
Menyebarkan ke Azure App Service
Aplikasi ini siap disebarkan ke Azure.
Buat file start.sh sehingga gunicorn di Azure App Service dapat menjalankan uvicorn. start.sh memiliki satu baris:
gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:appGunakan az webapp up untuk menyebarkan kode ke App Service. (Anda dapat menggunakan opsi
-dryrununtuk melihat apa yang dilakukan perintah tanpa membuat sumber daya.)az webapp up \ --resource-group <resource-group-name> \ --name <web-app-name>Gunakan perintah az webapp config set untuk mengonfigurasi App Service untuk menggunakan file start.sh.
az webapp config set \ --resource-group <resource-group-name> \ --name <web-app-name> \ --startup-file start.shGunakan perintah az webapp identity assign untuk mengaktifkan identitas terkelola yang ditetapkan sistem untuk App Service.
az webapp identity assign \ --resource-group <resource-group-name> \ --name <web-app-name>Dalam panduan memulai cepat ini, identitas terkelola yang ditetapkan sistem digunakan dalam demonstrasi. Identitas terkelola yang ditetapkan pengguna lebih efisien dalam berbagai skenario yang lebih luas. Untuk informasi selengkapnya, lihat Rekomendasi praktik terbaik identitas terkelola. Untuk contoh penggunaan identitas terkelola yang ditetapkan pengguna dengan mssql-python, lihat Memigrasikan aplikasi Python untuk menggunakan koneksi tanpa kata sandi dengan Azure SQL Database.
Menyambungkan App Service ke Azure SQL Database
Di bagian Konfigurasikan database , Anda mengonfigurasi jaringan dan autentikasi Microsoft Entra untuk server database Azure SQL. Di bagian ini, Anda menyelesaikan konfigurasi database dan mengonfigurasi App Service dengan string koneksi untuk mengakses server database.
Untuk menjalankan perintah ini, Anda dapat menggunakan alat atau IDE apa pun yang dapat tersambung ke Azure SQL Database, termasuk SQL Server Management Studio (SSMS), dan Visual Studio Code dengan ekstensi MSSQL. Anda juga bisa menggunakan portal Microsoft Azure seperti yang dijelaskan di Mulai Cepat: Gunakan editor kueri portal Microsoft Azure untuk mengkueri Azure SQL Database.
Tambahkan pengguna ke Azure SQL Database dengan perintah SQL untuk membuat pengguna dan peran untuk akses tanpa kata sandi.
CREATE USER [<web-app-name>] FROM EXTERNAL PROVIDER ALTER ROLE db_datareader ADD MEMBER [<web-app-name>] ALTER ROLE db_datawriter ADD MEMBER [<web-app-name>]Untuk informasi selengkapnya, lihat Pengguna Database Mandiri - Membuat Database Anda Portabel. Untuk contoh yang menunjukkan prinsip yang sama tetapi diterapkan ke Azure VM, lihat Tutorial: Menggunakan identitas terkelola yang ditetapkan sistem Komputer Virtual Windows untuk mengakses Azure SQL. Untuk informasi selengkapnya tentang peran yang ditetapkan, lihat Peran Tetap-Basis Data.
Jika Anda menonaktifkan lalu mengaktifkan kembali identitas terkelola yang ditetapkan sistem App Service, hapus pengguna sistem dan buat ulang. Jalankan
DROP USER [<web-app-name>]dan ulangi perintahCREATEdanALTER. Untuk melihat pengguna, gunakanSELECT * FROM sys.database_principals.Gunakan perintah az webapp config appsettings set untuk menambahkan pengaturan aplikasi untuk string koneksi.
az webapp config appsettings set \ --resource-group <resource-group-name> \ --name <web-app-name> \ --settings AZURE_SQL_CONNECTIONSTRING="<connection-string>"Untuk aplikasi yang disebarkan, string koneksi harus menyerupai:
Server=<database-server-name>.database.windows.net;Database=<database-name>;Authentication=ActiveDirectoryMSI;Encrypt=yes;TrustServerCertificate=no;Isi
<database-server-name>dan<database-name>dengan nilai Anda.string koneksi tanpa kata sandi tidak berisi nama pengguna atau kata sandi. Sebagai gantinya, saat aplikasi berjalan di Azure, driver mssql-python menggunakan
ActiveDirectoryMSImode autentikasi untuk mengautentikasi secara otomatis menggunakan identitas terkelola App Service.
Menguji aplikasi yang disebarkan
Telusuri ke URL aplikasi untuk menguji bahwa koneksi ke Azure SQL Database berfungsi. Anda dapat menemukan URL aplikasi Anda di halaman ringkasan App Service.
https://<web-app-name>.azurewebsites.net
Tambahkan /docs ke URL untuk melihat UI Swagger dan uji metode API.
Selamat! Aplikasi Anda sekarang terhubung ke Azure SQL Database di lingkungan lokal dan yang dihosting.