ターゲットプリンシパル名が正しくありません。SSPIコンテキストを生成できません


96

マシンAからSQLServerを実行しているマシンBへのSQLServer接続を取得するのに苦労しています。

私は広範囲にグーグルで検索しました、そして、私が見つけたすべてのものはうまくいきませんでした。また、これを解決するプロセスを段階的に説明することもありません。

Kerberosは使用していませんが、構成されている場合はNTLMを使用しています。

ここに画像の説明を入力してください

関連するマシンは次のとおりです(xxは、セキュリティ上の目的でマシン名の一部を隠すために使用されます)。

  • xxPRODSVR001 -Windows Server2012ドメインコントローラー
  • xxDEVSVR003 -Windows Server 2012(このマシンはエラーを生成しています)
  • xxDEVSVR002 -Windows Server 2012(このマシンはSQL Server 2012を実行しています)

以下のSPNがDC(xxPRODSVR001)に登録されています。セキュリティ上の理由から、ドメインをyyyで隠しています。

CN = xxDEVSVR002、CN = Computers、DC = yyy、DC = localの登録済みServicePrincipalNames:

            MSSQLSvc/xxDEVSVR002.yyy.local:49298

            MSSQLSvc/xxDEVSVR002.yyy.local:TFS

            RestrictedKrbHost/xxDEVSVR002

            RestrictedKrbHost/xxDEVSVR002.yyy.local

            Hyper-V Replica Service/xxDEVSVR002

            Hyper-V Replica Service/xxDEVSVR002.yyy.local

            Microsoft Virtual System Migration Service/xxDEVSVR002

            Microsoft Virtual System Migration Service/xxDEVSVR002.yyy.local

            Microsoft Virtual Console Service/xxDEVSVR002

            Microsoft Virtual Console Service/xxDEVSVR002.yyy.local

            SMTPSVC/xxDEVSVR002

            SMTPSVC/xxDEVSVR002.yyy.local

            WSMAN/xxDEVSVR002

            WSMAN/xxDEVSVR002.yyy.local

            Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/xxDEVSVR002.yyy.local

            TERMSRV/xxDEVSVR002

            TERMSRV/xxDEVSVR002.yyy.local

            HOST/xxDEVSVR002

            HOST/xxDEVSVR002.yyy.local

CN = xxDEVSVR003、CN = Computers、DC = yyy、DC = localの登録済みServicePrincipalNames:

            MSSQLSvc/xxDEVSVR003.yyy.local:1433

            MSSQLSvc/xxDEVSVR003.yyy.local

            Hyper-V Replica Service/xxDEVSVR003

            Hyper-V Replica Service/xxDEVSVR003.yyy.local

            Microsoft Virtual System Migration Service/xxDEVSVR003

            Microsoft Virtual System Migration Service/xxDEVSVR003.yyy.local

            Microsoft Virtual Console Service/xxDEVSVR003

            Microsoft Virtual Console Service/xxDEVSVR003.yyy.local

            WSMAN/xxDEVSVR003

            WSMAN/xxDEVSVR003.yyy.local

            TERMSRV/xxDEVSVR003

            TERMSRV/xxDEVSVR003.yyy.local

            RestrictedKrbHost/xxDEVSVR003

            HOST/xxDEVSVR003

            RestrictedKrbHost/xxDEVSVR003.yyy.local

            HOST/xxDEVSVR003.yyy.local

SQL Serverのエラーメッセージだけがより説明的で、接続しようとしているプリンシパル名を教えてくれれば、これを診断できる可能性があります。

それで、誰かがこれを解決する方法を私に教えてもらえますか、それとも私が提供したものの中に間違っているものを見ることができますか?

より多くのデバッグ情報を生成できれば幸いです。必要なものを教えてください。


内部DNSサーバーは実行していません。しかし、これを問題として排除するために、「ping -a xxxx」を実行する必要があると言っているのですか、それとも重複があるかどうかを判断する別の方法がありますか?
TheEdge 2015

私は専門家ではありませんが、SPNとSSPIはKerberosのものだと思いましたか?Kerberosを使用していませんか?
ディランスミス

