![带有 xp_cmdshell 的 SP 在 MessageQueue 中出现错误,但在 Management Studio 中成功执行](https://linux22.com/image/655464/%E5%B8%A6%E6%9C%89%20xp_cmdshell%20%E7%9A%84%20SP%20%E5%9C%A8%20MessageQueue%20%E4%B8%AD%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF%EF%BC%8C%E4%BD%86%E5%9C%A8%20Management%20Studio%20%E4%B8%AD%E6%88%90%E5%8A%9F%E6%89%A7%E8%A1%8C.png)
我有一个 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 通过消息队列顺利执行。
谢谢 !!