我想知道如何在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,因此我认为这与配置文件权限无关。
答案 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)