Saya menemukan informasi yang bertentangan untuk cara memformat SPN (Nama Prinsip Layanan) yang tepat untuk mendapatkan koneksi Kerberos yang tepat, dan berapa banyak yang saya butuhkan untuk setiap instance SQL.
Dokumen MS 2017 ini berisi yang berikut:
Dimulai dengan SQL Server 2008, format SPN diubah untuk mendukung otentikasi Kerberos pada TCP / IP, pipa bernama, dan memori bersama. Format SPN yang didukung untuk instance bernama dan default adalah sebagai berikut.
- Contoh bernama:
MSSQLSvc/FQDN:[port|instancename]
- Contoh default:
MSSQLSvc/FQDN:port|MSSQLSvc/FQDN
Format SPN baru tidak memerlukan nomor port . Ini berarti bahwa server multi-port atau protokol yang tidak menggunakan nomor port dapat menggunakan otentikasi Kerberos.
Saya mengambil paragraf terakhir ini berarti bahwa saya hanya perlu satu entri, salah satu dari yang berikut:
- Contoh bernama:
MSSQLSvc/sqlbox1.mydomain.org/instance2
- Contoh default:
MSSQLSvc/sqlbox1.mydomain.org
Itu tampaknya bertentangan dengan dokumen MS yang lebih lama (2011) ini , tidak hanya tentang nomor port, tetapi juga mengenai nama yang akan digunakan:
Untuk membuat SPN, Anda bisa menggunakan nama NetBIOS atau FQDN dari SQL Server. Namun, Anda harus membuat SPN untuk nama NetBIOS dan FQDN .
Ketika saya melihat SPN yang sudah ada di lingkungan saya, saya melihat berbagai kombinasi, beberapa server memiliki hingga 4 entri:
MSSQLSvc/sqlbox1
MSSQLSvc/sqlbox1:1433
MSSQLSvc/sqlbox1.mydomain.org
MSSQLSvc/sqlbox1.mydomain.org:1433
Bahkan manajer konfigurasi MS Kerberos sendiri tampaknya ingin membuat dua versi terakhir (dengan kebingungan yang tepat):
Demikian pula untuk instance bernama yang ada, saya melihat campuran aneh, beberapa dari mereka hampir pasti tidak valid:
MSSQLSvc/sqlbox1:1522
MSSQLSvc/sqlbox1:instance2
MSSQLSvc/sqlbox1.mydomain.org:1522
MSSQLSvc/sqlbox1.mydomain.org:instance2
MSSQLSvc/sqlbox1.mydomain.org/instance2
MSSQLSvc/sqlbox1.mydomain.org:1522:instance2
Jadi seperti apa seharusnya DSN saya sebenarnya, untuk instance default dan bernama, jika saya hanya menggunakan TCP di lingkungan saya?
Haruskah saya memasukkan port, atau tidak? Atau termasuk satu dengan port dan satu tanpa?
Gunakan FQDN saja, atau apakah saya perlu entri hanya dengan nama Netbios? Atau apakah itu hanya jika kita menggunakan pipa bernama (yang bukan kita)?
(Untuk konteks, kami menjalankan SQL 2005 hingga 2014, beberapa berkerumun, yang lain berdiri sendiri. Konektivitas hanya melalui TCP, pipa bernama dinonaktifkan di config manager. Kami akan memperbaiki / membuat ini secara manual alih-alih membiarkan akun layanan SQL untuk membuatnya pada mulai server.)
sumber
Jawaban:
Jika Anda hanya menggunakan TCP / IP untuk terhubung ke instance Anda, Anda hanya perlu port yang ditentukan. Nama Instance digunakan saat menghubungkan ke SQL Instances melalui protokol Named Pipes. Sayangnya artikel MS tidak langsung mengatakan format mana yang diperlukan untuk protokol mana, tetapi berasal dari (banyak tes di lingkungan saya) dan kalimat artikel MS berikut :
Mengenai FQDNs vs nama NETBIOS, saya akan merekomendasikan FQDNs karena mereka tidak rentan terhadap masalah jika Anda menghadapi masalah server DNS acak.
Diangkat dari posting blog saya tentang masalah ini, format akan terlihat sebagai berikut:
Referensi sumber dari MS dapat ditemukan di sini .
Sekarang untuk menjadikan Hari Admin Jaringan Anda (mis. Konfigurasi OU yang memungkinkan untuk Mendaftarkan Diri SPN)
Admin Jaringan Anda dapat membuat OU di domain yang berisi semua akun Layanan SQL Server Anda yang dapat dikonfigurasi sedemikian rupa sehingga Akun Layanan dapat membuat SPN untuk dirinya sendiri dan sendiri. Metode ini terutama mengikuti blog Ryan Reis , tetapi memiliki beberapa penyesuaian kecil sehingga pemberian yang berlebihan tidak dilakukan.
Proses ini menjelaskan pembuatan OU di domain yang memungkinkan akun di dalamnya mendaftarkan sendiri SPN mereka:
Setelah mengikuti langkah-langkah di atas, wadah OU yang dimaksud sekarang dikonfigurasikan sedemikian sehingga setiap akun yang ditambahkan ke dalamnya akan dapat mendaftar dan menghapus SPN untuk dirinya sendiri dan sendiri. Ini adalah jumlah izin yang tepat karena akun ini tidak dapat menginjak-injak SPN yang terdaftar oleh akun lain.
Tujuan memulai kembali SQL Server pada langkah 16 adalah untuk memastikan SPN terdaftar seperti yang diharapkan. SQL akan mencoba untuk menghapus SPN yang terdaftar pada saat shutdown dan menambahkannya pada Startup, sehingga restart hanya diperlukan jika tidak ada SPN yang ada saat ini untuk layanan SQL Server tersebut.
Catatan terakhir pada pendekatan ini adalah bahwa jika Anda menjalankan SQL Server dalam konfigurasi Failover Clustered Instance (FCI) tradisional, TIDAK disarankan untuk menambahkan akun layanan instance ini ke OU ini, per KB 2443457 .
Saya benar-benar perlu memposting Bagian 2 dari seri Kerberos saya ...
sumber
Ketika layanan SQL Server membuat SPN, itu menciptakan dua untuk setiap contoh. Ini adalah format yang digunakannya.
Mesin Virtual Default:
Mesin Virtual Bernama:
Untuk instance bernama Anda, jika membuat SPNs secara manual, Anda harus memiliki port statis alih-alih port dinamis default.
sumber