9

我想知道如何在 SQL Server 中设置权限,以允许我的应用程序登录/角色能够使用msdb.dbo.sp_send_dbmail.

我有一个数据库 MyDb,一个用户MyUser是角色的成员AppRole。我有一个myProc调用msdb.dbo.sp_send_dbmail. 如果我myProc在登录时执行sa,一切正常,但如果我在登录时执行,则MyUser出现错误:

消息 229,级别 14,状态 5,过程 sp_send_dbmail,第 1 行
对象“sp_send_dbmail”、数据库“msdb”、架构“dbo”的 EXECUTE 权限被拒绝。

我的数据库没有 TRUSTWORTHY ON,因此我相信我不能使用 EXECUTE AS 来模拟不同的用户,例如使用 EXECUTE AS OWNER 创建 myProc ...(MSDN 参考

因此,我认为我需要让我的用户也是 msdb 中的用户,但是我可以在角色级别执行此操作,还是需要让我的每个数据库用户也是 msdb 中的用户?

我使用的数据库邮件配置文件设置为公开,所以我认为这与配置文件权限无关。

4

4 回答 4

3

您可以使用 EXECUTE AS 并签署您的程序,然后使用签名证书授予 EXECUTE 权限msdb。请参阅从激活的过程调用另一个数据库中的过程,以及使用证书签署过程

于 2011-04-06T20:44:09.703 回答
2

您应该能够只授予 MyUser 对 MSDB 的公共访问权限,然后将 sp_send_dbmail proc 上的执行访问权限授予该用户。您可以自行添加用户,也可以在 MSDB 中创建自定义角色,并将所有需要 exec 访问权限的用户添加到 sp_send_dbmail。

于 2011-04-06T18:08:17.133 回答
1

根据微软的说法,您只需授予用户“msdb 数据库中的 DatabaseMailUser 数据库角色”的权限。

于 2011-11-21T16:56:13.800 回答
1

你需要给数据库角色-->databaseusermailuserRole

在此处输入图像描述

于 2016-11-24T14:26:58.977 回答