Bagikan melalui


Menggunakan enkripsi tanpa validasi di SQL Server Native Client

Berlaku untuk:SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics AnalyticsPlatform System (PDW)

Penting

SQL Server Native Client (SNAC) tidak dikirim dengan:

  • SQL Server 2022 (16.x) dan versi yang lebih baru
  • SQL Server Management Studio 19 dan versi yang lebih baru

SQL Server Native Client (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak direkomendasikan untuk pengembangan aplikasi baru.

Untuk proyek baru, gunakan salah satu driver berikut:

Untuk SQLNCLI yang dikirim sebagai komponen SQL Server Database Engine (versi 2012 hingga 2019), lihat pengecualian Siklus Hidup Dukungan ini.

SQL Server selalu mengenkripsi paket jaringan yang terkait dengan masuk. Jika tidak ada sertifikat yang disediakan di server saat dimulai, SQL Server menghasilkan sertifikat yang ditandatangani sendiri yang digunakan untuk mengenkripsi paket masuk.

Sertifikat yang ditandatangani sendiri tidak menjamin keamanan. Jabat tangan terenkripsi didasarkan pada NT LAN Manager (NTLM). Anda harus menyediakan sertifikat yang dapat diverifikasi di SQL Server untuk konektivitas yang aman. Lapisan Keamanan Transportasi (TLS) hanya dapat dibuat aman dengan validasi sertifikat.

Aplikasi juga dapat meminta enkripsi semua lalu lintas jaringan dengan menggunakan kata kunci string koneksi atau properti koneksi. Kata kuncinya adalah "Enkripsi" untuk ODBC dan OLE DB saat menggunakan string penyedia dengan IDbInitialize::Initialize, atau "Gunakan Enkripsi untuk Data" untuk ADO dan OLE DB saat menggunakan string inisialisasi dengan IDataInitialize. Ini juga dapat dikonfigurasi oleh SQL Server Configuration Manager menggunakan opsi Force Protocol Encryption , dan dengan mengonfigurasi klien untuk meminta koneksi terenkripsi. Secara default, enkripsi semua lalu lintas jaringan untuk koneksi mengharuskan sertifikat disediakan di server. Dengan mengatur klien Anda untuk mempercayai sertifikat di server, Anda rentan terhadap serangan man-in-the-middle. Jika Anda menyebarkan sertifikat yang dapat diverifikasi di server, pastikan Anda mengubah pengaturan klien tentang mempercayai sertifikat menjadi FALSE.

Untuk informasi tentang kata kunci string koneksi, lihat Menggunakan Kata Kunci String Koneksi dengan Klien Asli SQL Server.

Untuk mengaktifkan enkripsi yang akan digunakan ketika sertifikat tidak disediakan di server, SQL Server Configuration Manager dapat digunakan untuk mengatur opsi Enkripsi Protokol Paksa dan Sertifikat Server Kepercayaan . Dalam hal ini, enkripsi menggunakan sertifikat server yang ditandatangani sendiri tanpa validasi jika tidak ada sertifikat yang dapat diverifikasi yang disediakan di server.

Aplikasi juga dapat menggunakan TrustServerCertificate kata kunci atau atribut koneksi terkait untuk menjamin bahwa enkripsi terjadi. Pengaturan aplikasi tidak pernah mengurangi tingkat keamanan yang ditetapkan oleh SQL Server Client Configuration Manager, tetapi dapat memperkuatnya. Misalnya, jika Enkripsi Protokol Paksa tidak diatur untuk klien, aplikasi mungkin meminta enkripsi itu sendiri. Untuk menjamin enkripsi bahkan ketika sertifikat server tidak disediakan, aplikasi mungkin meminta enkripsi dan TrustServerCertificate. Namun, jika TrustServerCertificate tidak diaktifkan dalam konfigurasi klien, sertifikat server yang disediakan masih diperlukan. Tabel berikut ini menjelaskan semua kasus:

Pengaturan klien Enkripsi Protokol Paksa Pengaturan klien Sertifikat Server Kepercayaan String koneksi/atribut koneksi Enkripsi/Gunakan Enkripsi untuk Data String koneksi/atribut koneksi Sertifikat Server Kepercayaan Hasil
Tidak. T/A Tidak (default) Diabaikan Tidak ada enkripsi yang terjadi.
Tidak. T/A Ya Tidak (default) Enkripsi hanya terjadi jika ada sertifikat server yang dapat diverifikasi, jika tidak, upaya koneksi gagal.
Tidak. T/A Ya Ya Enkripsi selalu terjadi, tetapi mungkin menggunakan sertifikat server yang ditandatangani sendiri.
Ya Tidak. Diabaikan Diabaikan Enkripsi hanya terjadi jika ada sertifikat server yang dapat diverifikasi, jika tidak, upaya koneksi gagal.
Ya Ya Tidak (default) Diabaikan Enkripsi selalu terjadi, tetapi mungkin menggunakan sertifikat server yang ditandatangani sendiri.
Ya Ya Ya Tidak (default) Enkripsi hanya terjadi jika ada sertifikat server yang dapat diverifikasi, jika tidak, upaya koneksi gagal.
Ya Ya Ya Ya Enkripsi selalu terjadi, tetapi mungkin menggunakan sertifikat server yang ditandatangani sendiri.

Perhatian

Tabel sebelumnya hanya menyediakan panduan tentang perilaku sistem di bawah konfigurasi yang berbeda. Untuk konektivitas yang aman, pastikan bahwa klien dan server memerlukan enkripsi. Pastikan juga bahwa server memiliki sertifikat yang dapat diverifikasi, dan bahwa TrustServerCertificate pengaturan pada klien diatur ke FALSE.

Penyedia OLE DB Klien Asli SQL Server

Penyedia SQL Server Native Client OLE DB mendukung enkripsi tanpa validasi melalui penambahan SSPROP_INIT_TRUST_SERVER_CERTIFICATE properti inisialisasi sumber data, yang diimplementasikan dalam DBPROPSET_SQLSERVERDBINIT kumpulan properti. Selain itu, kata kunci string koneksi baru, TrustServerCertificate, ditambahkan. Ini menerima yes atau no nilai; no adalah default. Saat menggunakan komponen layanan, komponen tersebut menerima true atau false nilai; false adalah default.

Untuk informasi selengkapnya tentang penyempurnaan yang dilakukan pada DBPROPSET_SQLSERVERDBINIT kumpulan properti, lihat Properti Inisialisasi dan Otorisasi (Penyedia OLE DB Klien Asli).

Driver ODBC Klien Asli SQL Server

Driver ODBC SQL Server Native Client mendukung enkripsi tanpa validasi melalui penambahan fungsi SQLSetConnectAttr dan SQLGetConnectAttr . SQL_COPT_SS_TRUST_SERVER_CERTIFICATE ditambahkan untuk menerima baik SQL_TRUST_SERVER_CERTIFICATE_YES atau SQL_TRUST_SERVER_CERTIFICATE_NO, dengan SQL_TRUST_SERVER_CERTIFICATE_NO menjadi default. Selain itu, kata kunci string koneksi baru, TrustServerCertificate, ditambahkan. Ini menerima yes atau no nilai; no adalah default.