web-dev-qa-db-ja.com

リンクサーバーにアクセスするSQLログインとして実行されているジョブの "現在のセキュリティコンテキストは信頼されていません"

ジョブからストアドプロシージャを実行しようとすると、「現在のセキュリティコンテキストが信頼されていないため、リモートサーバーへのアクセスが拒否されました。[SQLSTATE 42000](エラー15274)」というエラーが発生し、ストアドプロシージャがリンクサーバー。このジョブは、SQLログインとして実行するように構成されており、これをuser1と呼びます。可能な限りあらゆる場所で、user1権限と所有権を与えました。

ジョブの設定方法は次のとおりです。

  • 所有者がuser1であるSQL Serverエージェントジョブ
  • ジョブのステップは、[詳細設定]タブの[ユーザーとして実行] user1に構成されています([全般]タブの[実行]リストは空白のリストです。これが要因かどうかは不明です)
  • ステップは、user1が実行するアクセス権を持つストアドプロシージャを呼び出します
  • ストアドプロシージャはWITH EXECUTE AS 'user1'
  • リンクサーバーには、user1のローカル/リモートマッピングがあり、リモートユーザーとリモートパスワードが入力されています。ユーザー名とパスワードは両方のサーバーで同じです。 「上記のリストで定義されていないログインの場合、接続は」オプションは「ログインの現在のセキュリティコンテキストを使用して作成される」に設定されます。また、user1とそのパスワードを繰り返して、このオプションを「このセキュリティコンテキストを使用して作成する」に設定してみました。
  • user1には、リモートサーバーでクエリを実行するための適切なアクセス許可があります。
  • User1をローカルサーバーのsysadminにした

これらすべてにもかかわらず、私はまだアクセスエラーが発生します。私はどこかで何かを逃しているに違いない...何かアイデアはありますか?

4
Keith

1)WITH EXECUTE AS 'user1'句をストアドプロシージャから削除し、2)user1をジョブから削除して、これを修正しました。ジョブのステップの所有者または「ユーザーとして実行」ではなくなりました。

私の最終的な構成は:

  • SQL Serverエージェントジョブの所有者は、user1ではなくsysadminです
  • ジョブのステップ「ユーザーとして実行」は空白のままです
  • ステップは、user1が実行する権限を持つストアドプロシージャを呼び出します
  • リンクサーバーには、user1のローカル/リモートマッピングがあり、リモートユーザーとリモートパスワードが入力されています。ユーザー名とパスワードは両方のサーバーで同じです。 「上記のリストで定義されていないログインの場合、接続は」オプションは「ログインの現在のセキュリティコンテキストを使用して作成される」に設定されます。
  • user1には、リモートサーバーでクエリを実行するための適切なアクセス許可があります。
  • user1は、sysadminロールまたはそのような管理ロールを持つ必要はありません。
3
Keith