SQL Serverの新規インストールをドメインアカウントで実行するように構成しようとしています。しかし、別のドメインアカウントを使用してサーバーに接続しようとすると断続的なエラーが発生し、ERRORLOGファイルをトロールするとThe SQL Server Network Interface library could not register the Service Principal Name
が引き続き表示されます。
サービスグループ(管理されたサービスアカウントではなく、通常のユーザーアカウントのみ)をADグループ(例:SQL Servers
)に追加し、ドメインComputers
コンテナーのACLにACEを追加しました、このグループでは、次を選択します。
これをすべてのドメインコントローラーに複製し、[有効なアクセス許可]タブとdsacls CN=SERVER01,CN=Computers,DC=fabrikam,DC=local
の両方を使用して、新しいACEが特定のコンピューターオブジェクトに継承されていることを確認しました。
Allow FABRIKAM\SQL Servers
SPECIAL ACCESS for Validated write to service principal name <Inherited from parent>
WRITE SELF
Allow FABRIKAM\SQL Servers
SPECIAL ACCESS for Validated write to service principal name <Inherited from parent>
WRITE SELF
WRITE PROPERTY
READ PROPERTY
ただし、SQL Serverサービスを再起動しても、could not register the Service Principal Name
メッセージが表示されます。サーバーも再起動しましたが、結果は同じです。
Sysinternals Process Explorerを使用して、実行中のsqlservr.exe
を検査しました。 [セキュリティ]タブには、正しいサービスユーザーとSQL Servers
グループのメンバーシップが明確に表示されています。
setspn -A
を使用して手動でSPNを追加できることはわかっていますが、それが本当の意味ではありません。
サービスアカウント(およびSQL Servers
グループに配置する将来のアカウント)が手動の介入なしに独自のSPNを自動的に登録できるようにするには、他に何をする必要がありますか?
AND/OR
ここで不足している特権/権限をさらに診断するにはどうすればよいですか?
見つけた。
SPNをサービスアカウントに手動で登録し、ADSIEditを使用してADを検査したところ、手動で登録されたSPNがComputerアカウントのservicePrincipalName
フィールドに格納されていないことがわかりました。ただし、特定のUserアカウントのservicePrincipalName
フィールド。
そのため、自分のSQL Servers
グループに独自のSPNを登録する権利を付与する代わりに、そのコンピューターでローカルシステム/ネットワークサービスアカウントとして実行されているサービスによって登録されたSPNを変更する権利を(不注意に)与えました。
Computers
コンテナから新しいACEを削除し、代わりに新しいSQL Servers
組織単位を作成しました。このOUにSELF
のACEを追加し、子孫usersに適用するように制限しました:
SQL Servers
OU ACL SELF
SQL Serverインスタンスを起動すると、予期されたThe SQL Server Network Interface library successfully registered the Service Principal Name
が表示され、リモート接続にKerberosが使用されています。
(内部プロセスのドキュメントを更新するため、新しいSQL Serverサービスアカウントをグループに追加するのではなく、新しいOUの下に作成する必要があります)
編集:ドメイン管理者は、setspn.exe
を使用して、SPNをドメインアカウントに手動で登録することもできます。
setspn -S MSSQLSvc/myhost.redmond.Microsoft.com:1433 DOMAIN\User
setspn -S MSSQLSvc/myhost.redmond.Microsoft.com DOMAIN\User
Kerberos接続のサービスプリンシパル名を登録する(TechNet) 。
編集2:Read servicePrincipalName
およびWrite servicePrincipalName
プロパティがACEリストに表示されない場合は、 Attribute Editor オブジェクトのPropertiesダイアログのタブで、 Filter ボタンをクリックして、以下を確認します。
(他の組み合わせでも機能する可能性がありますが、これは私にとってはそれです)
実行しているSQL Serverのバージョンやサービスアカウントのアクセス許可(管理されたサービスアカウントではなく、SPNを書き込んでいることを除く)は言わなかったが、提供している情報から、アカウントには自分自身をSPNとして登録する権限がありません。確かに、あなたはそれを明示的に認めています。
どうやら SQL 2012requiresvirtual account or Managed Service Account on Server 2008 :
データベースエンジンサービスは、起動時にサービスプリンシパル名(SPN)の登録を試みます。 SQL Serverを起動するアカウントにActive DirectoryドメインサービスにSPNを登録する権限がない場合、この呼び出しは失敗し、警告メッセージがアプリケーションイベントログとSQL Serverエラーログに記録されます。 SPNを登録するには、データベースエンジンがローカルシステム(非推奨)、NETWORK SERVICEなどのビルトインアカウント、またはドメイン管理者アカウントなどのSPNを登録する権限を持つアカウントで実行されている必要があります。 SQL ServerがWindows 7またはWindows Server 2008 R2オペレーティングシステムで実行されている場合、仮想アカウントまたは管理されたサービスアカウント(MSA)を使用してSQL Serverを実行できます。仮想アカウントとMSAの両方がSPNを登録できます。 SQL Serverがこれらのアカウントのいずれかで実行されていない場合、SPNは起動時に登録されないため、ドメイン管理者は手動でSPNを登録する必要があります。
お役に立てば幸いです。
SQLサービスで使用されるADアカウントの名前が20文字より長い場合、SetSpn.exeはADでそれを見つけることができず、Kerberosを使用してSQLセッションを認証する唯一の方法は、AD権限の再構成とSQLの再起動。名前パラメーターを短くしてSetSpn.exe -Sをだまそうとしないでください。SetSpn.exeはアカウントを検出しますが、Kerberosに対して「不一致」の名前で登録します。