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.
Driver mssql-python mendukung koneksi terenkripsi melalui Transport Layer Security (TLS). Enkripsi melindungi data dalam transit antara aplikasi Anda dan SQL Server, serta mencegah penyadapan dan serangan musuh di tengah.
Enkripsi koneksi
Megaktifkan enkripsi
Gunakan Encrypt kata kunci untuk mengontrol enkripsi koneksi:
import mssql_python
# Require encryption (recommended)
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
)
Mengenkripsi nilai kata kunci
| Nilai | Deskripsi |
|---|---|
yes |
Memerlukan enkripsi dan gagal jika server tidak mendukung TLS. |
no |
Tidak mengenkripsi koneksi. Tidak disarankan untuk penggunaan di lingkungan produksi. |
strict |
Menggunakan mode enkripsi ketat TDS 8.0. Memerlukan SQL Server 2022 atau yang lebih baru. |
Penting
Azure SQL Database membutuhkan Encrypt=yes. Koneksi tanpa enkripsi ditolak.
Validasi sertifikat
TrustServerCertificate
Mengontrol apakah driver memvalidasi sertifikat TLS server:
# Validate server certificate (recommended for production)
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
# Skip certificate validation (development only)
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=yes;"
)
| Nilai | Deskripsi |
|---|---|
no |
Memvalidasi sertifikat terhadap CA tepercaya. Nilai ini adalah pengaturan default dan yang direkomendasikan. |
yes |
Memercayai sertifikat apa pun dan melewati validasi. Pengaturan ini tidak aman. |
Caution
Pengaturan TrustServerCertificate=yes dalam produksi mengekspos aplikasi Anda ke serangan musuh di tengah. Hanya gunakan pengaturan ini untuk pengembangan dengan sertifikat yang ditandatangani sendiri.
Enkripsi ketat TDS 8.0
SQL Server 2022 dan yang lebih baru mendukung TDS 8.0 dengan mode enkripsi yang ketat:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Encrypt=strict;"
)
Mode ketat memberikan tingkat keamanan tertinggi:
- Driver menetapkan TLS sebelum jabat tangan TDS.
- Validasi sertifikat diperlukan, dan Anda tidak dapat menggunakan
TrustServerCertificate=yes. - Mode ini memberikan tingkat perlindungan tertinggi terhadap intersepsi.
HostNameInCertificate
Ketika nama sertifikat server tidak cocok dengan nama server koneksi:
conn = mssql_python.connect(
"Server=192.168.1.100;" # IP address
"Database=<database>;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
"HostNameInCertificate=<server>.contoso.com;" # Certificate CN
)
Kata kunci ini berguna ketika:
- Aplikasi Anda terhubung melalui alamat IP, bukan nama host.
- Server berada di belakang penyeimbang beban.
- Sertifikat menggunakan nama subjek yang berbeda dari nama server koneksi.
Konfigurasi yang direkomendasikan
Azure SQL Database
Azure SQL Database memerlukan enkripsi:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
SQL Server lokal (produksi)
Untuk SQL Server lokal dengan sertifikat yang ditandatangani CA, simpan TrustServerCertificate=no agar driver memvalidasi identitas server:
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
Pengembangan dengan sertifikat yang ditandatangani sendiri
Selama pengembangan dengan sertifikat yang ditandatangani sendiri, atur TrustServerCertificate=yes untuk melewati validasi sertifikat:
conn = mssql_python.connect(
"Server=localhost;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=yes;"
)
SQL Server 2022 dan versi yang lebih baru dengan mode ketat
Gunakan Encrypt=strict untuk TDS 8.0, yang membungkus seluruh koneksi dalam TLS sejak awal:
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Encrypt=strict;"
)
Troubleshooting
"Penyedia SSL: Kegagalan validasi sertifikat"
Sertifikat server tidak dapat divalidasi. Jalankan pemeriksaan ini:
- Verifikasi sertifikat berasal dari CA tepercaya.
- Periksa apakah tanggal kedaluwarsa sertifikat valid.
- Verifikasi nama host server cocok dengan sertifikat CN atau SAN.
- Untuk pengembangan, gunakan
TrustServerCertificate=yes.
"Penyedia TCP: Koneksi yang ada ditutup secara paksa"
Server mungkin memerlukan enkripsi, tetapi klien tidak memintanya. Coba langkah-langkah berikut:
- Tambahkan
Encrypt=yeske string koneksi Anda. - Periksa konfigurasi SQL Server untuk pengaturan Enkripsi Paksa.
"Rantai sertifikat dikeluarkan oleh otoritas yang tidak dipercaya"
CA akar sertifikat ini tidak ada di penyimpanan root tepercaya sistem. Jalankan pemeriksaan ini:
- Instal sertifikat CA di penyimpanan akar tepercaya.
- Untuk Azure SQL, pastikan sistem Anda memercayai sertifikat CA Microsoft.
- Untuk pengembangan, gunakan
TrustServerCertificate=yes.
Koneksi gagal dengan enkripsi ketat
Mode ketat TDS 8.0 memiliki persyaratan berikut:
- Server harus menjalankan SQL Server 2022 atau yang lebih baru.
- Server harus memiliki sertifikat tepercaya yang valid.
- Anda tidak dapat mengatur
TrustServerCertificate=yes.
Jika server tidak mendukung TDS 8.0, gunakan Encrypt=yes sebagai gantinya.