1

次の問題は、しばらくの間私を悩ませてきました:

インターフェイスを処理するための dtsx-package があります。以下に示すように、ストアドプロシージャで呼び出します。

SET @v_statement = 'DTEXEC /FILE "' + @v_if_ssis_package + '" /SET \Package.Variables[User::message_number].Properties[Value];' + CAST(@i_message_number AS VARCHAR(20))
                + ' /ConfigFile "' + REPLACE(@v_if_ssis_package, '.dtsx', '.xml')  + '"'

EXECUTE AS USER = 'shell';  

INSERT INTO #SSISResult
EXEC @v_ssis_returncode = xp_cmdshell @v_statement;

シェル ユーザーは、私の知る限り、xp_cmdshell 呼び出しを実行できるすべての機能を備えています。それでも、ストアド プロシージャの実行中に次のエラーが発生します。

Microsoft (R) SQL Server Execute Package Utility バージョン 10.50.1600.1 for 32 ビット Copyright (C) Microsoft Corporation 2010. All rights reserved. 開始: 10:12:28 エラー: 2012-04-12 10:12:59.11 コード: 0x00000000 ソース: スクリプト タスク スクリプト 説明: タイムアウトが発生しました。操作が完了する前にタイムアウト時間が経過したか、サーバーが応答していません...

これについて私を悩ませているのは..スタンドアロンクエリとまったく同じことを実行すると(以下に示すように)、問題なく実行されます。ここで何が起こっているかについてのアイデアはありますか?

EXECUTE AS USER = 'shell';
EXEC xp_cmdshell 'dtexec /FILE "C:\mypackage.dtsx" /SET \Package.Variables[User::message_number].Properties[Value];48644 /ConfigFile "C:\mypackage.xml"'

この問題について私にいくつかの指針を与えることができる人に感謝します。

4

1 に答える 1

0

おそらく許可エラー

簡単な推測:

走るGRANT EXECUTE ON xp_cmdshell TO shell

そしておそらくEXECUTE AS login = 'shell'ユーザーの代わりに

于 2012-04-12T10:06:48.287 に答える