Dukungan Nama Prinsipal Layanan (SPN) dalam Koneksi Klien di Klien Asli SQL Server
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform 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.
Dimulai dengan SQL Server 2008 (10.0.x), dukungan untuk nama perwakilan layanan (SPN) telah diperluas untuk mengaktifkan autentikasi bersama di semua protokol. Dalam versi SQL Server sebelumnya, SPN hanya didukung untuk Kerberos melalui TCP ketika SPN default untuk instans SQL Server terdaftar di Direktori Aktif.
SPN digunakan oleh protokol autentikasi untuk menentukan akun tempat instans SQL Server berjalan. Jika akun instans diketahui, autentikasi Kerberos dapat digunakan untuk memberikan autentikasi bersama oleh klien dan server. Jika akun instans tidak diketahui, autentikasi NTLM, yang hanya menyediakan autentikasi klien oleh server, digunakan. Saat ini, SQL Server Native Client melakukan pencarian autentikasi, yang berasal dari SPN dari nama instans dan properti koneksi jaringan. Instans SQL Server akan mencoba mendaftarkan SPN pada startup, atau dapat didaftarkan secara manual. Namun, pendaftaran akan gagal jika ada hak akses yang tidak mencukupi untuk akun yang mencoba mendaftarkan SPN.
Akun domain dan komputer didaftarkan secara otomatis di Direktori Aktif. Ini dapat digunakan sebagai SPN, atau administator dapat menentukan SPN mereka sendiri. SQL Server membuat autentikasi aman lebih mudah dikelola dan dapat diandalkan dengan memungkinkan klien untuk secara langsung menentukan SPN yang akan digunakan.
Catatan
SPN yang ditentukan oleh aplikasi klien hanya digunakan ketika koneksi dibuat dengan keamanan terintegrasi Windows.
Tip
Microsoft Kerberos Configuration Manager untuk SQL Server adalah alat diagnostik yang membantu memecahkan masalah konektivitas terkait Kerberos dengan SQL Server. Untuk informasi selengkapnya, lihat Microsoft Kerberos Configuration Manager untuk SQL Server.
Untuk informasi selengkapnya tentang Kerberos, lihat artikel berikut ini:
Penggunaan
Tabel berikut menjelaskan skenario paling umum di mana aplikasi klien dapat mengaktifkan autentikasi aman.
Skenario | Deskripsi |
---|---|
Aplikasi warisan tidak menentukan SPN. | Skenario kompatibilitas ini menjamin bahwa tidak akan ada perubahan perilaku untuk aplikasi yang dikembangkan untuk versi SQL Server sebelumnya. Jika tidak ada SPN yang ditentukan, aplikasi bergantung pada SPN yang dihasilkan dan tidak memiliki pengetahuan tentang metode autentikasi mana yang digunakan. |
Aplikasi klien yang menggunakan versi SQL Server Native Client saat ini menentukan SPN di string koneksi sebagai pengguna domain atau akun komputer, sebagai SPN khusus instans, atau sebagai string yang ditentukan pengguna. | Kata kunci ServerSPN dapat digunakan dalam penyedia, inisialisasi, atau string koneksi untuk melakukan hal berikut: -Tentukan akun yang digunakan oleh instans SQL Server untuk koneksi. Ini menyederhanakan akses ke autentikasi Kerberos. Jika Kerberos Key Distribution Center (KDC) ada dan akun yang benar ditentukan, autentikasi Kerberos lebih mungkin digunakan daripada NTLM. KDC biasanya berada di komputer yang sama dengan pengendali domain. -Tentukan SPN untuk mencari akun layanan untuk instans SQL Server. Untuk setiap instans SQL Server, dua SPN default dihasilkan yang dapat digunakan untuk tujuan ini. Kunci ini tidak dijamin ada di Direktori Aktif, namun, jadi dalam situasi ini autentikasi Kerberos tidak dijamin. -Tentukan SPN yang akan digunakan untuk mencari akun layanan untuk instans SQL Server. Ini dapat berupa string yang ditentukan pengguna yang dipetakan ke akun layanan. Dalam hal ini, kunci harus didaftarkan secara manual di KDC dan harus memenuhi aturan untuk SPN yang ditentukan pengguna. Kata kunci FailoverPartnerSPN dapat digunakan untuk menentukan SPN untuk server mitra failover. Rentang nilai kunci akun dan Direktori Aktif sama dengan nilai yang dapat Anda tentukan untuk server utama. |
Aplikasi ODBC menentukan SPN sebagai atribut koneksi untuk server utama atau server mitra failover. | Atribut koneksi SQL_COPT_SS_SERVER_SPN dapat digunakan untuk menentukan SPN untuk koneksi ke server utama. Atribut koneksi SQL_COPT_SS_FAILOVER_PARTNER_SPN dapat digunakan untuk menentukan SPN untuk server mitra failover. |
Aplikasi OLE DB menentukan SPN sebagai properti inisialisasi sumber data untuk server utama atau untuk server mitra failover. | Properti koneksi SSPROP_INIT_SERVER_SPN dalam kumpulan properti DBPROPSET_SQLSERVERDBINIT dapat digunakan untuk menentukan SPN untuk koneksi. Properti koneksi SSPROP_INIT_FAILOVER_PARTNER_SPN di DBPROPSET_SQLSERVERDBINIT dapat digunakan untuk menentukan SPN untuk server mitra failover. |
Pengguna menentukan SPN untuk server atau server mitra failover dalam nama sumber data (DSN) ODBC. | SPN dapat ditentukan dalam ODBC DSN melalui kotak dialog penyiapan DSN. |
Pengguna menentukan SPN untuk server atau server mitra failover dalam kotak dialog Tautan Data atau Masuk OLE DB. | SPN dapat ditentukan dalam kotak dialog Tautan Data atau Masuk . Kotak dialog Masuk dapat digunakan dengan ODBC atau OLE DB. |
Aplikasi ODBC menentukan metode autentikasi yang digunakan untuk membuat koneksi. | Ketika koneksi berhasil dibuka, aplikasi dapat meminta atribut koneksi SQL_COPT_SS_INTEGRATED_AUTHENTICATION_METHOD untuk menentukan metode autentikasi mana yang digunakan. Nilai akan mencakup, tetapi tidak terbatas pada, NTLM dan Kerberos. |
Aplikasi OLE DB menentukan metode autentikasi yang digunakan untuk membuat koneksi. | Ketika koneksi berhasil dibuka, aplikasi dapat mengkueri properti koneksi SSPROP_AUTHENTICATION_METHOD di properti DBPROPSET_SQLSERVERDATASOURCEINFO diatur untuk menentukan metode autentikasi mana yang digunakan. Nilai akan mencakup, tetapi tidak terbatas pada, NTLM dan Kerberos. |
Failover
SPN tidak disimpan dalam cache failover dan oleh karena itu tidak dapat diteruskan di antara koneksi. SPN akan digunakan pada semua upaya koneksi ke prinsipal dan mitra ketika ditentukan dalam atribut string koneksi atau koneksi.
Kumpulan koneksi
Aplikasi harus menyadari bahwa menentukan SPN di beberapa tetapi tidak semua string koneksi dapat berkontribusi pada fragmentasi kumpulan.
Aplikasi dapat secara terprogram menentukan SPN sebagai atribut koneksi, alih-alih menentukan kata kunci string koneksi. Ini dapat membantu mengelola fragmentasi kumpulan koneksi.
Aplikasi harus menyadari bahwa SPN dalam string koneksi dapat ditimpa dengan mengatur atribut koneksi yang sesuai, tetapi string koneksi yang digunakan oleh pengumpulan koneksi akan menggunakan nilai string koneksi untuk tujuan pengumpulan.
Perilaku Server Tingkat Bawah
Perilaku koneksi baru diimplementasikan oleh klien; oleh karena itu, ini tidak spesifik untuk versi SQL Server.
Server dan Delegasi Tertaut
Saat server tertaut dibuat, parameter @provstr sp_addlinkedserver dapat digunakan untuk menentukan SPN mitra server dan failover. Manfaat melakukan ini sama dengan menentukan SPN dalam string koneksi klien: Lebih sederhana dan lebih dapat diandalkan untuk membuat koneksi yang menggunakan autentikasi Kerberos.
Delegasi dengan server tertaut memerlukan autentikasi Kerberos.
Aspek Manajemen SPN Yang Ditentukan oleh Aplikasi
Saat memilih apakah akan menentukan SPN dalam aplikasi (melalui string koneksi) atau secara terprogram melalui properti koneksi (daripada mengandalkan SPN yang dihasilkan penyedia defalt), pertimbangkan faktor-faktor berikut:
Keamanan: Apakah SPN yang ditentukan mengungkapkan informasi yang dilindungi?
Keandalan: Untuk mengaktifkan penggunaan SPN default, akun layanan tempat instans SQL Server berjalan harus memiliki hak istimewa yang memadai untuk memperbarui Direktori Aktif pada KDC.
Kenyamanan dan transparansi lokasi: Bagaimana SPN aplikasi akan terpengaruh jika databasenya berpindah ke instans SQL Server yang berbeda? Ini berlaku untuk server utama dan mitra failover-nya jika Anda menggunakan pencerminan database. Jika perubahan server berarti SPN harus diubah, bagaimana hal ini akan memengaruhi aplikasi? Apakah ada perubahan yang akan dikelola?
Menentukan SPN
Anda dapat menentukan SPN dalam kotak dialog dan dalam kode. Bagian ini membahas bagaimana Anda dapat menentukan SPN.
Panjang maksimum untuk SPN adalah 260 karakter.
Sintaks yang digunakan SPN dalam string koneksi atau atribut koneksi adalah sebagai berikut:
Sintaks | Deskripsi |
---|---|
MSSQLSvc/fqdn | SPN default yang dihasilkan penyedia untuk instans default saat protokol selain TCP digunakan. fqdn adalah nama domain yang sepenuhnya memenuhi syarat. |
MSSQLSvc/fqdn:port | SPN default yang dihasilkan penyedia saat TCP digunakan. port adalah nomor port TCP. |
MSSQLSvc/fqdn:InstanceName | SPN default yang dihasilkan penyedia untuk instans bernama saat protokol selain TCP digunakan. InstanceName adalah nama instans SQL Server. |
HOST/fqdn HOST/MachineName |
SPN yang memetakan ke akun komputer bawaan yang secara otomatis didaftarkan oleh Windows. |
Domain Nama@Pengguna | Spesifikasi langsung akun domain. Nama pengguna adalah nama akun pengguna Windows. Domain adalah nama domain Windows atau nama domain yang sepenuhnya memenuhi syarat. |
Domain MachineName$@ | Spesifikasi langsung akun komputer. (Jika server yang Anda sambungkan berjalan di bawah SISTEM LOKAL atau akun LAYANAN JARINGAN, untuk mendapatkan autentikasi Kerberos, ServerSPN dapat dalam format Domain MachineName$@.) |
KDCKey/MachineName | SPN yang ditentukan pengguna. KDCKey adalah string alfanumerik yang sesuai dengan aturan untuk kunci KDC. |
SPN Pendukung Sintaks ODBC dan OLE DB
Untuk informasi khusus sintaks, lihat topik berikut:
Lihat Juga
Fitur Klien Asli SQL Server
Daftarkan Nama Perwakilan Layanan untuk Koneksi Kerberos