web-dev-qa-db-ja.com

SQL Server-リンクサーバー-Windows統合セキュリティでのOPENROWSETの使用

統合セキュリティ(Windows認証)を使用したOPENROWSETに関する記事をたくさん見ましたが、うまく機能しませんでした。

SQL Server認証を使用して正常に動作しています。

 select *
 FROM
 OPENROWSET('SQLOLEDB',
 'myserver';'monitor';'#J4g4nn4th4#',
 'SELECT GETDATE() AS [RADHE]')

しかし、Windows認証を使用して実行しようとしているのと同じクエリが機能しません。

select *
 FROM
 OPENROWSET('SQLOLEDB',
'myserver';'Integrated Security=SSPI',
 'SELECT GETDATE() AS [RADHE]')

誰かがうまくいく例を投稿できますか?

これは良い記事です OPENROWSETの使用法について説明しています。

OPENROWSETを使用した作業スクリプトの例-コメントを読んでください

 ----------------------------------------------------------------
 -- this works - linked server REPLON1
 ----------------------------------------------------------------

select *
 FROM
 OPENROWSET('SQLOLEDB',
'Server=REPLON1;Trusted_Connection=yes;',
 'SELECT GETDATE() AS [RADHE]')

 select *
 FROM
 OPENROWSET('SQLOLEDB',
'Server=REPLON1;Trusted_Connection=yes;',
 'SET FMTONLY OFF select * from sys.dm_exec_requests')


 SELECT a.*
FROM OPENROWSET('SQLOLEDB', 'server=replon1;Trusted_Connection=yes;', 'SET
FMTONLY OFF select * from sys.dm_exec_requests') AS a
WHERE a.session_id > 50
ORDER BY a.start_time desc



  ----------------------------------------------------------------
 -- this does not work - when using windows authentication
 -- apparently because windows server 2003 and windows server 2012 have problems connecting - related to SID
 -- it works fine using SQL Server Authentication
 ----------------------------------------------------------------

 select *
 FROM
 OPENROWSET('SQLOLEDB',
'Server=SQLREPLON1\REP;Trusted_Connection=yes;',
 'SELECT GETDATE() AS [RADHE]')

-- Msg 18456, Level 14, State 1, Line 1
--Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.



 ----------------------------------------------------------------
 -- this works - linked server SQLREPLON1\REP
 ----------------------------------------------------------------

 select *
 FROM
 OPENROWSET('SQLOLEDB',
 'SQLREPLON1\REP';'monitor';'#J4g4nn4th4#',
 'SELECT * from SAReporting.DBO.tblStockLedgerMovement')
3

変数を宣言して現在のインスタンス名を取得し、OpenROWSetに値を渡します。

アドホック分散クエリを有効にする

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO

Windows認証を使用してデータをフェッチするOPENROWSET

DECLARE @InstanceName VARCHAR(200),
    @sql NVARCHAR(MAX)
SELECT  @InstanceName = ( SELECT @@servername  )


SELECT  @sql = 'select a.* from openrowset(''SQLNCLI'', ''Server='
        + @InstanceName
        + ';Trusted_Connection=yes;'', ''select * from Databasename.dbo.TableName'') as a'

EXEC sp_executeSQL @sql
4
AA.SC