sysmail_add_principalprofile_sp (Transact-SQL)
授予数据库主体使用数据库邮件配置文件的权限msdb
。 数据库主体必须映射到 SQL Server 身份验证用户、Windows 用户或 Windows 组。
在 Azure SQL 托管实例 和 SQL Server 2022(16.x)中,数据库主体还可以映射到 Microsoft Entra 用户。
语法
sysmail_add_principalprofile_sp
{ [ @principal_id = ] principal_id | [ @principal_name = ] 'principal_name' }
, { [ @profile_id = ] profile_id | [ @profile_name = ] 'profile_name' }
[ , [ @is_default ] = 'is_default' ]
[ ; ]
参数
[ @principal_id = ] principal_id
关联的数据库中数据库用户或角色 msdb
的 ID。 @principal_id为 int,默认值为 NULL
. 必须指定@principal_id或@principal_name。 0
@principal_id使此配置文件成为公共配置文件,授予对数据库中所有主体的访问权限。
[ @principal_name = ] 'principal_name'
关联数据库中的数据库用户或角色 msdb
的名称。 @principal_name为 sysname,默认值为 NULL
. 必须指定@principal_id或@principal_name。 public
@principal_name使此配置文件成为公共配置文件,授予对数据库中所有主体的访问权限。
[ @profile_id = ] profile_id
关联的配置文件的 ID。 @profile_id为 int,默认值为 NULL
. 必须指定@profile_id或@profile_name。
[ @profile_name = ] 'profile_name'
关联的配置文件的名称。 @profile_name 为 sysname,无默认值。 必须指定@profile_id或@profile_name。
[ @is_default = ] is_default
指定配置文件是否为主体数据库的默认配置文件。 主体必须且只能有一个默认配置文件。 @is_default为位,无默认值。
返回代码值
0
(成功)或 1
(失败)。
注解
若要公开配置文件,请指定@principal_id0
或@principal_namepublic
。 公共配置文件可供数据库中的所有用户msdb
使用,但用户还必须是要执行的 sp_send_dbmail
DatabaseMailUserRole 的成员。
数据库用户只能有一个默认配置文件。 当@is_default并且1
用户已与一个或多个配置文件相关联时,指定的配置文件将成为用户的默认配置文件。 以前的默认配置文件仍与该用户关联,但不再是默认配置文件。
当@is_default不存在0
并且不存在其他关联时,存储过程将返回错误。
存储过程 sysmail_add_principalprofile_sp
位于 msdb
数据库中,由 dbo
架构拥有。 如果当前数据库不是 msdb
,则必须使用三部分名称执行该过程。
权限
此存储过程由 db_owner 角色拥有。 你可以为任何用户授予 EXECUTE
权限,但这些权限可能会在 SQL Server 升级期间被重写。
示例
A. 创建关联并设置默认配置文件
以下示例在命名配置文件 AdventureWorks Administrator Profile
与 msdb
数据库用户 ApplicationUser
之间创建关联。 此配置文件是该用户的默认配置文件。
EXEC msdb.dbo.sysmail_add_principalprofile_sp
@principal_name = 'ApplicationUser',
@profile_name = 'AdventureWorks Administrator Profile',
@is_default = 1;
B. 将配置文件设为默认公共配置文件
以下示例使配置文件 AdventureWorks Public Profile
成为数据库中用户 msdb
的默认公共配置文件。
EXEC msdb.dbo.sysmail_add_principalprofile_sp
@principal_name = 'public',
@profile_name = 'AdventureWorks Public Profile',
@is_default = 1;