Transact-SQL 参考

sp_addapprole

在当前数据库中添加一个特殊类型的角色以使应用程序安全。

语法

sp_addapprole [ @rolename = ] 'role'
    
[ @password = ] 'password'

参数

[ @rolename = ] 'role'

新角色的名称。role 的数据类型为 sysname,没有默认设置。role 必须是有效的标识符,并且不能是当前数据库中已经存在的标识符。

[ @password = ] 'password'

激活角色所需的密码。password 的数据类型为 sysname,没有默认设置。password 以加密形式存储。

返回代码值

0(成功)或 1(失败)

注释

Microsoft® SQL Server™ 角色可以包含 1 到 128 个字符,包括字母、符号和数字。但是,角色不能:

  1. 含有反斜线 (\)。

  2. 为 NULL 或空字符串。

标准角色和应用程序角色间的基本差别是:

  1. 应用程序角色不包含成员。用户、Microsoft Windows NT® 组和角色无法添加到应用程序角色中。当通过特定的一个或多个应用程序为用户的连接激活应用程序角色时,就会获得该应用程序角色的权限。带有应用程序角色的用户关联是由能够运行某个可以激活该角色,而不是该角色的某个成员的应用程序产生的。

  2. 应用程序角色默认设置为未激活状态。使用 sp_setapprole 激活它们,同时需要一个密码。例如,密码可以通过应用程序提示由用户提供,然而,该密码通常包含在应用程序内。在密码被发送到 SQL Server 时,它可以被加密。

  3. 当一个应用程序角色被该应用程序激活以用于连接时,连接会在连接期间永久地失去数据库中所有用来登录的权限、用户帐户、其它组或数据库角色。连接获得与数据库的应用程序角色相关联的权限,应用程序角色存在于该数据库中。因为应用程序角色只能应用于它们所存在的数据库中,所以连接只能通过授予其它数据库中 guest 用户帐户的权限,获得对另一个数据库的访问。因此,如果数据库中没有 guest 用户帐户,则连接无法获得对该数据库的访问。如果 guest 用户帐户确实存在于数据库中,但是访问对象的权限没有被明确地授予 guest,那么不论是谁创建的对象,连接都不能访问该对象。用户从应用程序角色获得的权限仍然有效,直到连接从 SQL Server 注销为止。

用户定义事务内不能执行 sp_addapprole

权限

只有 sysadmin 固定服务器角色成员和 db_ownerdb_securityadmin 固定数据库角色成员才能执行 sp_addapprole

示例

下面的示例用密码 xyz_123 将新应用程序角色 SalesApp 添加到当前数据库中。

EXEC sp_addapprole 'SalesApp', 'xyz_123'

请参见

应用程序安全性和应用程序角色

SQL Server 登录、用户、角色和密码的规则

sp_dropapprole

sp_setapprole

系统存储过程