@DylanSmith見えない..... SQL ServerでSPを実行すると(名前を忘れて)、すべてNTLMとして表示されました。私がチェックする方法を知っていますか?
TheEdge 2015

私は、時間節約、質問は古いです知っているし、このツールを実行します。microsoft.com/en-us/download/...
エドゥアルド・

回答:


59

作業中のASP.NETMVCアプリでこの問題が発生しました。

最近パスワードを変更したことに気づき、ログアウトして再度ログインすることでパスワードを修正することができました。


1
これが私の問題でした。パスワード変更済み。私のアカウントでアプリプールを実行していました。
Dragos Durlut 2017年

この問題が発生したときは、ログアウトして再度ログインしました。問題を解決しました。
shary.sharath

同様の問題。これは私が自分の行動を振り返るのに役立ちました。TQ
レディ

26

Windows認証を使用してSQLServer Management Studio経由で接続すると、このエラーが発生しました。パスワードの有効期限が切れましたが、まだ変更していません。変更したら、新しい資格情報を使用してマシンが機能するように、ログアウトしてから再度ログインする必要がありました。


1
この問題が発生しました。パスワードの有効期限が切れました。ログイン中にパスワードを変更してから接続しようとしましたが、このエラーが発生しました。次に、マシンをロックしてから、新しいパスワードでロックを解除すると、再び接続できました
bgura 2020

再起動しても必ずしもうまくいくとは限りませんが、ロック/ロック解除はそうです
Andrew Brick17

23

Integrated Security=trueこのパラメータを接続文字列から削除するように設定してみてください。


重要:ユーザー@Auspexがコメントしたように、

Windows資格情報を使用してログインしようとするとエラーが発生するため、統合セキュリティを削除すると、このエラーを防ぐことができます。残念ながら、ほとんどの場合、Windows資格情報を使用してログインできるようにする必要があります


接続がSSMSを介している場合、どのようにそれを削除しますか?
Geoff Dawdy 2018年

24
Windows資格情報を使用してログインしようとするとエラーが発生Integrated Security するため、明確に削除するこのエラー防ぐことできます。残念ながら、ほとんどの場合、Windows資格情報を使用してログインできるようにする必要があります。
Auspex 2018年

2
@GeoffDawdy以下の私の答えが役立つかもしれませんか?パスワードの有効期限が切れたため、パスワードを変更し、ログアウトしてから再度ログインする必要がありました。その後、すべてが正常に機能しました。
マットシェパード

3
自分で保存し、時間と、このツールを実行します。microsoft.com/en-us/download/...
エドゥアルド・

15

Windows認証を試したときに同じエラーが発生していました。ばかげているように聞こえますが、他の誰かに役立つ場合に備えて、ログインしている間にドメインアカウントが何らかの理由でロックされたためです(!)。アカウントのロックを解除すると修正されました。


13

パスワードの代わりにPINを使用してWindows10にログインしていました。代わりに、ログアウトしてパスワードを使用して再度ログインし、ManagementStudioを介してSQLServerにアクセスできました。


それはばかげています。そしてそれはうまくいった。私はこれに多くの時間を無駄にしてきました。ありがとうございました!
mcb2k3 2018年

2
おっと、それは完全ではありませんでした。SSMSは、私が探していなかったときにスイッチを入れて、SQLServerアカウントに戻りました。しかし、私はついに、Microsoftアカウントを使用してローカルにログインすることから、ローカルアカウントをローカルで使用することに切り替えることを試みました。これでうまくいき、PINを使用してログインしても機能するようになりました。
mcb2k3 2018年

ええ、PINの代わりにパスワードを使用することも私のために働きました。Microsoftの場合は+1。
BrunoMartinsPro

ああ、神様!これが実際に違いを生んだとは信じられません!
アルニ

9

SSPIコンテキストエラーは、Kerberosを使用して認証が試行されていることを明確に示しています。

Kerberos認証ので、SQL ServerのWindows認証は、に依存している Active Directoryのコンピュータとネットワークのドメインコントローラとの間に突きつけた関係を必要とし、あなたはその関係を検証することによって開始する必要があります。

次のPowershellコマンドTest-ComputerSecureChannelを使用して、その関係をすばやく確認できます。

Test-ComputerSecureChannel -verbose

ここに画像の説明を入力してください

