以下を使用して、サーバー上にリンクサーバーを作成しました。
exec sp_addlinkedserver
@server=N'MyOldDB',
@srvproduct=N'',
@provider = N'SQLNCLI',
@datasrc=N'MYSERVER',
@catalog=N'TheDefaultDatabase';
さて、ログオン資格情報がどのように決定されるかについての次の説明(MSDNから)にもかかわらず、
ローカルサーバー上のすべてのログインとリンクサーバー上のリモートログイン間の既定のマッピングは、sp_addlinkedserverを実行することで自動的に作成されます。既定のマッピングでは、ログインの代わりにリンクサーバーに接続するときに、SQL Serverがローカルログインのユーザー資格情報を使用することが規定されています。これは、ローカルユーザー名を指定せずに、リンクサーバーに対して@useselfをtrueに設定してsp_addlinkedsrvloginを実行するのと同じです。
次のエラーが発生します。
Msg 18456, Level 14, State 1, Line 1
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.
私がこれをやろうとすると:
select top 10 * from MyOldDB.TheDefaultDatabase.dbo.Batches
誰かが私をここで正しい方向に向けることができますか?
発生したエラーは、ログイン自体とは無関係です。
これは、SQL ServerがNTログイントークンをリモートサーバーに「パススルー」しようとしたときに発生します。トークンを通過させる権限がありません。ローカルサーバーは統合セキュリティに接続するため、リモートサーバーはこれを探します。
ローカルサーバーに設定するには、 "セキュリティアカウントの委任" が必要です。
デフォルトのマッピングについては...
MSDNによると、ローカルに「MyDomain\bob」がある場合、ローカルに「保存された」「MyDomain\bob」と呼ばれる「仮想」エントリがあるということです。 2つのサーバー間の2つのサーバーの調整はありません。これはこれを実行するのと同じです:
EXEC sp_addlinkedsrvlogin 'MyLinkedServer', @useself = 'TRUE';
「MyDomain\MyGroup」はマップされないことに注意してください。個別のNTユーザーとSQLログインのみです。 NTグループではありません。
これはすべて "リンクサーバーのセキュリティ" で説明されています
リンクサーバー構成の既定のマッピングでは、ログインの現在のセキュリティ資格情報をエミュレートします。この種類のマッピングは、セルフマッピングと呼ばれます。 sp_addlinkedserverを使用してリンクサーバーを追加すると、すべてのローカルログインにデフォルトのセルフマッピングが追加されます。セキュリティアカウントの委任が利用可能で、リンクサーバーがWindows認証をサポートしている場合、Windows認証ログインのセルフマッピングがサポートされています。
...
クライアントまたは送信サーバーでセキュリティアカウントの委任が利用できない場合、またはリンクサーバー/プロバイダーがWindows認証モードを認識しない場合、Windows認証を使用するログインでは自己マッピングは機能しません。