sp_setapprole (Transact-SQL)

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

主题链接图标Transact-SQL 语法约定

语法

sp_setapprole [ @rolename = ] 'role',
    [ @password = ] { encrypt N'password' } 
      |
        'password' [ , [ @encrypt = ] { 'none' | 'odbc' } ]
        [ , [ @fCreateCookie = ] true | false ]
    [ , [ @cookie = ] @cookie OUTPUT ]

参数

  • [ @rolename = ] 'role'
    当前数据库中定义的应用程序角色的名称。role 的数据类型为 sysname,无默认值。role 必须存在于当前数据库中。

  • [ @password = ] { encrypt N'password' }
    激活应用程序角色所需的密码。password 的数据类型为 sysname,无默认值。password 可以使用 ODBC 加密函数进行模糊处理。使用加密函数时,必须通过在第一个引号前面放置 N,将密码转换为 Unicode 字符串。

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

    重要说明重要提示

    ODBC 加密函数不提供加密功能。您不应当依赖该函数来保护通过网络传输的密码。如果通过网络传输该信息,则使用 SSL 或者 IPSec。

  • @encrypt = 'none'
    指定不使用任何模糊代码。密码以明文形式传递到 SQL Server。这是默认设置。

  • @encrypt= 'odbc'
    指定在将密码发送到 SQL Server 数据库引擎之前,ODBC 使用 ODBC 加密函数对密码进行模糊处理。这只能在使用 ODBC 客户端或 OLE DB Provider for SQL Server 时指定。

  • [ @fCreateCookie = ] true | false
    指定是否创建 cookies。true 将隐式转换为 1。false 隐式转换为 0。

  • [ @cookie = ] @cookie OUTPUT
    指定包含 cookie 的输出参数。只有当 @fCreateCookie 的值为 true 时,才生成 cookie。varbinary(8000)

返回代码值

0(成功)或 1(失败)

注释

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

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

安全说明安全说明

为了在通过网络传输应用程序角色密码时对其进行保护,在启用应用程序角色时应始终使用加密连接。

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

权限

要求具有 public 成员身份,并了解该角色的密码。

示例

A. 激活应用程序角色但不使用加密选项

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

EXEC sp_setapprole 'SalesApprole', 'AsDeF00MbXX';
GO

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

DECLARE @cookie varbinary(8000);
EXEC sp_setapprole 'Sales11', 'fdsd896#gfdbfdkjgh700mM'
    , @fCreateCookie = true, @cookie = @cookie OUTPUT;
-- The application role is now active.
SELECT USER_NAME();
-- This will return the name of the application role, Sales11.
EXEC sp_unsetapprole @cookie;
-- The application role is no longer active.
-- The original context has now been restored.
GO
SELECT USER_NAME();
-- This will return the name of the original user. 
GO