Falseが返された場合は、コンピューターのActive Directoryのセキュリティで保護されたチャネルを修復する必要があります。これがないと、コンピューターの外部でドメイン資格情報の検証ができないためです。

次のPowershellコマンドを使用して、コンピューターのセキュリティで保護されたチャネルを修復できます。

Test-ComputerSecureChannel -Repair

セキュリティイベントログを確認します。Kerberosを使用している場合は、認証パッケージKerberosを使用したログオン試行が表示されます。

NTLM認証が失敗している可能性があるため、Kerberos認証が試行されています。また、セキュリティイベントログにNTLMログオン試行の失敗が表示される場合がありますか?

非常に冗長ですが、devでkerberosイベントログをオンにして、kerberosが失敗する理由をデバッグすることができます。

MicrosoftのSQLServer用Kerberos構成マネージャーは、この問題をすばやく診断して修正するのに役立つ場合があります。

ここに読むべき良い話があります:http//houseofbrick.com/microsoft-made-an-easy-button-for-spn-and-double-hop-issues/


これで問題が解決しました。SPNがActiveDirectoryの間違ったユーザーオブジェクトに登録されました。SQLServer用のKerberosConfiguration Managerは、2回のクリックで修正しました。
クレイグ-MSFT20年

8

この最もあいまいなエラーに別の潜在的な解決策を追加するだけThe target principal name is incorrect. Cannot generate SSPI context. (.Net SqlClient Data Provider)です:

SQL Serverにpingを実行するときに解決されるIPが、ConfigurationManagerのIPと同じであることを確認します。確認するには、SQL Server構成マネージャーを開き、[SQLServerネットワーク構成]> [MSSQLServerのプロトコル]> [TCP / IP]に移動します。

TCP / IPが有効になっていることを確認し、[IPアドレス]タブで、ping時にサーバーが解決するIPがここと同じであることを確認します。これでこのエラーは修正されました。


6

この問題は、Windowsの資格情報の問題のようです。VPNを使用する仕事用ラップトップでも同じエラーが発生していました。ドメイン/ユーザー名としてログインしていると思われます。これは直接接続するときに正常に使用されますが、別の接続でVPNに移動するとすぐに、このエラーが発生します。サーバーにpingを実行できるため、DNSの問題だと思いましたが、コマンドプロンプトからユーザーとしてSMSSを明示的に実行する必要があることがわかりました。

例:runas / netonly / user:YourDoman \ YourUsername "C:\ Program Files(x86)\ Microsoft SQL Server Management Studio 18 \ Common7 \ IDE \ Ssms.exe"


同様の問題が発生しました(WindowsVMを搭載したiMacvpn)。私は自分の仕事のDNSサーバーをMacのWi-Fiネットワーク設定に追加することでそれを解決しました。もっと良い方法があると思いますが、これでうまくいきました。
ErikPearson20年

5

SQLボックスとクライアントの両方にログインし、次のように入力します。

ipconfig /flushdns
nbtstat -R

それでも問題が解決しない場合は、クライアントマシンのDHCPを更新してください...これは、オフィスの2台のPCで機能します。


私のクライアントマシンとSQLボックスプラスipconfig/releaseと私のクライアントマシンであなたの答えをしましたが、ipconfig/renewそれは私にとってはうまく
AlbatrossCafe

4

私はこれに遭遇し、2つのことをして修正しました:

  1. https://support.microsoft.com/en-us/kb/811889で説明されているように、ADSIEditを使用してサービスアカウントに読み取り/書き込みservicePrincipalNameアクセス許可を付与する
  2. を使用して、(サービスアカウントではなく)SQLServerコンピューターアカウントに以前に存在していたSPNを削除する

    setspn -D MSSQLSvc/HOSTNAME.domain.name.com:1234 HOSTNAME
    

    ここで、1234はインスタンスによって使用されるポート番号でした(私のものはデフォルトのインスタンスではありませんでした)。


MS SQLServerインスタンスをNT Service\MSSQLSSERVERマネージドサービスアカウントとしての実行から実行に切り替えました。そうすると、SSMSはサーバー上のローカルでデータベースに接続できますが、ラップトップからリモートで接続することはできません。SPNを修正すると、問題が解決しました。
Hydrargyrum


