SQL ServerからSQL Serverへのリンクサーバーのセットアップ


25

SQL Serverリンクサーバーのセットアップに必要なものを説明してください。

サーバーAはSQL 2005 WindowsログインのみサーバーBは同じ(SQL 2005 Windowsログインのみ)

サーバーAはWindows XPを実行サーバーBはWindows Server 2003を実行

両方のSQL Serverサービスが同じドメインアカウントで実行されています。両方のSQL Serverの管理者権限を持つドメインアカウントでワークステーションにログインしています。

これらは両方ともSQL Server 2005 SP2であることに注意してください-古いホットフィックスが指摘されていますが、すでに適用されています。

私が抱えている問題は、次のエラーです:「ユーザー 'NT AUTHORITY \ ANONYMOUS LOGON'のログインに失敗しました。(Microsoft SQL Server、エラー:18456)」

回答:


18

この問題の私の理解から、それは「HOP」問題です。

つまり、サーバーAを使用して、ログイン詳細を(SSPIを使用して)サーバーBに中継しようとしています。

SQL Server 2005では、セキュリティの問題がすべて追加され、これが本来よりも困難になっています。「Kerberos認証」という言葉は、ほとんどのsys-admins / DBAの生活の土台になります。これは、パススルー認証に効果的に使用されます。

必要なものの基本を以下に示します。1)サーバー(AおよびB)は、Kerberosの委任を有効にしてActive Directory(AD)にセットアップする必要があります。(これは、Active Directory管理パネルで設定されます)

2)SQL Serverで実行されるサービスアカウントも委任を有効にする必要があります(これは、Active Directory管理パネルでも設定されます)。-サービスアカウントで実行されていない場合は、作成する必要があります。

3)サーバーには、インスタンスとホストおよびマシン名に対して定義されたSPNが必要です。(WindowsサポートツールでSetSPNと呼ばれるツールを使用)

サポートツール(SetSPNはこのセットに含まれています) http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=en

(SPNを追加する方法の概要) http://technet.microsoft.com/en-us/library/bb735885.aspx

4)DBを「信頼できる」に設定する必要がある場合があります

信頼できるALTER DATABASE SET

5)これらすべてを完了したら、インスタンスを再起動します。

6)その後、リンクサーバーを再度作成してください。

最後に、SQL Serverへの接続をテストできます。すべて正しく設定されていれば、これは正常に機能するはずです。

SELECT *
FROM OPENDATASOURCE('SQLNCLI',
    'Data Source=ServerB;Integrated Security=SSPI;'
    ).MASTER.dbo.syscolumns

これにより、接続認証タイプがわかります。

select auth_scheme from sys.dm_exec_connections where session_id=@@SPID

ここでは、「NTLM」ではなく「KERBEROS」を取得します。

それは滑りやすい坂道であり、ケルベロスとパススルー委任であり、それに固執すると、最終的にそれを理解します。

参照 Kerberos http://blogs.msdn.com/sql_protocols/archive/2005/10/12/479871.aspx

http://blogs.msdn.com/sql_protocols/archive/2006/12/02/understanding-kerberos-and-ntlm-authentication-in-sql-server-connections.aspx

http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/the-biggest-mistake-serviceprincipalname-s.aspx

問題の他の症状 http://www.sqlservercentral.com/Forums/Topic460425-359-1.aspx

http://msdn2.microsoft.com/en-us/library/aa905162(sql.80).aspx

http://msdn2.microsoft.com/en-us/library/ms189580.aspx

これがすべて役立つことを願っています。


素晴らしい答えです!これは、他の場所で有用に整理されていない情報の山を明確に要約しています。
コンスタンティン

3

GUIに慣れている場合は、SQL Server Management Studio(SSMS)を使用してリンクサーバーを管理および作成することもできます。そうするには:

  1. SSMSを起動し、リンクするSQL Serverのインスタンスの1つに接続します
  2. オブジェクトエクスプローラーで[サーバーオブジェクト]を展開します
  3. [リンクサーバー]を右クリックし、[新しいリンクサーバー]を選択します。
  4. [新しいリンクサーバー]ダイアログで、[サーバータイプ]として[SQLサーバー]を選択し、リンクするSQLサーバーのインスタンスを入力します。
  5. [セキュリティ]ページで、ユーザーが現在のサーバーからリンクサーバーに対して認証する方法を選択します。両方のサーバーがWindowsログインを使用するように設定されていると述べました。この場合、「上記のリストに定義されていないログインの場合、接続は次のようになります」というセクションの下で、ログインの現在のセキュリティコンテキストを使用して作成」というオプションを選択します。

