Sql 无法执行msdb.dbo.sp_send_dbmail
我得到这个错误: Msg 229,第14级,状态5,程序sp_send_dbmail,第1行Sql 无法执行msdb.dbo.sp_send_dbmail,sql,sql-server,Sql,Sql Server,我得到这个错误: Msg 229,第14级,状态5,程序sp_send_dbmail,第1行 对对象“sp_send_dbmail”、数据库“msdb”、架构“dbo”的执行权限被拒绝 守则的有关部分: /****** Object: StoredProcedure [dbo].[dbo.STATUSCHANGE_EMAILALERT] ******/ EXEC msdb.dbo.sp_send_dbmail @recipients = 'Test@gmail.com', -- Grou
对对象“sp_send_dbmail”、数据库“msdb”、架构“dbo”的执行权限被拒绝 守则的有关部分:
/****** Object: StoredProcedure [dbo].[dbo.STATUSCHANGE_EMAILALERT] ******/
EXEC msdb.dbo.sp_send_dbmail
@recipients = 'Test@gmail.com', -- Group Email
@subject = 'Employee Status Update',
@profile_name ='Test@gmail.com', -- Setup the profile name group
@body = @body,
@body_format = 'HTML';
向执行存储过程的用户授予对
sp\u send\u dbmail
的执行权限,或将其添加到角色msdb中。要发送数据库邮件,用户必须是msdb数据库中的用户和msdb数据库中数据库邮件用户角色的成员。要将msdb用户或组添加到此角色,请使用SQL Server Management Studio,或对需要发送数据库邮件的用户或角色执行以下语句:
EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
,@membername = '<user or role name>';
GO
EXEC msdb.dbo.sp_addrolemember@rolename='DatabaseMailUserRole'
,@membername='';
去
找到了一个对我来说很好又简单的解决方案:
如果您的SQL应用程序无法使用数据库邮件发送电子邮件(我假设您已经有了DBMail帐户和配置文件设置),则需要设置两件事:
SQL MANAGEMENT STUDIO>管理>数据库邮件>右键单击并单击
选择配置…>选择管理配置文件安全性>SQL管理
检查公共选择权
单击默认配置文件并将其设置为“是”
STUDIO>数据库>系统数据库>右键单击MSDB并
选择新建查询>然后输入>在sp\u发送\u dbmail时授权执行到
公开,然后单击“确定”
好的,只是补充一下这个话题,因为这是非常好的信息,但仍然没有完全解决我的问题。如果I在SSMS中运行查询,那么一旦我被授予在msdb中执行sp_send_dbmail过程的权限,它就会工作。但是,当作业以我的用户身份运行时,它仍然会失败
阅读大量内容,得出结论,即需要确保数据库中所有者的sid与主数据库中的所有者sid匹配:
--To get owner SID recorded in the master database for the current database
SELECT owner_sid FROM sys.databases WHERE database_id=DB_ID()
--To get the owner SID recorded for the current database owner
SELECT sid FROM sys.database_principals WHERE name=N'dbo'
尽管我已授予对msdb的访问权和对sp_send_dbmail的执行权,但它仍然存在与数据库不可信以及所有者SID不匹配相关的问题。因此,我必须为正在运行的数据库启用Trustely,并修复所有权问题:
ALTER DATABASE my_db SET TRUSTWORTHY ON;
ALTER AUTHORIZATION ON Database::my_db TO [domain\user];
我不得不进行了大量的搜索,最终找到了更具启发性的方法。我意外地将SQL代理作业的“运行方式”选项-步骤从“[User]”更改为“(未指定)”。这导致我的作业开始工作。错误告诉您没有访问sp\u send\u dbmail
存储过程的权限。你需要被授予执行的权限我发现:我认为不仅仅是权限,还有一点涉及,我知道更多后会在这里发布。谢谢你的评论。你注意到我的剧本中有什么可以改进的地方吗?