如何在不同的数据库中为登录访问SQL Server数据库邮件过程?

时间:2011-04-06 16:04:06

标签: sql-server sql-server-2005 database-permissions database-mail

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

我有一个数据库MyDb,一个用户MyUser,他是角色AppRole的成员。我有一个调用myProc的存储过程msdb.dbo.sp_send_dbmail。如果我以myProc身份登录时执行sa,则一切正常,但如果我以MyUser登录时执行,则会收到错误消息:

  

Msg 229,Level 14,State 5,Procedure sp_send_dbmail,Line 1
  对象'sp_send_dbmail',数据库'msdb',架构'dbo'上的EXECUTE权限被拒绝。

我的数据库没有TRUSTWORTHY ON,因此我认为我不能使用EXECUTE AS来模仿其他用户,例如使用EXECUTE AS OWNER创建myProc ...(MSDN reference

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

我正在使用的数据库邮件配置文件设置为public,因此我认为这与配置文件权限无关。

4 个答案:

答案 0 :(得分:3)

您可以使用EXECUTE AS并签署您的程序,然后使用签名证书在msdb中授予EXECUTE权限。请参阅Call a procedure in another database from an activated procedure以及Signing Procedures with Certificates

答案 1 :(得分:1)

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

答案 2 :(得分:1)

根据microsoft,您只需要授予用户“msdb数据库中的DatabaseMailUser数据库角色”的权限。

答案 3 :(得分:0)

您需要提供数据库角色 - > databaseusermailuserRole

enter image description here