web-dev-qa-db-ja.com

リンクサーバーの作成-Windows認証の偽装

Windows認証を使用して、サーバーAからサーバーBにリンクサーバーをセットアップしようとしています。

SSMSを使用すると、Windows認証とユーザー名DOMAIN\Userを使用して、サーバーA(ServerBから)とサーバーB(サーバーAから)の両方に接続できます。

さらに、サーバーBからサーバーAに、またはその逆にログインして、次のコマンドを実行すると、

SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid

結果は、auth_schemeがKERBEROSであることを教えてくれます

ServerAのSQL Serverサービスは、次のようにログインしようとしているのと同じドメインアカウントとして実行されています。

Get-ADUser UserAccount -Properties trustedfordelegation|select trustedfordelegation

Falseを返します

サーバーAでリンクサーバーを設定しようとすると、-上記のリストで定義されていないログインの場合、接続は:セクションで選択されているオプションに応じて異なるエラーメッセージが表示されます。

私にとってこれは、ローカルサーバーログインからリモートサーバーログインへのマッピング:の設定が無視されていることを示唆しています。

Local LoginDOMAIN\Userに設定し、Impersonateボックスをクリックしました

サーバーAはSQL Server 2008R2、サーバーBはSQL Server 2016 SP1です。

誰かがDOMAIN\Userアカウントを使用して接続するようにリンクサーバーを設定するために必要なことを確認できますか?

2
SEarle1986

ソースサーバーのサービスアカウントが委任に対して信頼されているかどうかを確認します。そうでない場合は、有効にします。次のクエリで、この設定が必要なアカウントを特定できます

SELECT servicename,service_account FROM sys.dm_server_services WHERE filename LIKE '%sqlservr.exe%'; 

あなたはpowershellを介してそうすることができます

Get-ADUser serviceaccount -Properties trustedfordelegation|select trustedfordelegation
Set-ADUser -Identity serviceaccount -TrustedForDelegation $true

またはADユーザーとコンピューターの場合:サービスアカウントのプロパティの[委任]タブ。 enter image description here

この変更を行った後、SQL Serverの再起動が必要になる場合があります。

4
Bob Klimes

ADアカウントが両方のサーバー上にあり、問題のデータベースにアクセスできる限り、これは問題なく機能します。このスクリプトをサーバーAで実行し、LinkServerNameを任意の名前に置き換え、このスクリプトの@datasrcアスペクトをサーバーBに更新します。

USE [master]
GO

/****** Object:  LinkedServer [LinkServerName]    Script Date: 12/5/2017 5:12:57 PM ******/
EXEC master.dbo.sp_addlinkedserver @server = N'LinkServerName', @srvproduct=N'sql_server', @provider=N'SQLNCLI', @datasrc=N'ServerName or ServerName\InstanceName'
 /* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LinkServerName',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
GO
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'rpc', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'rpc out', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'collation name', @optvalue=NULL
GO
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'use remote collation', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO
0
H.79