Mendaftarkan Nama Perwakilan Layanan untuk koneksi Kerberos

Berlaku untuk:SQL Server

Untuk menggunakan autentikasi Kerberos dengan SQL Server, kedua kondisi berikut harus benar:

  • Komputer klien dan server harus menjadi bagian dari domain Windows yang sama, atau di domain tepercaya.

  • Nama Perwakilan Layanan (SPN) harus terdaftar di Direktori Aktif, yang mengasumsikan peran Pusat Distribusi Utama di domain Windows. SPN, setelah terdaftar, memetakan ke akun Windows yang memulai layanan instans SQL Server. Jika pendaftaran SPN belum dilakukan atau gagal, lapisan keamanan Windows tidak dapat menentukan akun yang terkait dengan SPN, dan autentikasi Kerberos tidak digunakan.

    Catatan

    Jika server tidak dapat mendaftarkan SPN secara otomatis, SPN harus didaftarkan secara manual. Lihat Pendaftaran SPN Manual.

Anda dapat memverifikasi bahwa koneksi menggunakan Kerberos dengan mengkueri sys.dm_exec_connections tampilan manajemen dinamis. Jalankan kueri berikut dan periksa nilai auth_scheme kolom, yaitu KERBEROS jika Kerberos diaktifkan.

SELECT auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;

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.

Peran SPN dalam autentikasi

Saat aplikasi membuka koneksi dan menggunakan Autentikasi Windows, SQL Server Native Client meneruskan nama komputer SQL Server, nama instans, dan, secara opsional, SPN. Jika koneksi melewati SPN, koneksi akan digunakan tanpa perubahan apa pun.

Jika koneksi tidak melewati SPN, SPN default dibuat berdasarkan protokol yang digunakan, nama server, dan nama instans.

Dalam kedua skenario sebelumnya, SPN dikirim ke Pusat Distribusi Kunci untuk mendapatkan token keamanan untuk mengautentikasi koneksi. Jika token keamanan tidak dapat diperoleh, autentikasi menggunakan NTLM.

SPN adalah nama tempat klien mengidentifikasi instans layanan secara unik. Layanan autentikasi Kerberos dapat menggunakan SPN untuk mengautentikasi layanan. Ketika klien ingin terhubung ke layanan, klien menemukan instans layanan, menyusun SPN untuk instans tersebut, terhubung ke layanan, dan menyajikan SPN agar layanan dapat mengautentikasi.

Catatan

Informasi dalam artikel ini juga berlaku untuk konfigurasi SQL Server yang menggunakan pengklusteran.

Autentikasi Windows adalah metode yang lebih disukai bagi pengguna untuk mengautentikasi ke SQL Server. Klien yang menggunakan Autentikasi Windows diautentikasi oleh NTLM atau Kerberos. Di lingkungan Direktori Aktif, autentikasi Kerberos selalu dicoba terlebih dahulu.

Izin

Ketika layanan Mesin Database dimulai, layanan ini mencoba mendaftarkan Nama Prinsipal Layanan (SPN). Misalkan akun yang memulai SQL Server tidak memiliki izin untuk mendaftarkan SPN di Active Directory Domain Services. Dalam hal ini, panggilan ini gagal, dan pesan peringatan dicatat di log peristiwa Aplikasi dan log kesalahan SQL Server.

Untuk mendaftarkan SPN, Mesin Database harus berjalan di bawah akun bawaan, seperti Local System (tidak disarankan), atau NETWORK SERVICE, atau akun yang memiliki izin untuk mendaftarkan SPN. Anda dapat mendaftarkan SPN menggunakan akun administrator domain, tetapi ini tidak direkomendasikan di lingkungan produksi. Anda dapat menjalankan SQL Server menggunakan akun virtual atau akun layanan terkelola (MSA). Baik akun virtual maupun MSA dapat mendaftarkan SPN. Jika SQL Server tidak berjalan di bawah salah satu akun ini, SPN tidak terdaftar saat startup, dan administrator domain harus mendaftarkan SPN secara manual.

