1

我已经创建了一个帐户并将服务器角色分配为公共。将数据库 mydb 上的用户映射分配为 dbo,并将 msdb 上的用户映射分配为 dbo。

使用 msdb 上的用户映射设置,我检查了以下角色:

DatabaseMailUserRole
db_owner
public

然后我的应用程序使用此帐户登录并尝试使用数据库邮件配置文件发送电子邮件。我得到了错误:

System.Data.SqlClient.SqlException: The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'.

如果我将服务器角色 sysadmin 分配给此帐户。然后它工作正常。

但我不想将系统管理员分配给这个帐户。如何解决这个问题?

奇怪的是我也在测试服务器上尝试过。该帐户甚至不在 msdb 上的 DatabaseMailUserRole 中,它工作正常。

2 sql 服务器盒的唯一区别是 SMTP 身份验证设置:
在测试盒上,设置为“基本身份验证”
在生产盒上,设置为“使用数据库引擎服务凭据的 Windows 身份验证”

嗨桥。谢谢。运行 EXEC msdb.dbo.sysmail_help_principalprofile_sp 并在生产中获得以下信息:

principal_id    principal_name  profile_id  profile_name    is_default
11      guest       1       sqlservice  0
12      mydomainaccount 1       sqlservice  0

在分期,没有结果。

4

1 回答 1

1

要发送数据库邮件,用户必须是 msdb 数据库中的用户和 msdb 数据库中 DatabaseMailUserRole 数据库角色的成员。要将 msdb 用户或组添加到此角色,请使用 SQL Server Management Studio 或为需要发送数据库邮件的用户或角色执行以下语句。

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<user or role name>';
GO

来源:http ://technet.microsoft.com/en-us/library/ms188719%28v=sql.100%29.aspx

于 2013-12-03T16:17:15.300 回答