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.)