Format SPN

Format SPN mendukung autentikasi Kerberos pada TCP/IP, pipa bernama, dan memori bersama. Format SPN yang didukung untuk instans bernama dan default adalah sebagai berikut.

Instans bernama

  • MSSQLSvc/<FQDN>:[<port> | <instancename>], di mana:

    • MSSQLSvc adalah layanan yang sedang didaftarkan.
    • <FQDN> adalah nama domain server yang sepenuhnya memenuhi syarat.
    • <port> adalah nomor port TCP.
    • <instancename> adalah nama instans SQL Server.

Instans default

  • MSSQLSvc/<FQDN>:<port> | MSSQLSvc/<FQDN>, di mana:

    • MSSQLSvc adalah layanan yang sedang didaftarkan.
    • <FQDN> adalah nama domain server yang sepenuhnya memenuhi syarat.
    • <port> adalah nomor port TCP.
Format SPN Deskripsi
MSSQLSvc/<FQDN>:<port>1 SPN default yang dihasilkan penyedia saat TCP digunakan. <port> adalah nomor port TCP.
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>:<instancename> SPN default yang dihasilkan penyedia untuk instans bernama saat protokol selain TCP digunakan. <instancename> adalah nama instans SQL Server.

1 Format SPN tidak memerlukan nomor port. Server multi-port, atau protokol yang tidak menggunakan nomor port, masih dapat menggunakan autentikasi Kerberos.

Untuk koneksi TCP/IP, di mana port TCP disertakan dalam SPN, SQL Server harus mengaktifkan protokol TCP bagi pengguna untuk terhubung dengan menggunakan autentikasi Kerberos.

Pendaftaran SPN otomatis

Ketika instans Mesin Database SQL Server dimulai, SQL Server mencoba mendaftarkan SPN untuk layanan SQL Server. Ketika instans dihentikan, SQL Server mencoba membatalkan pendaftaran SPN. Untuk koneksi TCP/IP, SPN terdaftar dalam format MSSQLSvc/<FQDN>:<tcpport>. Instans bernama dan instans default terdaftar sebagai MSSQLSvc, mengandalkan <tcpport> nilai untuk membedakan instans.

Untuk koneksi lain yang mendukung Kerberos, SPN terdaftar dalam format MSSQLSvc/<FQDN>:<instancename> untuk instans bernama. Format untuk mendaftarkan instans default adalah MSSQLSvc/<FQDN>.

Untuk memberikan izin ke akun startup SQL Server, untuk mendaftar dan mengubah SPN, lakukan langkah-langkah berikut:

  1. Pada komputer Pengendali Domain, navigasikan ke Pengguna direktori aktif dan Komputer.

  2. Pilih Tampilkan > Tingkat Lanjut.

  3. Di bawah Komputer, temukan komputer SQL Server, lalu klik kanan dan pilih Properti.

  4. Pilih tab Keamanan dan pilih Tingkat Lanjut.

  5. Dalam daftar, jika akun startup SQL Server tidak tercantum, pilih Tambahkan untuk menambahkannya. Setelah ditambahkan, lakukan langkah-langkah berikut:

    1. Pilih akun dan pilih Edit.

    2. Di bawah Izin pilih Layanan Tulis TervalidasiPrincipalName.

    3. Gulir ke bawah dan pada Properti, pilih:

      • Read servicePrincipalName
      • Write servicePrincipalName
    4. Pilih OK dua kali.

  6. Tutup Pengguna dan Komputer Active Directory.

Intervensi manual mungkin diperlukan untuk mendaftar atau membatalkan pendaftaran SPN jika akun layanan tidak memiliki izin yang diperlukan untuk tindakan ini.

Pendaftaran SPN manual

Untuk mendaftarkan SPN secara manual, Anda dapat menggunakan alat setspn yang disertakan dalam Windows. setspn.exe adalah alat baris perintah yang memungkinkan Anda membaca, memodifikasi, dan menghapus properti direktori Nama Prinsipal Layanan (SPN). Alat ini juga memungkinkan Anda untuk melihat SPN saat ini, mengatur ulang SPN default akun, dan menambahkan atau menghapus SPN tambahan.

