sp_setapprole (Transact-SQL)
激活与当前数据库中的应用程序角色关联的权限。
语法
sp_setapprole
[ @rolename = ] N'rolename'
, [ @password = ] N'password'
[ , [ @encrypt = ] 'encrypt' ]
[ , [ @fCreateCookie = ] fCreateCookie ]
[ , [ @cookie = ] cookie OUTPUT ]
[ ; ]
参数
[ @rolename = ] N'rolename'
当前数据库中定义的应用程序角色的名称。 @rolename 为 sysname,无默认值。 当前数据库中必须存在@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
隐式转换为 1
。 false
隐式转换为 0
。
[ @cookie = ] Cookie OUTPUT
指定包含 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
B. 使用 Cookie 激活应用程序角色,然后还原到原始上下文
以下示例使用密码 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