web-dev-qa-db-ja.com

SQLエージェントジョブステップ内からSSISプロキシ/資格情報が機能しない

私は周りを見回して、同様の質問を見つけましたが、私が問題を抱えていることに固有のものは何もありません。

問題: SSISパッケージを実行するSQLエージェントジョブステップのアクセス制限付きサービスアカウントを偽装するように、SSISプロキシとSQL資格情報を正しく構成できません。アクセスが制限されたサービスアカウントには必要なすべての特権があり、パッケージは正しく設計されています。私はこの主題について多くの資料を読みました、そして、私が何かを逃した場合に備えていくつかの助けをお願いします。

Background:(Windows Server 2012 R2で実行されているSQL 2012 SP3サーバー。SQLエンジンはDomain1\Admin1の下で実行され、SQLエージェントはDomain1\Admin2の下で実行されます。両方ともSYSADMINサーバーの役割)

SYSADMINによってインタラクティブに実行すると正常に動作するSSISパッケージがあり、ジョブステップ内で「SQL Serverエージェントサービスアカウント」として実行すると正常に動作します。ただし、セキュリティグループは、ジョブが実行する必要のあるものに限定された資格情報を使用して実行することを望んでおり、とにかくこれをベストプラクティスとして理解しています。私が読んだすべては、SSISプロキシと資格情報がこの要件の解決に役立つことを示しています。ただし、構成を機能させることができないため、何か間違っている必要があります。

パッケージは、SSISパッケージジョブステップを介して実行されます。これはローカルファイルであり、MSDBまたはSSISDBには展開されません。パッケージはネットワーク共有に接続し、SQLサーバーのローカルデータベースにロードし、テーブルを切り捨て、いくつかのストアドプロシージャを実行してから、XLSファイルを削除します。ジョブステップは、32ビットランタイムを使用するように設定されています。

セキュリティにより、ネットワーク共有に対する変更権限を持つアカウント(Domain1\NewUser)が作成されました。また、同じ共有に変更としてDomain1\Admin2を追加するように依頼しました。

セットアップでは、パブリックロールのみを使用してDomain1\NewUserのSQLログインを作成し、それを問題のデータベースのdb_ownerとして追加しました。これは、パッケージが実行する必要のある一連のアクションのためです。 IDとしてDomain1\NewUserアカウントとユーザーアカウントの正確に機能するパスワードを使用して、資格情報(BatchLoad-credential)を作成しました。次に、SSISパッケージサブシステム内でアクティブなBatchLoad-credential資格情報を使用してSSISプロキシ(BatchLoad-Proxy)を作成し、Domain1\NewUserのSQLログインをプロキシアカウントプリンシパルとして追加しました。次に、SSISパッケージを実行するSQLエージェントジョブステップをBatchLoad-Proxyとして実行するように変更し、ジョブの所有者をDomain1\Admin2からDomain1\NewUserアカウントに変更しました。

ジョブが実行されると、次のエラーが発生します(ログの一部がマスキングされています)。

ユーザーとして実行:Domain1\NewUser。 Microsoft(R)SQL Server Execute Package Utilityバージョン11.0.6020.0(32ビット版)Copyright(C)Microsoft Corporation。全著作権所有。開始:12:46:17 PM

エラー:2016-06-24 12:46:28.56コード:0xC0202009ソース:xxxxxxx_xxxx接続マネージャー "yyyyyyyyyyy"説明:SSISエラーコードDTS_E_OLEDBERROR。 OLE DBエラーが発生しました。エラーコード:0x80004005。OLE DBレコードが利用可能です。ソース: "Microsoft Office Accessデータベースエンジン" Hresult:0x80004005説明:「外部テーブルは予期された形式ではありません。」終了エラー

繰り返しますが、SYSADMINがBIDS内で対話的に実行すると、パッケージは正常に機能するため、ファイルが正しい形式であり、パッケージは問題なく設計されています。

ネットワーク共有へのアクセス権がありません。手動で接続しようとすると、同様のエラーが発生します。

Windows cannot access
\\<path to the network share>
Error code: 0x80004005
Unspecified error

Domain1\NewUserアカウントとパスワードを使用してネットワーク共有に接続すると、フォルダーを表示できるので、適切なユーザーアカウントがアクセスできることを確認しました。

7
GregDBA

これについてのフィードバックに感謝します。これが将来の人々の役に立つことを願っています。ようやく問題の根本的な原因を絞り込みました。 Excelファイルが使用されているという事実については、十分な詳細情報を提供していませんでした。パッケージ内のすべてを無効にした後、Excelソースを使用してデータフロータスクのみを有効にした場合、エラーが発生しますが、SSISプロキシ( Domain1\NewUserアカウントを使用したジョブ)。 SQL Serverエージェントアカウントを使用するようにジョブステップを設定すると、すべてが正常に動作します。

問題からしばらく経ってから、NewUser1資格情報を使用してサーバーにログインし、Excelを初めて実行しました。イニシャルを求められたので、プログラムを閉じました。また、サーバーのローカルAdministratorsグループにアカウントを追加して、RDPを実行できるようにしました。

次に、SSISプロキシを使用してジョブを実行し、すべてが正常に機能しました。ローカルのAdministratorsグループからアカウントを削除すると再び失敗しますが、そのメンバーシップで許可されているのはローカルポリシー「バッチジョブとしてのログオン」であると判断しました。

これは私がこの経験から学んだことです:

  1. SQL資格情報は、グループではなく、ユーザーアカウントのみを偽装できます。 SSISプロキシは、バッチジョブに必要な権限を付与するための有効なソリューションです。サーバー上のユーザーのプロファイルでアプリケーション設定を完了するためだけに、関連する資格情報を使用してExcel(およびその他のアプリケーション)を一度起動する必要がある場合があります。 DTExecを実行してファイルシステムからパッケージを起動するプロキシには、バッチジョブとしてログオンする必要があります。 Excelソースに問題があり、OLE DBドライバーは、レイアウト/フォーマットの問題ではない場合にこの問題を報告することがあります。

Hresult:0x80004005 Description:「外部テーブルは予期された形式ではありません。」

2
GregDBA

MSDB(テスト用のdb_owner)にDomain1\NewUserへのアクセス許可を付与しようとしましたか?

ここに、SSISプロキシユーザーに関するすばらしい記事があります: https://www.mssqltips.com/sqlservertip/2163/running-a-ssis-package-from-sql-server-agent -using-a-proxy-account /

特に抜粋:

EXEC msdb.dbo.sp_update_proxy 
@proxy_name = N'proxy_name', 
@enabled = 1 
0
2k8MKS