Untuk informasi selengkapnya tentang alat setspn , izin dan contoh yang diperlukan tentang cara menggunakannya, tinjau setspn.

Contoh berikut mengilustrasikan sintaks yang digunakan untuk mendaftarkan SPN secara manual untuk koneksi TCP/IP menggunakan akun pengguna domain:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com:1433 redmond\accountname

Catatan

Jika SPN sudah ada, SPN harus dihapus sebelum dapat didaftarkan ulang. Anda melakukan ini dengan menggunakan setspn dengan sakelar -D . Contoh berikut menggambarkan cara mendaftarkan SPN berbasis instans baru secara manual. Untuk instans default menggunakan akun pengguna domain, gunakan:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com redmond\accountname

Untuk instans bernama, gunakan:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com:instancename redmond\accountname

Untuk informasi selengkapnya tentang konfigurasi grup ketersediaan AlwaysOn, lihat Listener dan Kerberos (SPN).

Sambungan klien

SPN yang ditentukan pengguna didukung di driver klien. Namun, jika SPN tidak disediakan, spN dibuat secara otomatis berdasarkan jenis koneksi klien. Untuk koneksi TCP, SPN dalam format MSSQLSvc/FQDN:[<port>] digunakan untuk instans bernama dan default.

Untuk pipa bernama dan koneksi memori bersama, SPN dalam format MSSQLSvc/<FQDN>:<instancename> digunakan untuk instans bernama dan MSSQLSvc/<FQDN> digunakan untuk instans default.

Menggunakan akun layanan sebagai SPN

Akun layanan dapat digunakan sebagai SPN. Mereka ditentukan melalui atribut koneksi untuk autentikasi Kerberos dan mengambil format berikut:

  • username\@domain atau domain\username untuk akun pengguna domain

  • machine$\@domain atau host\FQDN untuk akun domain komputer seperti Local System atau NETWORK SERVICE.

Untuk menentukan metode autentikasi koneksi, jalankan kueri berikut.

SELECT net_transport, auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;

Default autentikasi

Tabel berikut ini menjelaskan default autentikasi yang digunakan berdasarkan skenario pendaftaran SPN.

Skenario Metode autentikasi
SPN memetakan ke akun domain, akun virtual, MSA, atau akun bawaan yang benar. Misalnya, Local System atau NETWORK SERVICE. Koneksi lokal menggunakan NTLM, koneksi jarak jauh menggunakan Kerberos.
SPN adalah akun domain, akun virtual, MSA, atau akun bawaan yang benar. Koneksi lokal menggunakan NTLM, koneksi jarak jauh menggunakan Kerberos.
SPN memetakan ke akun domain, akun virtual, MSA, atau akun bawaan yang salah Autentikasi gagal.
Pencarian SPN gagal atau tidak memetakan ke akun domain, akun virtual, MSA, atau akun bawaan yang benar, atau bukan akun domain, akun virtual, MSA, atau akun bawaan yang benar. Koneksi lokal dan jarak jauh menggunakan NTLM.

Catatan

'Benar' berarti bahwa akun yang dipetakan oleh SPN terdaftar adalah akun tempat layanan SQL Server berjalan.

Komentar

Koneksi Administrator Khusus (DAC) menggunakan SPN berbasis nama instans. Autentikasi Kerberos dapat digunakan dengan DAC jika SPN tersebut berhasil didaftarkan. Sebagai alternatif, pengguna dapat menentukan nama akun sebagai SPN.

Jika pendaftaran SPN gagal selama startup, kegagalan ini dicatat di log kesalahan SQL Server, dan startup berlanjut.

Jika deregistrasi SPN gagal selama pematian, kegagalan ini dicatat dalam log kesalahan SQL Server, dan pematian berlanjut.

Langkah berikutnya