適切なKerberos接続を取得するためにSPN(サービスプリンシパル名)を正確にフォーマットする方法と、SQLインスタンスごとに必要な数について、矛盾する情報を見つけています。
この2017年のMS文書には、次のものが含まれています。
SQL Server 2008以降、TCP / IP、名前付きパイプ、および共有メモリでのKerberos認証をサポートするために、SPN形式が変更されました。名前付きインスタンスとデフォルトインスタンスでサポートされるSPN形式は次のとおりです。
- 名前付きインスタンス:
MSSQLSvc/FQDN:[port|instancename]
- デフォルトのインスタンス:
MSSQLSvc/FQDN:port|MSSQLSvc/FQDN
新しいSPN形式では、ポート番号は必要ありません。つまり、マルチポートサーバーまたはポート番号を使用しないプロトコルは、Kerberos認証を使用できます。
この最後の段落は、次のいずれか1つのエントリのみが必要であることを意味します。
- 名前付きインスタンス:
MSSQLSvc/sqlbox1.mydomain.org/instance2
- デフォルトのインスタンス:
MSSQLSvc/sqlbox1.mydomain.org
これは、ポート番号だけでなく、使用する名前に関しても、この古い(2011)MSドキュメントと矛盾しているようです。
SPNを作成するには、SQL ServerのNetBIOS名または完全修飾ドメイン名(FQDN)を使用できます。ただし、NetBIOS名とFQDNの両方のSPNを作成する必要があります。
私の環境にすでに存在するSPNを見ると、さまざまな組み合わせがあり、一部のサーバーには最大4つのエントリがあります。
MSSQLSvc/sqlbox1
MSSQLSvc/sqlbox1:1433
MSSQLSvc/sqlbox1.mydomain.org
MSSQLSvc/sqlbox1.mydomain.org:1433
MS自身のKerberos構成マネージャーでさえ、最後の2つのバージョンを(適切に難読化して)生成したいようです:
同様に、既存の名前付きインスタンスの場合、奇妙な組み合わせが見られます。それらの一部はほぼ確実に無効です。
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
では、環境でTCPを使用するだけの場合、デフォルトインスタンスと名前付きインスタンスの両方について、実際のDSNはどのように見えるべきでしょうか。
ポートを含めるかどうか。または、ポートのあるものとないものを含めますか?
FQDNのみを使用するか、Netbios名のみのエントリが必要ですか?それとも、名前付きパイプ(私たちはそうではありません)を使用している場合のみでしょうか?
(コンテキストでは、SQL 2005から2014を実行し、一部はクラスター化され、その他はスタンドアロンです。接続はTCPのみを介して行われ、名前付きパイプは構成マネージャーで無効になっています。SQLサービスアカウントがそれらを作成できるようにする代わりに、手動で修正/作成します。サーバーの起動。)