0

私は問題があります。ステートメント 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 エージェント ユーザーにリンク サーバーへのアクセスを許可したくないため、これを機能させる必要があります。

4

1 に答える 1