7

我想知道如何在SQL Server中设置权限以允许我的应用程序登录/角色能够使用msdb.dbo.sp_send_dbmail发送电子邮件。如何为不同数据库中的登录提供对SQL Server数据库邮件过程的访问?

我有一个数据库MyDb,用户MyUser谁是角色AppRole的成员。我有一个存储过程myProc,它调用msdb.dbo.sp_send_dbmail。如果我执行myProc登录的同时sa这一切工作正常,但如果我执行登录的同时MyUser我得到一个错误:

Msg 229, Level 14, State 5, Procedure sp_send_dbmail, Line 1
The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'.

我的数据库没有可信赖ON,因此,我认为我可以” t使用EXECUTE AS模拟不同的用户,例如使用EXECUTE AS OWNER创建myProc ...(MSDN reference

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

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

+1

我结束了刚刚创建我的用户为MSDB内的用户。为了简单起见,我不想使用@Remus Rusanu的证书建议,尽管在diff环境中这可能是一个不错的选择。如果你有很多数据库用户,可以使用EXECUTE AS来模拟一个数据库用户,然后给这个用户访问msdb--我不需要查看这个选项。 – Rory 2011-04-29 16:10:23

回答

2

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

+0

我应该提到:该应用程序已部署到各种客户端,因此签名过程变得复杂。但是否则是一个不错的选择。 – Rory 2011-04-06 21:50:19

+0

我不确定我遵循为什么它是一个问题。部署过程(MSI安装或设置)是否无法处理过程的供应,签名和授予所需的权限? – 2011-04-06 23:06:22

+0

理论上是的,在实践中我发现处理大量数据库管理员和环境时越简单越好,所以我宁愿不要走下证书路线等。 – Rory 2011-04-29 16:06:16

1

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

1

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

+0

在做这件事之前,让我的每一个人数据库用户也在msdb中的用户? – Rory 2011-11-23 10:05:38

+0

你是对的,这不是一个深思熟虑的回应 - 我的道歉。 – Tony 2011-11-23 14:45:04

0

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

enter image description here

相关问题