4

分離されたネットワーク内のPCのクラスターでIPv6をテストしていましたが、IPv4に戻したときにこの問題が発生しました。私はActiveDirectory、DNS、DHCPで遊んでいたので、Kerberosの設定を破るために何を提案したのかわかりません。

見つけたリモート接続を接続するためのこの便利なヒントを使用して、ソフトウェアの外部で接続を再テストしました。

https://blogs.msdn.microsoft.com/steverac/2010/12/13/test-remote-sql-connectivity-easily/

次に、簡単な検索の後、MicrosoftのWebサイトhttps://support.microsoft.com/en-gb/help/811889/how-to-troubleshoot-the-cannot-generate-sspi-context-error-messageでこれを見つけました 。

SQLサーバーでツールを実行し、ステータスにエラーが表示されている場合に問題があるかどうかを確認してから、表示される修正ボタンを押します。

これで問題は解決しました。


3

これは通常、サービスプリンシパル名(SPN)が欠落しているか、正しくないか、重複していることが原因です。

解決する手順:

  1. SQLServerが使用しているADアカウントを確認します
  2. 管理者モードのPowershellまたはCMDで次のコマンドを実行します(サービスアカウントにドメインを含めることはできません)
setspn -L <ServiceAccountName> | Select-String <ServerName> | select line
  1. 返される出力に、ポートありとポートなしの完全修飾、完全修飾なしのSPNが含まれていることを確認してください。

    期待される出力:

    Registered ServicePrincipalNames for CN=<ServiceAccountName>,OU=CSN Service Accounts,DC=<Domain>,DC=com: 
    MSSQLSvc/<ServerName>.<domain>.com:1433
    MSSQLSvc/<ServerName>:1433                                           
    MSSQLSvc/<ServerName>.<domain>.com
    MSSQLSvc/<ServerName>
    
  2. 上記のすべてが表示されない場合は、PowerShellで次のコマンドを実行するか、管理者モードでCMDを実行します(デフォルトの1433を使用しない場合は、必ずポートを変更してください)。

SETSPN -S  MSSQLSvc/<ServerName> <Domain>\<ServiceAccountName> 
SETSPN -S  MSSQLSvc/<ServerName>.<Domain> <Domain>\<ServiceAccountName> 
SETSPN -S  MSSQLSvc/<ServerName>:1433 <Domain>\<ServiceAccountName> 
SETSPN -S  MSSQLSvc/<ServerName>.<Domain>:1433 <Domain>\<ServiceAccountName>
  1. 上記が完了すると、通常、DNSの伝播に数分かかります

また、重複するSPNが見つかったというメッセージが表示された場合は、それらを削除して再作成することをお勧めします。


2

Webアプリケーションにアクセスするときにこの問題が発生しました。最近Windowsのパスワードを変更したことが原因かもしれません。

この問題は、Webアプリケーションをホストしているアプリプールのパスワードを更新したときに解決されました。


2

クライアントとサーバー間の時計の一致を確認してください。

このエラーが断続的に発生した場合、上記の回答はいずれも機能しませんでした。一部のサーバーで時間がずれていたことがわかりました。サーバーを再度同期すると、エラーは解消されました。w32tmまたはNTPを検索して、Windowsで時刻を自動的に同期する方法を確認してください。


1

私は自分の問題の解決策を探すときにここに着陸したので、他の人もここに着陸した場合に備えて、ここで解決策を共有します。

マシンが別のドメインの別のオフィスに移動するまで、SQLServerに正常に接続していました。次に、切り替え後、ターゲットプリンシパル名に関してこのエラーが発生していました。server.domain.comなどの完全修飾名を使用して接続していた問題を修正しました。実際、最初のサーバーにそのように接続すると、サーバー名だけを使用して(完全な資格なしで)他のサーバーに接続できますが、マイレージは異なる場合があります。


この問題は、SQL接続に証明書を追加したときにのみ発生しました。証明書はFQDNに発行されたため、FQDN \ Instanceに接続すると機能しました。
Slogmeister Extraordinaire 2017

1

私は今日これに遭遇し、これは単に見落とされて修正しやすいので、私の修正を共有したいと思いました。

