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;

据我所知,Shell 用户拥有能够运行 xp_cmdshell 调用的一切。尽管如此,我在运行存储过程时遇到了以下错误:

适用于 32 位的 Microsoft (R) SQL Server 执行包实用程序版本 10.50.1600.1 版权所有 (C) Microsoft Corporation 2010。保留所有权利。开始: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 回答