应用程序角色

应用程序角色是数据库主体,使应用程序能够以其自身的用户权限运行。 可以使用应用程序角色来仅允许通过特定应用程序连接的用户访问特定数据。 与数据库角色不同,应用程序角色不包含任何成员,默认情况下处于非活动状态。 应用程序角色使用这两种身份验证模式。 应用程序角色是使用 sp_setapprole启用的,这需要密码。 由于应用程序角色是数据库级主体,因此它们只能通过向 来宾授予这些数据库中的权限来访问其他数据库。 因此,其他数据库中的应用程序角色无法访问已禁用 来宾 的任何数据库。

在 SQL Server 中,应用程序角色无法访问服务器级元数据,因为它们不与服务器级主体相关联。 若要禁用此限制,从而允许应用程序角色访问服务器级元数据,请设置全局标志 4616。 有关详细信息,请参阅跟踪标志(Transact-SQL)DBCC TRACEON(Transact-SQL)。

使用应用程序角色进行连接

以下步骤构成了应用程序角色切换安全上下文的过程:

  1. 用户执行客户端应用程序。

  2. 客户端应用程序以用户身份连接到 SQL Server 实例。

  3. 然后,应用程序使用仅应用程序已知的密码执行 sp_setapprole 存储过程。

  4. 如果应用程序角色名称和密码有效,则启用应用程序角色。

  5. 此时,连接将失去用户的权限,并承担应用程序角色的权限。

通过应用程序角色获取的权限在连接期间仍有效。

在早期版本的 SQL Server 中,在启动应用程序角色后,用户重新获取其原始安全上下文的唯一方法是断开连接并重新连接到 SQL Server。 从 SQL Server 2005 开始, sp_setapprole 具有创建 Cookie 的选项。 Cookie 在启用应用程序角色之前包含上下文信息。 Cookie可以被sp_unsetapprole用来将会话还原为其原始上下文。 有关此新选项和示例的信息,请参阅sp_setapprole(Transact-SQL)。

重要

SqlClient 不支持 ODBC 加密选项。 通过网络传输机密信息时,请使用安全套接字层(SSL)或 IPsec 加密通道。 如果必须在客户端应用程序中保存凭据,请使用加密 API 函数加密凭据。 在 SQL Server 2005 及更高版本中,参数 密码 存储为单向哈希。

创建应用程序角色。 创建应用程序角色CREATE APPLICATION ROLE (Transact-SQL)
更改应用程序角色。 ALTER APPLICATION ROLE (Transact-SQL)
删除应用程序角色。 DROP APPLICATION ROLE (Transact-SQL)
使用应用程序角色。 sp_setapprole(Transact-SQL)

另请参阅

保护 SQL Server