Transact-SQL 参考

sp_setapprole

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

语法

sp_setapprole [@rolename =] 'role' ,
    
[@password =] {Encrypt N 'password'} | 'password'
    [,[@encrypt =] 'encrypt_style']

参数

[@rolename =] 'role'

是在当前数据库中定义的应用程序角色名。role 的数据类型是 sysname,没有默认设置。role 必须存在于当前数据库中。

[@password =] {Encrypt N 'password'} | 'password'

是激活应用程序角色所需的密码。password 的数据类型是 sysname,没有默认设置。可以使用 ODBC 规范 Encrypt 函数对 password 加密。使用 Encrypt 函数时,必须在密码的前面加上 N 以将密码转换成 Unicode 字符串。

[@encrypt =] 'encrypt_style'

指定 password 使用的加密样式。encrypt_style 的数据类型为 varchar(10),可以是下列值之一。

描述
None 该密码不加密并以明文形式传递给 Microsoft® SQL Server™。这是默认设置。
Odbc 将密码发送到 SQL Server 之前,使用 ODBC 规范 Encrypt 函数对密码加密。这只能通过 ODBC 客户端或用于 SQL Server 的 OLE DB 提供程序指定。DB-Library 客户端不能使用该选项。

返回代码值

0(成功)或 1(失败)

注释

应用程序角色没有成员,因此不必将用户添加到应用程序角色。未激活应用程序角色时,sp_setapprole 对用户在当前数据库内其它角色或组中的成员资格无效。

激活应用程序角色时,将忽略通常与激活应用程序角色的用户连接关联的权限。用户连接获得与(应用程序角色在其中定义的)数据库的应用程序角色关联的权限。用户连接只能通过授予另一个数据库的 guest 用户帐户的权限来获得对该数据库的访问。因此,如果数据库中没有 guest 用户帐户,则连接无法获得对该数据库的访问。

使用 sp_setapprole 激活某个应用程序角色后,在用户与 SQL Server 断开连接之前不能在当前数据库内停用该角色。

若要保护应用程序角色密码,请使用 ODBC Encrypt 函数对密码加密并将 odbc 指定为加密方法。

sp_setapprole 存储过程只能由直接 Transact-SQL 语句执行,不能在另一个存储过程内或从用户定义事务内执行。

权限

任何用户都可以通过为角色提供正确的密码来执行 sp_setapprole

示例
A. 激活应用程序角色但不对密码加密

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

EXEC sp_setapprole 'SalesApprole', 'AsDeFXX'
B. 激活应用程序角色并对密码加密

下例用密码 pswd 激活 Test 应用程序角色,并且在将此密码发送到 SQL Server 之前对其加密。

EXEC sp_setapprole 'Test', {Encrypt N 'pswd'}, 'odbc'

请参见

建立应用程序安全和应用程序角色

sp_addapprole

sp_dropapprole

系统存储过程