笔记266 SQLSERVER2005中的应用程序角色 2013-5-5
1 --SQLSERVER2005中的应用程序角色 2013-5-5
2 --应用程序角色 跟固定数据库角色跟数据库用户是并排的
3 --应用程序角色是一个数据库主体,他使应用程序能够用其自身的、类似用户
4 --的特权来运行。使用应用程序角色可以只允许通过特定应用程序连接的用户
5 --访问特定数据
6
7 --与数据库角色不同的是,应用程序角色默认情况下不包含任何成员,而且是非活动的。
8 --应用程序角色使用两种身份验证模式,可以使用sp_setapprole来激活,并且需要密码
9 --因为应用程序角色是数据库级别的主体,所以他们只能通过其他数据库中授予guest用户
10 --帐户的权限来访问这些数据库。因此,任何已禁用guest用户账户的数据库对其他数据库
11 --中的应用程序角色都是不可访问的
12
13 --应用程序角色切换安全上下文的过程包括以下步骤
14 --(1)用户执行客户端应用程序
15 --(2)客户端应用程序作为用户连接到SQLSERVER
16 --(3)应用程序用一个只有他才知道的密码执行sp_setapprole存储过程
17 --(4)如果应用程序角色名称和密码都有效,将激活应用程序角色
18 --(5)此时,连接将失去用户权限,而获得应用程序角色权限
19 EXEC [sys].[sp_setapprole] @rolename = NULL, -- sysname
20 @password = NULL, -- sysname
21 @encrypt = '', -- varchar(10)
22 @fCreateCookie = NULL, -- bit
23 @cookie = NULL -- varbinary(50)
24
25 --例如,创建一个名为AppRole的角色,并且在查询中激活该角色,操作步骤如下
26 EXEC [sys].[sp_setapprole] @rolename = 'Approle', -- sysname
27 @password = '123@ABC' -- sysname
28
29 --在SQL的早期版本中,用户若要在激活应用程序角色后重新获取其原始安全上下文,唯一的方法就是
30 --断开SQLSERVER连接,然后重新连接。在SQL2005中,sp_setapprole提供了Cookie选项,他可以在
31 --激活应用程序之前创建一个包含上下文信息的Cookie。sp_unsetapprole可以使用此Cookie将会话
32 --恢复到其原始上下文
33 --EXEC [sys].[sp_unsetapprole] @cookie = NULL -- varbinary(50)
34
35 DECLARE @cookie VARBINARY(8000)
36 EXEC [sys].[sp_setapprole] @rolename = 'Approle', -- sysname
37 @password = '123@ABC', -- sysname
38 @encrypt = '', -- varchar(10)
39 @fCreateCookie = true, -- bit
40 @cookie = @cookie OUTPUT -- varbinary(50)