我使用以下代码来设置死锁监控:
而且效果很好。 我遇到的问题是 msdb.dbo.sp_send_dbmail 似乎不起作用。 如果我从 session 中手动执行,工作正常,但在存储过程中,会发生以下错误:
2011-08-23 16:42:45.28 spid219s 在队列 Wayne.dbo.DeadLockNotificationsQueue 上运行的已激活进程 [dbo].[usp_ProcessNotification] 输出以下内容:'从队列 DeadLockNotificationsQueue 接收 Service Broker 消息时出错。 数据库名称:韦恩;错误号:229;错误消息:对象“sp_send_dbmail”、数据库“msdb”、模式“dbo”的执行权限被拒绝。
我还运行了以下命令:
执行 msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole' ,@成员(member)名 = '';
用我的登录名作为成员(member)名,但似乎没有帮助。
我需要做什么来纠正这个问题?
谢谢。
韦恩。
最佳答案
Martin 指出了正确的原因,即您的激活过程在其下运行的 EXECUTE AS 上下文。您可以使用代码签名来授予所需的权限,如 Call a procedure in another database from an activated procedure 所示。 .或者您可以简单地标记数据库 Wayne
trustworthy :
ALTER DATABASE [Wayne] SET TRUSTWORTHY ON;
前一种方法比较复杂,但在安全环境下是必须的。后一种方法要简单得多,但它意味着 Wayne
数据库的 dbo 可以将自己升级为 sysadmin 权限。如果安全问题不是问题,您可以使用更简单的 TRUSTWORTHY 方法。
关于sql-server - msdb.dbo.sp_send_dbmail 不在存储过程中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7168648/