私たちは独自のrDNSを管理し、最近サーバーの命名スキームを作り直しました。その一環として、rDNSを更新する必要があり、これを行うのを忘れていました。

pingは正しいホスト名を検出しましたが、ping-aは間違ったホスト名を返しました。

簡単な修正:rDNSを変更し、ipconfig / flushdnsを実行し、30秒待機し(私が行うこと)、別のping -aを実行し、正しいホスト名を解決することを確認し、接続します...利益。


1

私はこれのために新しいものに出くわしました:サーバー2012でホストされているSQL2012。SQLAlwaysOnのクラスターを作成するタスクがありました。
クラスターが作成され、全員がSSPIメッセージを受け取りました。

問題を修正するには、次のコマンドを実行しました。

setspn -D MSSQLSvc/SERVER_FQNName:1433 DomainNamerunningSQLService

DomainNamerunningSQLService== SQLに設定したドメインアカウントコマンドを実行するには、ドメイン管理者が必要でした。クラスター内の1つのサーバーのみに問題がありました。

次に、SQLを再起動しました。驚いたことに、私は接続することができました。


これと同じ問題が発生しましたが、クラスターでは発生しませんでした。SQLEngineサービスのログオンをドメインアカウントに変更しました。MSSQLSvc/SERVER_FQNName:*コンピューターアカウントからSPNを削除してから、サービスを実行しているユーザーアカウントに追加する必要がありました。
SlogmeisterExtraordinaire18年

1

Visual Studio 2015コンソールアプリで、ラップトップからSQL Server2015を実行しているVMに接続しようとしました。前の晩にアプリを実行しましたが、問題ありません。午前中にアプリをデバッグしようとすると、このエラーが発生します。私が試したipconfig/flushし、release+renewやその他のゴミのAA束が、最終的には...

VMを再起動し、クライアントを再起動します。それは私のためにそれを修正しました。私は知っているべきだった、再起動は毎回動作します。


同様の経験、VM上のSQLServer2016。接続が失敗し始めた理由がわかりません。VMを再起動すると、クライアントを再起動せずに修正されました。
youcantryreachingme

1

私は私のSQLサーバーでこの問題を抱えていました。私はsetspn-D mssqlsvc \ Hostname.domainname Hostnameを停止し、SQLサーバーサービスを開始しました。

SQLサービスを停止して開始するだけでうまくいくと思います。


これはsetspn -L <Hostname>、動作したサーバーと比較した後に行ったことです。動作したすべてのインスタンスにSPNが登録されていないことが判明しました。自分が何をしているのかよくわかりませんが、SPNが登録されていなくても、NTLMを使用できるようです。ありがとう!
BenderBoy

どうやらそうすべきであるように、NTLMの代わりにKerberosを使用したい場合、これは実際には解決策ではないことに注意してください:serverfault.com/a/384721。実際、このソリューションは基本的にKerberos認証をオフにします。
BenderBoy

1

同じ問題が発生しましたが、マシンのロックとロック解除はうまくいきました。ファイアウォールの問題でエラーが発生する場合があります。

私の経験を共有するだけで、それがあなたのために働くかどうかはわかりません。


1

私はここですべての解決策を試しましたが、どれもまだ機能していません。動作している回避策は、[接続]をクリックし、サーバー名を入力して、[オプション]、[接続プロパティ]タブを選択することです。「ネットワークプロトコル」を「名前付きパイプ」に設定します。これにより、ユーザーはネットワーク資格情報を使用してリモート接続できます。修正があったら更新を投稿します。


私は実際に「TCP / IP」に設定しました。これを変更する行為が問題か、私のネットワーク状況のための特定の設定を固定した場合、私はわからない...
Zarepheth

1

私の場合、問題はWi-FiでDNSを設定することでした。設定を削除し、空のままにして作業しました。

ComoficouminhaconfiguraçãodoDNS


1

「SQLServer構成マネージャー」から「名前付きパイプ」が有効になっていることを確認します。これは私のために働いた。

  1. 「SQLServer構成マネージャー」を開きます。
  2. 左側のリストから[SQLServerネットワーク構成]を展開します。
  3. 「[インスタンス名]のプロトコル」を選択します。
  4. 右側のリストから「名前付きパイプ」を右クリックします。
  5. 「有効にする」を選択します
  6. インスタンスサービスを再起動します。

