在开始阅读本文之前,请确保你已经阅读过上一篇文章,文章地址:
理解SQL Server中的权限体系(上)----主体
简介
在上一篇文章中,我对主体的概念做了全面的阐述。本篇文章接着讲述主体所作用的安全对象以及所对应的权限。
理解安全对象(Securable)
安全对象,是SQL Server 数据库引擎授权系统控制对其进行访问的资源。通俗点说,就是在SQL Server权限体系下控制的对象,因为所有的对象(从服务器,到表,到视图触发器等)都在SQL Server的权限体系控制之下,所以在SQL Server中的任何对象都可以被称为安全对象。
和主体一样,安全对象之间也是有层级,对父层级上的安全对象应用的权限会被其子层级的安全对象所继承。SQL Server中将安全对象分为三个层次,分别为:
服务器层级
数据库层级
构架层级
这三个层级是从上到下包含的,如图1所示:
1
图1.安全对象层级之间的包含关系
对于SQL Server对于层级的详细划分,可以参看MSDN(http://msdn.microsoft.com/zh-cn/library/ms190401.aspx)。SQL Server中全部的安全对象如图2和图3所示。
2
图2.服务器层级的安全对象
3
图3.数据库和构架层级的安全对象
理解权限(Permission)
权限是连接主体和安全对象的纽带。SQL Server 2008中,权限分为权利与限制,分别对应GRANT语句和DENY语句。GRANT表示允许主体对于安全对象做某些操作,DENY表示不允许主体对某些安全对象做某些操作。还有一个REVOKE语句用于收回先前对主体GRANT或DENY的权限。
在设置权限时,尤其要注意权限在安全对象上的继承关系。对于父安全对象上设置的权限,会被自动继承到子安全对象上。主体和安全对象的层级关系如图4所示。
1
图4.主体和安全对象之间的层级关系
比如,我给予主体CareySon(登录名)对于安全对象CareySon-PC(服务器)的Select(权限),那么CareySon这个主体自动拥有CareySon-PC服务器下所有的数据库中表和视图等子安全对象的SELECT权限。如图5所示。
4
图5.主体对于安全对象的权限在层级上会继承
此时,主体CareySon可以看到所有数据库极其子安全对象,如图6所示
5
图6.主体对于安全对象的权限在层级上会继承
使用T-SQL语句进行权限控制
在理解了主体,安全对象和权限的概念之后,使用T-SQL语句进行权限控制就非常简单了。使用GRANT语句进行授予权限,使用DENY语句限制权限,使用REVOKE语句收回之前对于权限的授予或者限制。
GRANT在MSDN的原型为:
GRANT { ALL [ PRIVILEGES ] }
| permission [ ( column [ ,...n ] ) ] [ ,...n ]
[ ON [ class :: ] securable ] TO principal [ ,...n ] 
[ WITH GRANT OPTION ] [ AS principal ]
对于GRANT语句的理解就像造句一样 GRANT 某种权限 ON 安全对象类型::安全对象 TO 主体。如果指定了WITH GRANT OPTION,则被授予权限的主体可以授予别的主体同样的权限。
对于DENY语句在MSDN中的原型和GRANT大同小异:
DENY { ALL [ PRIVILEGES ] }
| permission [ ( column [ ,...n ] ) ] [ ,...n ]
[ ON [ class :: ] securable ] TO principal [ ,...n ] 
[ CASCADE] [ AS principal ]
值得注意的是CASCADE选项表示拒绝主体对于安全对象的访问权限同时决绝主体授予其他主体对于安全对象的权限。
而REVOKE语句用于收回原来授予或拒绝某个主体对于安全对象的权限。REVOKE在MSDN中的原型如下:
REVOKE [ GRANT OPTION FOR ]
[ ALL [ PRIVILEGES ] ]
|
permission [ ( column [ ,...n ] ) ] [ ,...n ]
}
[ ON [ class :: ] securable ] 
{ TO | FROM } principal [ ,...n ] 
[ CASCADE] [ AS principal ]
一个进行权限控制的例子如下:
grant select--权限
ON Schema::SalesLT--类型::安全对象
to careyson--主体
deny select--权限
ON Schema::SalesLT--类型::安全对象
to careyson--主体
revoke select--权限
ON Schema::SalesLT--类型::安全对象
to careyson--主体
控制权限的时候需要注意如下几点:
GRANT会移除主体作用于安全对象上的DENY和REVOKE
DENY和REVOKE移出主体作用于安全对象上的GRANT
REVOKE会移除主体作用于安全对象上的DENY和GRANT
在高层级上的DENY会覆盖任何子层级的GRANT。比如说,你对于Schema进行Deny,对其包含的表进行Grant,则表的GRANT会被Schema的Deny锁覆盖,如图7所示。
6
图7.父层级的Deny覆盖子层级的Grant
对于主体作用于高层级的GRANT会被其子Deny所覆盖,还是上面的例子,我对于Schema进行Grant,对于表进行Deny,最后结果还是Deny,如图8所示。
7
图8.子层级的Deny覆盖父层级的Grant
SQL Server不对sysadmin组的成员做任何权限验证操作。换句话说,sysadmin组的成员可以为所欲为
而对于何种的安全对象可以进行何种对应权限的GRANT,REVOKE,DENY,请参看MSDN(http://msdn.microsoft.com/zh-cn/library/ms191291.aspx)
总结
本文接着上篇文章讲述了安全对象以及相应的权限。对于权限控制时,理解权限的继承和权限的覆盖会在设置权限时减少很多问题。
分类: SQL SERVER,SQL Server安全
好文要顶 关注我 收藏该文    

在开始阅读本文之前,请确保你已经阅读过上一篇文章,文章地址:

理解SQL Server中的权限体系(上)----主体

简介

在上一篇文章中,我对主体的概念做了全面的阐述。本篇文章接着讲述主体所作用的安全对象以及所对应的权限。

理解安全对象(Securable)

安全对象,是SQL Server 数据库引擎授权系统控制对其进行访问的资源。通俗点说,就是在SQL Server权限体系下控制的对象,因为所有的对象(从服务器,到表,到视图触发器等)都在SQL Server的权限体系控制之下,所以在SQL Server中的任何对象都可以被称为安全对象。

和主体一样,安全对象之间也是有层级,对父层级上的安全对象应用的权限会被其子层级的安全对象所继承。SQL Server中将安全对象分为三个层次,分别为:

  • 服务器层级
  • 数据库层级
  • 构架层级

这三个层级是从上到下包含的,如图1所示:

图1.安全对象层级之间的包含关系

对于SQL Server对于层级的详细划分,可以参看MSDN(http://msdn.microsoft.com/zh-cn/library/ms190401.aspx)。SQL Server中全部的安全对象如图2和图3所示。

图2.服务器层级的安全对象

图3.数据库和构架层级的安全对象

理解权限(Permission)

权限是连接主体和安全对象的纽带。SQL Server 2008中,权限分为权利与限制,分别对应GRANT语句和DENY语句。GRANT表示允许主体对于安全对象做某些操作,DENY表示不允许主体对某些安全对象做某些操作。还有一个REVOKE语句用于收回先前对主体GRANT或DENY的权限。

在设置权限时,尤其要注意权限在安全对象上的继承关系。对于父安全对象上设置的权限,会被自动继承到子安全对象上。主体和安全对象的层级关系如图4所示。

图4.主体和安全对象之间的层级关系

比如,我给予主体CareySon(登录名)对于安全对象CareySon-PC(服务器)的Select(权限),那么CareySon这个主体自动拥有CareySon-PC服务器下所有的数据库中表和视图等子安全对象的SELECT权限。如图5所示。

图5.主体对于安全对象的权限在层级上会继承

此时,主体CareySon可以看到所有数据库极其子安全对象,如图6所示

图6.主体对于安全对象的权限在层级上会继承

使用T-SQL语句进行权限控制

在理解了主体,安全对象和权限的概念之后,使用T-SQL语句进行权限控制就非常简单了。使用GRANT语句进行授予权限,使用DENY语句限制权限,使用REVOKE语句收回之前对于权限的授予或者限制。

GRANT在MSDN的原型为:

GRANT { ALL [ PRIVILEGES ] }| permission [ ( column [ ,...n ] ) ] [ ,...n ][ ON [ class :: ] securable ] TO principal [ ,...n ] [ WITH GRANT OPTION ] [ AS principal ]

对于GRANT语句的理解就像造句一样 GRANT 某种权限 ON 安全对象类型::安全对象 TO 主体。如果指定了WITH GRANT OPTION,则被授予权限的主体可以授予别的主体同样的权限。

对于DENY语句在MSDN中的原型和GRANT大同小异:

DENY { ALL [ PRIVILEGES ] }| permission [ ( column [ ,...n ] ) ] [ ,...n ][ ON [ class :: ] securable ] TO principal [ ,...n ] [ CASCADE] [ AS principal ]

值得注意的是CASCADE选项表示拒绝主体对于安全对象的访问权限同时决绝主体授予其他主体对于安全对象的权限。

而REVOKE语句用于收回原来授予或拒绝某个主体对于安全对象的权限。REVOKE在MSDN中的原型如下:

REVOKE [ GRANT OPTION FOR ]{ [ ALL [ PRIVILEGES ] ]|permission [ ( column [ ,...n ] ) ] [ ,...n ]}[ ON [ class :: ] securable ] { TO | FROM } principal [ ,...n ] [ CASCADE] [ AS principal ]

一个进行权限控制的例子如下:

grant select--权限ON Schema::SalesLT--类型::安全对象to careyson--主体deny select--权限ON Schema::SalesLT--类型::安全对象to careyson--主体revoke select--权限ON Schema::SalesLT--类型::安全对象to careyson--主体

控制权限的时候需要注意如下几点:

  • GRANT会移除主体作用于安全对象上的DENY和REVOKE
  • DENY和REVOKE移出主体作用于安全对象上的GRANT
  • REVOKE会移除主体作用于安全对象上的DENY和GRANT
  • 在高层级上的DENY会覆盖任何子层级的GRANT。比如说,你对于Schema进行Deny,对其包含的表进行Grant,则表的GRANT会被Schema的Deny锁覆盖,如图7所示。

图7.父层级的Deny覆盖子层级的Grant

  • 对于主体作用于高层级的GRANT会被其子Deny所覆盖,还是上面的例子,我对于Schema进行Grant,对于表进行Deny,最后结果还是Deny,如图8所示。

图8.子层级的Deny覆盖父层级的Grant

  • SQL Server不对sysadmin组的成员做任何权限验证操作。换句话说,sysadmin组的成员可以为所欲为

而对于何种的安全对象可以进行何种对应权限的GRANT,REVOKE,DENY,请参看MSDN(http://msdn.microsoft.com/zh-cn/library/ms191291.aspx)

总结

本文接着上篇文章讲述了安全对象以及相应的权限。对于权限控制时,理解权限的继承和权限的覆盖会在设置权限时减少很多问题。

分类: SQL SERVER,SQL Server安全
本文转自CareySon博客园博客,原文链接http://www.cnblogs.com/CareySon/archive/2012/04/12/SQL-Security-SecurableAndPermission.html,如需转载请自行联系原作者
本文转自CareySon博客园博客,原文链接:XXXXXXXX,如需转载请自行联系原作者
本文转自CareySon博客园博客,原文链接:XXXXXXXX,如需转载请自行联系原作者

理解SQL Server中的权限体系(下)----安全对象和权限相关推荐

  1. 理解SQL SERVER中的分区表

    简介 分区表是在SQL SERVER2005之后的版本引入的特性.这个特性允许把逻辑上的一个表在物理上分为很多部分.而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个 ...

  2. 理解SQL SERVER中的分区表(转)

    简介 分区表是在SQL SERVER2005之后的版本引入的特性.这个特性允许把逻辑上的一个表在物理上分为很多部分.而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个 ...

  3. 理解SQL Server中索引的概念,原理

    理解SQL Server中索引的概念,原理 摘自:http://51even.iteye.com/blog/1490412 简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索 ...

  4. 理解SQL Server中的锁

    参考文献: T-SQL查询进阶-理解SQL Server中的锁 转载于:https://www.cnblogs.com/xwdreamer/archive/2012/08/19/2646363.htm ...

  5. SQL --理解SQL SERVER中的逻辑读,预读和物理读

    本文转载自:https://www.cnblogs.com/CareySon/archive/2011/12/23/2299127.html 理解SQL SERVER中的逻辑读,预读和物理读 SQL ...

  6. 理解SQL Server中索引的概念,原理以及其他

    简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索 ...

  7. T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他(看了两次了,转了)

    简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索 ...

  8. 理解SQL SERVER中的逻辑读,预读和物理读

    在我的上一篇关于SQL SERVER索引的博文,有圆友问道关于逻辑读,预读和物理读的概念.我觉的还是写一篇博文能把这个问题解释清楚. SQL SERVER数据存储的形式 在谈到几种不同的读取方式之前, ...

  9. sql server定义_在SQL Server中查看定义权限

    sql server定义 We have various database objects such as view, stored procedures, triggers, functions a ...

最新文章

  1. grep的常用命令语法
  2. 稳健+成长股池(转载)
  3. Telerik for Winform 2010版下载、安装、初次使用
  4. 《物联网框架ServerSuperIO教程》- 23.动态数据接口增加缓存,提高数据输出到OPCServer和(实时)数据库的效率...
  5. AJPFX关于代码块的总结
  6. 《大众创业做电商——淘宝与微店 开店 运营 推广 一册通》一一1.3 选择创业的行业...
  7. python第八周小测验_Python语言程序设计第2周测验+练习题复盘
  8. 我看中国软件---人才篇
  9. 满满干货!mysql定时任务每天固定时间执行
  10. Linq中字段数据类型转换问题(Linq to entity,LINQ to Entities 不识别方法System.String ToString()问题解决)...
  11. 《转》python学习(3)
  12. 晚上的笔记:p2p vod
  13. CuInS2/ZnS-PEG量子点|1I-V族三元化合物铜钢硫(CuInS2简称CIS),CuInS2/ZnS核壳量子点
  14. 【论文】Track to Detect and Segment: An Online Multi-Object Tracker
  15. asp.net 文件下载的五种方式
  16. 在Linux下安装hping3
  17. SpringBoot 整合mybatis、mybatis日志、并测试findAll查询数据库方法
  18. [精选] 统计在线人数,用php 如何来实现 ?
  19. git与svn的区别及优缺点
  20. 高精度电子罗盘精确导航中的应用

热门文章

  1. ECMAScript基础(三)-关键字
  2. XP SP3远程桌面无法连接Windows Server 2008/Vista
  3. 迷你版Spring MVC 实现
  4. Dameware Mini Remote Control 连接记录恢复
  5. 【Coursera】Third Week(1)
  6. Android开发之注解式框架ButterKnife在ADT中的设置
  7. AIOps中异常检测的简单应用
  8. Dubbo(九) dubbo的配置文件加载顺序优先级
  9. consulAPI服务的注册源码
  10. MySQL怎么导出用户权限表_导出MySQL用户权限_MySQL