SQLSERVER2005中的数据对象访问权限
对于用户操作数据或者执行存储过程的活动,需要一类称为“对象许可权限”的权限。“对象许可权限”
授予对表、视图、表值函数、存储过程、扩展存储过程、标量函数、聚合函数、服务队列或同义词的权限
(1)表和视图的许可权限
表和视图的许可权限能够控制用户对表或者视图执行SELECT、INSERT、UPDATE、DELETE语句的能力
如果用户需要在update语句中使用where子句,那么除了授予用户update权限外,还必须授予用户select执行权限
(2)列的许可权限
列的许可权限包括、SELECT、UPDATE、REFERENCES语句的许可权限,可以有选择性地应用于单个列。
当利用FOREIGN KEY约束级联更改某列数据时,SQLSERVER必须利用FOREIGN KEY约束所引用的数据来
核实列中的数据。如果用户没有对所引用的列或表的SELECT许可权限,那么就必须将该列的REFERENCES许可权限授予该用户
(3)存储过程的许可权限
Execute权限是唯一用于存储过程的许可权限
(4)标量函数权限的许可权限
Execute权限是唯一用于标量函数的许可权限
(5)表值函数权限的许可权限
SELECT权限是唯一用于表值函数的许可权限
----------------------------------------华丽的分割线---------------------------------------------------------
对于用户或角色的许可权限有以下3种状态:授予grant,回收revoke,拒绝deny
用户或角色的许可权限以记录的形式存储在各个数据库的sysprotects系统视图中
1 SELECT a.*, b.[name]
2 FROM [sys].[sysprotects] AS a
3 LEFT JOIN [sys].[sysusers] AS b ON a.[uid] = b.[uid]
4 ORDER BY a.[id]
下面给出一个例子
1 --分别用下列三段语句授予、回收和拒绝数据库用户James和public角色对表
2 --Product的INSERT、UPDATE、DELETE权限
3 --建议在授权时避免使用ALL权限 这里先grant ALL再收窄权限
4 USE [AdventureWorks]
5 GO
6 GRANT ALL ON [Production].[Product] TO James,PUBLIC
7 GO
8
9 USE [AdventureWorks]
10 GO
11 DENY INSERT,UPDATE,DELETE
12 ON [Production].[Product]
13 TO James,PUBLIC
14 GO
15
16 USE [AdventureWorks]
17 GO
18 REVOKE INSERT,UPDATE,DELETE
19 ON [Production].[Product]
20 TO James,PUBLIC
21 GO
华丽的分割线-------------------------------------------------------
SQLSERVER中权限的继承
用户既可以执行单独被授权的许可,也可以继承和执行对它们所属的角色授权的所有动作。
例如,用户Carl是数据库角色Sales的成员,Product表对于用户Carl废除了Select权限,对于数据库角色Sales 授予了Select权限,
那么Carl对于Product表的Select操作最终是授予许可权限
Deny语句能够阻止用户执行相应的动作。无论许可权限是否直接授予用户,Deny语句能够最终决定用户所具有的许可权限。
例如,用户James是数据库角色Sales的成员,Product表对于用户James授予了update权限,对于 --数据库角色Sales拒绝了update权限。
这时,James除了拥有Product表授予的update权限以外,还继承了Product表对Sales角色拒绝update权限,
那么James对于Product表的update操作最终是拒绝许可权限
注意:sysadmin角色的成员和db_owner角色的成员对于数据库具有所有语句 --和对象永远是授予许可权限,是不能被拒绝和废除的
-------------------------------------------------华丽的分割线-----------------------------------------
用户映射:将新建的登录帐户映射到数据库帐户,否则用户仅能登录SQLSERVER,以及访问master,tempdb数据库,
默认情况下不能访问用户数据库。除非登录帐户是sysadmin角色的成员,或者用户数据库中存在guest帐户