別のSQLアカウントとして実行されるSQLジョブステップ


11

別のSQLログインアカウントとして実行されるSQLジョブステップを設定する方法に興味があります。既存の資格情報を必要とする新しいプロキシアカウントを設定する必要があるようです。資格情報を作成するときの唯一の選択肢は、Windowsログイン資格情報を使用することです。

私が実行しようとしているジョブは以下のとおりです。他にもステートメントがありますが、SQLログインとして実行するようにジョブステップを設定すると失敗します。

insert into [dbo].[TableA]
SELECT 
       ss.[Ref_ID]
      ,mm.[studentID]
      ,mm.[studentPersonID]
      ,mm.[studentFirstname]
  FROM [dbo].[TableB] mm
  left outer join [dbo].[TableC] ss on ss.parentPersonID=mm.parentPersonID and mm.studentPersonID = ss.studentPersonID
  where ss.Ref_ID is not null;

これがSQLジョブステップを介して実行されると、失敗します。

Executed as user: an_admin_account. Access to the remote server is denied because the current security context is not trusted. [SQLSTATE 42000] (Error 15274).  The step failed.

これらのテーブルがすべてローカルデータベースに存在するときに、なぜリモートサーバーにアクセスしようとしているのかは不明です。


SQLジョブステップには既にSQLインスタンスへの接続があります。したがって、パスワードで新しい接続を作成するのではなく、既存のセキュリティコンテキストを変更する必要があります。新しい接続を作成する場合は、sqlcmdコマンドまたはPowerShellスクリプトを使用できます。その後、スクリプト内のパラメーターとしてSQLログインとパスワードを使用できます。ただし、何をする必要があるか、独自のコンテキストを持つストアドプロシージャで十分かどうかを検討する必要があります。
Rob Farley

回答:


14

T-SQLジョブステップを構成している場合は、[詳細設定]ページに移動して、[ユーザーとして実行]を選択したログインに構成します。 ここに画像の説明を入力してください

PowerShellなどの他のジョブステップタイプを使用している場合は、プロキシアカウントを構成する必要があります。


これを試しましたが、「現在のセキュリティコンテキストが信頼されていないため、リモートサーバーへのアクセスが拒否されました」と言ってジョブが失敗します。ただし、ユーザーとしてログインしているときにスクリプトを実行すると、問題なく実行できます。クエリにリンクサーバーがないため、リモートサーバーを参照している理由がわかりません。何かご意見は?
Geoff Dawdy 14年

ジョブが何をしようとしているかを質問に追加でき、正確なエラーが解決策を示すのに役立ちます。

私の場合、それは設定を無視しました。SQL 2012の使用
Miguel Sv

1

EXECUTE AS最初に使用するか、特定のコンテキストで実行されるストアドプロシージャを作成します。


これは悪いかもしれません。制限されたユーザーでストアドプロシージャを呼び出す場合は、sysadmin(またはジョブの所有者)特権に戻すことができます。回避策はcookieを使用することです。
Jens W. 14年

EXECUTE ASオプションを使用して作成されたストアドプロシージャは、特権の昇格を処理し、途中で誰かが変更することを許可しません。使用可能なストアドプロシージャがない場合は、スクリプトの先頭にあるEXECUTE ASと同様に、別のログインを偽装することでうまくいきます。
Rob Farley
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.