应用程序角色
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例
应用程序角色是一个数据库主体,它使应用程序能够用其自身的、类似用户的权限来运行。 使用应用程序角色,可以只允许通过特定应用程序连接的用户访问特定数据。 与数据库角色不同的是,应用程序角色默认情况下不包含任何成员,而且是非活动的。 可以使用 sp_setapprole启用应用程序角色,该过程需要密码。 因为应用程序角色是数据库级主体,所以它们只能通过其他数据库中为 guest授予的权限来访问这些数据库。 因此,其他数据库中的应用程序角色无法访问任何已禁用 guest 的数据库。
在 SQL Server 中,应用程序角色无法访问服务器级元数据,因为它们不与服务器级主体关联。 要禁用此限制,从而允许应用程序角色访问服务器级元数据,请使用 -T4616 或 DBCC TRACEON (4616, -1)
设置全局跟踪标志 4616。 如果不希望启用此跟踪标志,可以使用证书签名的存储过程允许应用程序角色查看服务器状态。 有关示例代码,请参阅 GitHub 上的此示例脚本。
连接应用程序角色
应用程序角色切换安全上下文的过程包括下列步骤:
用户执行客户端应用程序。
客户端应用程序作为用户连接到 SQL Server 实例。
然后应用程序用一个只有它才知道的密码执行
sp_setapprole
存储过程。如果应用程序角色名称和密码都有效,则启用应用程序角色。
此时,连接将失去用户权限,而获得应用程序角色权限。
通过应用程序角色获得的权限在连接期间始终有效。
在旧版 SQL Server 中,用户如果要在启动应用程序角色后重新获取其原始安全上下文,唯一的方法就是断开 SQL Server 连接,然后再重新连接。 从 SQL Server 2005 (9.x) 开始,sp_setapprole
可以选择创建 Cookie。 Cookie 包含启用应用程序角色之前的上下文信息。 然后 sp_unsetapprole
存储过程使用 Cookie 将会话还原为其原始上下文。 有关此新选项和示例的信息,请参阅 sp_setapprole (Transact-SQL) 和 sp_unsetapprole (Transaction-SQL)。
重要
SqlClient 不支持 ODBC encrypt选项。 通过网络传输机密信息时,请使用传输层安全性 (TLS)(旧称为“安全套接字层 (SSL)”)或 IPSec 对通道进行加密。 如果必须使凭据在客户端应用程序中持久化,请使用加密 API 函数来加密凭据。 在 SQL Server 2005 (9.x) 及更高版本中,参数 password 将作为单向哈希进行存储。
Related Tasks
任务 | 类型 |
---|---|
创建应用程序角色。 | 创建应用程序角色和 CREATE APPLICATION ROLE (Transact-SQL) |
更改应用程序角色。 | ALTER APPLICATION ROLE (Transact-SQL) |
删除应用程序角色。 | DROP APPLICATION ROLE (Transact-SQL) |
使用应用程序角色。 | sp_setapprole (Transact-SQL) |