sysmail_add_principalprofile_sp (Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例

授予数据库主体使用数据库邮件配置文件的权限msdb。 数据库主体必须映射到 SQL Server 身份验证用户、Windows 用户或 Windows 组。

在 Azure SQL 托管实例 和 SQL Server 2022 (16.x),数据库主体也可以映射到 Microsoft Entra 用户。

Transact-SQL 语法约定

语法

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_name0@principal_id使此配置文件成为公共配置文件,授予对数据库中所有主体的访问权限。

[ @principal_name = ] 'principal_name'

关联数据库中的数据库用户或角色 msdb 的名称。 @principal_name为 sysname,默认值为 NULL. 必须指定@principal_id@principal_namepublic@principal_name使此配置文件成为公共配置文件,授予对数据库中所有主体的访问权限。

[ @profile_id = ] profile_id

关联的配置文件的 ID。 @profile_id为 int,默认值为 NULL. 必须指定@profile_id@profile_name

[ @profile_name = ] 'profile_name'

关联的配置文件的名称。 @profile_namesysname,无默认值。 必须指定@profile_id@profile_name

[ @is_default = ] is_default

指定配置文件是否为主体数据库的默认配置文件。 主体必须且只能有一个默认配置文件。 @is_default为,无默认值。

返回代码值

0(成功)或 1(失败)。

注解

若要公开配置文件,请指定@principal_id0@principal_namepublic。 公共配置文件可供数据库中的所有用户msdb使用,但用户还必须是要执行的 sp_send_dbmailDatabaseMailUserRole 的成员

数据库用户只能有一个默认配置文件。 当@is_default并且1用户已与一个或多个配置文件相关联时,指定的配置文件将成为用户的默认配置文件。 以前的默认配置文件仍与该用户关联,但不再是默认配置文件。

当@is_default不存在0并且不存在其他关联时,存储过程将返回错误。

存储过程 sysmail_add_principalprofile_sp 位于 msdb 数据库中,由 dbo 架构拥有。 如果当前数据库不是 msdb,则必须使用三部分名称执行该过程。

权限

此存储过程由 db_owner 角色拥有。 你可以为任何用户授予 EXECUTE 权限,但这些权限可能会在 SQL Server 升级期间被重写。

示例

A. 创建关联并设置默认配置文件

以下示例在命名配置文件 AdventureWorks Administrator Profilemsdb 数据库用户 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;