sp_setapprole (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库

激活与当前数据库中的应用程序角色关联的权限。

Transact-SQL 语法约定

语法

sp_setapprole
    [ @rolename = ] N'rolename'
    , [ @password = ] N'password'
    [ , [ @encrypt = ] 'encrypt' ]
    [ , [ @fCreateCookie = ] fCreateCookie ]
    [ , [ @cookie = ] cookie OUTPUT ]
[ ; ]

参数

[ @rolename = ] N'rolename'

当前数据库中定义的应用程序角色的名称。 @rolenamesysname,无默认值。 当前数据库中必须存在@rolename

[ @password = ] { encrypt N'password' }

激活应用程序角色所需的密码。 @password为 sysname,无默认值。 @password可以使用 ODBC encrypt 函数进行模糊处理。 使用 encrypt 函数时,密码必须转换为 Unicode 字符串,方法是放在 N 第一个引号之前。

使用 SqlClient 的连接不支持加密选项。

重要

ODBC encrypt 函数不提供加密。 不应依赖此函数来保护通过网络传输的密码。 如果此信息将通过网络传输,请使用 TLS 或 IPSec。

[ @encrypt = ] { 'none' |'odbc' }

指定在将密码发送到 SQL Server 数据库引擎之前加密类型。 @encrypt为 varchar(10),可以是以下值之一。

说明
none(默认值) 指定不使用混淆。 密码以纯文本形式传递到 SQL Server。
odbc 指定在将密码发送到 SQL Server 数据库引擎之前,ODBC 使用 ODBC encrypt 函数模糊处理密码。 仅当使用 ODBC 客户端或 OLE DB Provider for SQL Server 时,才能指定此值。

[ @fCreateCookie = ] { 'true' |'false' }

指定是否创建 cookie。 @fCreateCookie为,默认值为 0.

true 隐式转换为 1false 隐式转换为 0

指定包含 cookie 的输出参数。 @cookie是 varbinary 类型的 OUTPUT 参数(8000)。 仅当@fCreateCookie的值true时,才会生成 cookie。

注意

尽管当前实现返回 varbinary(50),但应用程序应保留记录的 varbinary(8000),以便在 Cookie 返回大小在将来版本中增加时继续正常运行。

返回代码值

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

注解

使用 sp_setapprole应用程序角色激活后,该角色将保持活动状态,直到用户断开与服务器的连接或执行 sp_unsetapprole。 不能在另 sp_setapprole 一个存储过程、触发器或用户定义的事务中使用。 它只能作为直接 Transact-SQL 语句执行。

有关应用程序角色的概述,请参阅 应用程序角色

启用应用程序角色时,应始终使用加密连接,以便在通过网络传输应用程序角色时保护应用程序角色密码。

SqlClient 不支持 Microsoft ODBC encrypt 选项。 如果必须存储凭据,请使用加密 API 函数对这些凭据进行加密。 参数@password存储为单向哈希。 为了保持与早期版本的 SQL Server 的兼容性, sp_addapprole 不强制实施密码复杂性策略。 若要强制实施密码复杂性策略,请使用 CREATE APPLICATION ROLE

权限

需要具有公共成员身份并了解角色的密码。

示例

A. 在没有加密选项的情况下激活应用程序角色

以下示例使用纯文本密码激活名为 SalesAppRole 的应用程序角色,该角色 AsDeF00MbXX是使用为当前用户使用的应用程序设计的权限创建的。

EXEC sys.sp_setapprole 'SalesApprole', 'AsDeF00MbXX';
GO

以下示例使用密码 Sales11 激活 fdsd896#gfdbfdkjgh700mM 应用程序角色并创建一个 cookie。 该示例返回当前用户的名称,然后通过执行 sp_unsetapprole 恢复到原始上下文中。

DECLARE @cookie VARBINARY(8000);

EXEC sys.sp_setapprole 'Sales11',
    'fdsd896#gfdbfdkjgh700mM',
    @fCreateCookie = true,
    @cookie = @cookie OUTPUT;

应用程序角色现已处于活动状态。 USER_NAME()返回应用程序角色的名称。 Sales11

SELECT USER_NAME();

取消设置应用程序角色。

EXEC sys.sp_unsetapprole @cookie;
GO

应用程序角色不再处于活动状态。 原始上下文已还原。 USER_NAME() 返回原始用户的名称。

SELECT USER_NAME();
GO