私は問題があります。ステートメント execute as を使用し、その原則を使用してリンク サーバーからデータを開く場合、openquery クエリは User2 原則ではなく、クエリを実行するログイン (User1) で実行されます。私は意図的に User1 にリンク サーバーの間違った資格情報を与えました。次のクエリはエラーになります
Msg 18456, Level 14, State 1, Line 1
Login failed for user 'LinkedServerUser1'.
クエリ:
USE Database1
EXECUTE AS LOGIN = 'User2'
IF EXISTS(
SELECT *
FROM
OPENQUERY(LinkedServer1,'
SELECT
name
,state
,state_desc
FROM sys.databases
WHERE name = ''DatabaseLinked1'' AND state = 0
'
)
)
BEGIN
PRINT 'test'
END
REVERT
通常、このクエリは SQL Server エージェントによって実行され、SQL Server エージェント ユーザーにリンク サーバーへのアクセスを許可したくないため、これを機能させる必要があります。