理解安全对象(Securable)

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

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

  • 服务器层级

  • 数据库层级

  • 构架层级

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

对于SQL Server对于层级的详细划分,可以参看MSDN。SQL Server中全部的安全对象如图2和图3所示。

理解权限(Permission)

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

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

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

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

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

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

GRANT在MSDN的原型为:

1

2

3

4

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大同小异:

1

2

3

4

DENY { ALL PRIVILEGES ] }

      | permission [ ( column [ ,...n ] ) ] [ ,...n ]

      ON [ class :: ] securable ] TO principal [ ,...n ] 

      CASCADE] [ AS principal ]

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

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

1

2

3

4

5

6

7

8

9

REVOKE GRANT OPTION FOR ]

      

        ALL PRIVILEGES ] ]

        |

                permission [ ( column [ ,...n ] ) ] [ ,...n ]

      }

      ON [ class :: ] securable ] 

      TO FROM } principal [ ,...n ] 

      CASCADE] [ AS principal ]

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

1

2

3

4

5

6

7

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所示。

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

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

而对于何种的安全对象可以进行何种对应权限的GRANT,REVOKE,DENY,请参看MSDN。

总结

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

作者:FFIVE
链接:https://www.imooc.com/article/28697
来源:慕课网

【转】理解SQL Server的安全对象和权限相关推荐

  1. 理解SQL Server中的权限体系(下)----安全对象和权限

    在开始阅读本文之前,请确保你已经阅读过上一篇文章,文章地址: 理解SQL Server中的权限体系(上)----主体 简介 在上一篇文章中,我对主体的概念做了全面的阐述.本篇文章接着讲述主体所作用的安 ...

  2. 深入理解SQL Server的规划和安装

      深入理解SQL Server的规划和安装   实验背景: 在IT技术高速发展.互联网已***到千家万户.对于一个国家.一个企业甚至一个家庭来说,数据安全.可靠.高效的存储已成为重中之重的话题,任何 ...

  3. 理解SQL Server是如何执行查询的 (2/3)

    查询执行的内存授予(Query Execution Memory Grant) 有些操作符需要较多的内存才能完成操作.例如,SORT.HASH.HAS聚合等.执行计划通过操作符需要处理数据量的预估值( ...

  4. 理解SQL Server中的锁

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

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

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

  6. 理解SQL SERVER中的分区表

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

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

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

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

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

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

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

最新文章

  1. CentOS 6和CentOS 7管理系统服务的区别
  2. 跟我学Spring Cloud(Finchley版)-10-Feign深入
  3. Web前端学习第七天·fighting_CSS样式的编写和使用(二)
  4. python输入输出-2. Python中的基本输入、输出、格式化输出
  5. IaaS、PaaS和SaaS 公司都做些什么
  6. 朱峰谈概念设计(七)创作性绘画教程
  7. 开源 数据仓库_使用这些开源工具进行数据仓库
  8. Linux监控工具介绍系列——smem
  9. Python API快餐教程(1) - 字符串查找API
  10. java统计文件字符数量_Java统计文件注释个数和注释字符数
  11. 2018年AI要怎么“玩”?李飞飞和李开复在达沃斯论坛上给出这几点…
  12. java编程思想快速排序_快速排序里的学问:快速排序的过程
  13. 判断一个数是否为质数
  14. canvas时钟绘制方法总结
  15. 大学四年因为知道了这 60 个网站,我成了别人眼中的大神!
  16. 超市火灾烟气蔓延及人员疏散的matlab仿真模拟
  17. php 分页类 bootstrap,Thinkphp自带分页类样式转Bootstrap分页样式
  18. php doctrine 使用,php – Doctrine 2 – 多数据库配置和使用
  19. 电脑不显示无线连接网络连接服务器,连接wifi后显示无internet访问权限怎么解决...
  20. 人工智能60年:图灵的在天之灵,安息吧!

热门文章

  1. Mac远程连接服务器
  2. 网页版四则运算(未全部完成)
  3. 国外好的软件测试网站
  4. 使用Nant构建入门
  5. [Leetcode][程序员面试金典][面试题08.03][JAVA][魔术索引][递归][优化]
  6. [剑指offer][JAVA]面试题第[32-2]题[从上到下打印二叉树][BFS]
  7. [Leedcode][JAVA][第200题][岛屿数量][DFS][BFS][并查集]
  8. Tidb集群加mysql_TiDB - 快速入门,集群搭建
  9. mysql 预留一个自定义字段_MySQL 按指定字段自定义列表排序 | DevOps
  10. 调用startactivityforresult后,onactivityresult立刻返回RESULT_CANCELED