1
同じメッセージがありました。私はIPに接続しようとしていたので、stackoverflow.com / users / 8568873 / s3minaki、つまり手順1〜6を実行しましたが、名前付きパイプの代わりにTCP / IPを有効にしました。また、IPALLの下で、TCP動的ポートをクリアし、代わりにTCPポートを設定しました。他のインスタンスがこのポートを実行していないことを確認してください。そうしないと、インスタンスは再起動しません。SQLユーザーも必要でした。Windows認証は機能しません。SQL Managerで、xxxx \ instancename、portnrに接続します。すなわち127.0.0.1 \ SQLEXPRESS、1433
トマスヘッセ


1

私の状況では、統合セキュリティを使用して、ドメインのないネットワーク上の別のPC上のPCからSQLServerに接続しようとしていました。両方のPCで、同じMicrosoftアカウントでWindowsサインインしていました。両方のPCでローカルアカウント切り替えたところ、 SQLServerが正常に接続されました。


1

私の場合、開発環境で作業していたため、誰かがドメインコントローラーをシャットダウンし、Windows資格情報を認証できませんでした。ドメインコントローラーをオンにした後、エラーは消え、すべてが正常に機能しました。


1

ネットワーク接続によって引き起こされるこの問題のもう1つのニッチ。Windows VPNクライアント経由で接続しましたが、Wi-Fiから有線接続に切り替えるとこの問題が発生しました。私の状況の修正は、アダプターのメトリックを手動で調整することでした。

PowerShellでは、Get-NetIPInterfaceを使用して、すべてのメトリック値を確認します。数値が小さいほどコストが低いため、Windowsで優先されます。イーサネットとVPNを切り替えたところ、SSMSが満足するために必要な場所に資格情報が表示されました。

自動メトリック機能を構成するには:コントロールパネルで、[ネットワーク接続]をダブルクリックします。ネットワークインターフェイスを右クリックし、[プロパティ]を選択します。[インターネットプロトコル(TCP / IP)]をクリックし、[プロパティ]を選択します。[全般]タブで、[詳細]を選択します。メトリックを指定するには、[IP設定]タブで、[自動メトリック]チェックボックスをオフにすることを選択し、必要なメトリックを[インターフェイスメトリック]フィールドに入力します。

ソース:https//docs.microsoft.com/en-us/troubleshoot/windows-server/networking/automatic-metric-for-ipv4-routes


0

私はこの問題の変種に遭遇しました、ここに特徴がありました:

  • ユーザーは名前付きインスタンスに正常に接続できました。たとえば、への接続Server\Instanceは成功しました
  • ユーザーはデフォルトのインスタンスに接続できませんでした。たとえば、ServerSSPIに関するOPのスクリーンショットで接続が失敗しました。
  • ユーザーは、完全修飾名でデフォルトインスタンスに接続できませんでした。たとえば、接続にServer.domain.com失敗しました(タイムアウト)
  • ユーザーは名前付きインスタンスなしでIPアドレスに接続できませんでした。たとえば、接続に192.168.1.134失敗しました
  • ドメインに属していない他のユーザー(たとえば、ネットワークにVPN接続しているユーザー)は、ドメイン資格情報を使用して、デフォルトのインスタンスとIPアドレスに正常に接続できました。

したがって、この1人のユーザーが接続できなかった理由を理解しようとする多くの頭痛の種の後、状況を修正するために実行した手順は次のとおりです。

  1. を使用して、SPNリストのサーバーを確認します
    setspn -l Server
    。私たちの場合、それは言ったServer.domain.com
  2. にあるhostsファイルにエントリを追加しますC:\Windows\System32\drivers\etc\hosts(このファイルを変更するには、管理者としてメモ帳を実行します)。追加したエントリは
    Server.domain.com Server

この後、SSMSを介してデフォルトインスタンスに正常に接続できました。


0

私もWindows認証でログを記録しているときにSQLServer 2014でこの問題が発生しました。問題を解決するために、サーバーを一度再起動してからログインしようとすると、うまくいきました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.