これは、サーバーAにログインしているユーザーがサーバーBにもログインしていることを前提としていることに注意してください。


1

私も同じ問題に夢中です!2000年にこれを行うのはいつも簡単だったことを覚えています。私はグーグルを使いこなしてきましたが、これを機能させることはできません。まったく同じセットアップ、両方のサーバーがドメインアカウント、Windows認証で実行されています。

私はTCPの代わりに名前付きパイプを使用しようとしていますが、少なくとも別のエラーが発生します:

EXEC sp_addlinkedserver 
    @server='statler', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='np:statler', 
    @provstr='Integrated Security=SSPI'

-- Then I try this:
select net_transport, auth_scheme 
from statler.master.sys.dm_exec_connections 
where session_id=@@spid

/*

Getting closer, but still fails:

OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "Login timeout expired".
OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "An error has occurred while establishing a connection to the server. 
    When connecting to SQL Server 2005, this failure may be caused by the 
    fact that under the default settings SQL Server does not allow 
    remote connections.".
Msg 5, Level 16, State 1, Line 0
Named Pipes Provider: Could not open a connection to SQL Server [5]. 
OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "Invalid connection string attribute".

*/

これは名前パイプを有効にすることと関係があるかもしれませんが、次のようにサーバーAからサーバーBにsqlcmd経由で接続できます。

WALDORF:>  Sqlcmd.exe /E /Snp:statler

名前付きパイプを使用せずに、次の操作を行う場合:

New Linked Server
Server Type: SqlServer
Security: be made using the current login's security context

私はこれを得る:

Login failed for user NT AUTHORITY\ANONYMOUS LOGIN

[編集]これについてSql Server Centralで議論を始めました。基本的に、これを機能させるには、Kerberos委任に関連するいくつかの複雑な構成を行う必要があります。

http://www.sqlservercentral.com/Forums/Topic574262-146-1.aspx

リンクされたクエリを処理するために、単一の制限付きのSQLログインアカウントを作成することにしました。それに頼るのは嫌ですが、Windows authで動作させるために必要な変更よりも安全であるようです。


複雑なKerberos設定については、以下を参照してください。このようなものは長い間私を殺しました!
evilhomer

0

sp_addlinkedserverおよびsp_linkedserversで検索を行うと、いくつかの例が得られます。セットアップは非常に簡単です。


0

SQL Managerをお持ちの場合は、GUIで追加することもできます。

基本的に、Timが言及したSPによって、またはGUIを介して2つのサーバーをリンクし、アクセスルールを設定する必要があります(両方のサーバーでWindows認証を使用する場合でも必要ありません)。


0

これは簡単なはずですが、私にはまったく機能していません-ここでセキュリティの問題が発生しています。だから私は誰かが私のために手順を綴ってほしいです。

過去にSQL 2000で問題なくこれを実行しました。


0

あなたはそれらをリンクできますが、間違ったアカウントのためにクエリを実行できませんか?

使用しようとしているWindowsユーザーには、両方のサーバーのデータを読み取る権限がありますか?

「データアクセス」プロパティが何らかの不明な理由でfalseに設定されていたため、問題が発生しました。

また、リンクのユーザーを明示的に別のユーザーに設定した場合の動作も試してください。

(これらはすべてSQLマネージャーで実行できます。)


0

ティムは、私が正しいと仮定した正確な手順を投稿しました。ステップ5はセキュリティページです。「ログインの現在のセキュリティコンテキストを使用して作成する」を選択します。

[OK]をクリックすると、次のエラーが表示されます。「NT Authority \ Anonymous login」を使用しようとしている理由がわかりません。両方のサーバーですべての権限を持つドメインアカウントでワークステーションにログインしています。

TITLE:Microsoft SQL Server Management Studio

「リンクサーバーは作成されましたが、接続テストに失敗しました。リンクサーバーを保持しますか?」

- - - - - - - - - - - - - - - 追加情報:

Transact-SQLステートメントまたはバッチの実行中に例外が発生しました。(Microsoft.SqlServer.ConnectionInfo)


ユーザー 'NT AUTHORITY \ ANONYMOUS LOGON'のログインに失敗しました。(Microsoft SQL Server、エラー:18456)

ヘルプが必要な場合は、http//go.microsoft.com/fwlink?ProdName = Microsoft + SQL + Server&ProdVer = 09.00.3068&EvtSrc = MSSQLServer&EvtID = 18456&LinkId = 20476をクリックして ください。


0

サーバーにローカルでログインしているときにこれを試してください。リモートマシンから行う場合は、適切な資格情報を送信していない可能性があります。

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