带有 xp_cmdshell 的 SP 在 MessageQueue 中出现错误,但在 Management Studio 中成功执行

带有 xp_cmdshell 的 SP 在 MessageQueue 中出现错误,但在 Management Studio 中成功执行

我有一个 SP,它调用xp_cmdshell它。此 SP 正在 MessageQueue 中使用。

SQL 服务器和代理服务使用域服务帐户进行配置,并且该服务帐户在 sysadmin 服务器角色下也有登录名。

当调用MessageQueue时,SP返回以下异常:

无法检索 xp_cmdshell 代理帐户信息或该信息无效。请验证“##xp_cmdshell_proxy_account##”凭据是否存在且包含有效信息。

但是当我在 SSSMS 中以服务帐户登录(即 sysadmin)执行 SP 时,它成功执行。

我甚至创建了##xp_cmdshell_proxy_account##凭证,但消息队列始终出现这个错误。

队列如下所示:

CREATE QUEUE [dbo].[TestxmCmdshellQueue]
WITH STATUS = ON ,
RETENTION = OFF ,
ACTIVATION (      STATUS = ON ,
                        PROCEDURE_NAME = [dbo].[SpWithxp_cmdshell_Init] ,
                        MAX_QUEUE_READERS = 5 ,
                        EXECUTE AS N'dbo'  ),
POISON_MESSAGE_HANDLING (STATUS = OFF) 

服务帐户在本地服务器中也配置为本地管理员。

数据库所有者是“Sa”

我在 Windows Server 2008 R2 Enterprise Machine 上运行 SQL Server 2008 R2 Sp2。

答案1

我在数据库中将 TRUSTWORTHY 设置为 ON,并且 SP 通过消息队列顺利执行。

谢谢 !!

相关内容