sqlserver权限体系(下)

简介

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

理解安全对象(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

总结

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

时间: 2024-08-30 03:51:09

sqlserver权限体系(下)的相关文章

sqlserver权限体系(上)

简介 权限两个字,一个权力,一个限制.在软件领域通俗的解释就是哪些人可以对哪些资源做哪些操作. 在SQL Server中,”哪些人”,“哪些资源”,”哪些操作”则分别对应SQL Server中的三个对象,分别为主体(Principals),安全对象(Securables)和权限(Permissions),而权力和限制则是 对应了SQL Server中的GRENT和DENY.对于主体,安全对象和权限的初步理解,见图1. 图1.简单理解主体,安全对象和权限的关系 对于图1中的造句来说,并没有主语,也

权限体系构建 - 平台权限

一:介绍 对于大数据平台本身,其最重要的资产就是运行在上面的任务,平台要有对其任务进行权限控制的能力,包括但不限于: 1. 何人可以查看这个任务信息:2. 何人可以修改这个任务定义:3. 何人可以对这个任务进行操作,保存执行该任务,启用/禁用,删除,重跑等操作:4. 什么人有权限可以修改这个任务本身的权限定义.5. 不同的角色默认的权限是什么,不同的任务默认的权限又是什么. 这些都需要有一个统一的规则,即需要确定的答案. 二:权限设计 1.权限类别 同时做一定的简化,将查看设为“读”权限,将修改

Mysql 之权限体系

MySQL 的权限体系大致分为5个层级: 全局层级: 全局权限适用于一个给定服务器中的所有数据库.这些权限存储在mysql.user表中.GRANT ALL ON .和REVOKE ALL ON .只授予和撤销全局权限. 数据库层级: 数据库权限适用于一个给定数据库中的所有目标.这些权限存储在mysql.db表中.GRANT ALL ON db_name.和REVOKE ALL ON db_name.只授予和撤销数据库权限. 表层级: 表权限适用于一个给定表中的所有列.这些权限存储在mysql.

sql server drop talbe 自动删除关联的外键 ,权限体系

if object_id('Proc_DropTableWithFK') is not null begin drop proc dbo.Proc_DropTableWithFK end GO create proc Proc_DropTableWithFK @PK_tableName nvarchar(50) as begin declare test_cur cursor local for select o2.name as 'FK_name' , O3.name as 'Table_Na

AppBoxFuture(九): 组织结构与权限体系

??权限体系是用于约束用户访问或操作资源的权利,这里的"资源"可以指数据,也可以指特定的功能(如审核订单).通常的权限体系设计是基于角色的访问控制方式,用户通过角色与权限进行关联.作者的实现方式稍微有些不同,通过组织结构树与权限进行关联,这样可以实现子级节点继承上级节点设置的权限. 一.数据结构 组织单元(OrgUnit):根据上级标识自引用的表结构,另通过EntityRef引用组织或工作组或员工: 权限模型(PermissionModel):框架内置的元数据,包含已赋予权限的组织单元

Data Lake Analytics账号和权限体系详细介绍

一.Data Lake Analytics介绍数据湖(Data Lake)是时下大数据行业热门的概念:https://en.wikipedia.org/wiki/Data_lake.基于数据湖做分析,可以不用做任何ETL.数据搬迁等前置过程,实现跨各种异构数据源进行大数据关联分析,从而极大的节省成本和提升用户体验. 阿里云数据湖分析产品Data Lake Analytics(简称DLA):https://www.aliyun.com/product/datalakeanalytics产品文档:h

php+sqlServer 2008R2 PHPstudy下数据库环境搭建

简要:小主从事PHP二年,期间一直做后台;在过程中遇到一个奇葩的组合就是PHP+sqlServer应用场景,希望能够跟各位PHP大神分享和学习探索,如果有不对或者好的建议告知下:*~*! 一.下载sqlsrv扩展 前往官网下载http://www.microsoft.com/en-us/download/details.aspx?id=20098 ,其中下载的版本须根据你使用的phpStudy中PHP版本: 二.安装sqlsrv扩展 双击打开后,选取对应版本的以及服务器类型(nts与ts):存放

Rancher体系下容器日志采集

引言 一个完整的容器平台,容器日志都是很重要的一环.尤其在微服务架构大行其道状况下,程序的访问监控健康状态很多都依赖日志信息的收集,由于Docker的存在,让容器平台中的日志收集和传统方式很多不一样,日志的输出和采集点收集和以前大有不同.本文就探讨一下,Rancher平台内如何做容器日志收集. 当前现状 纵览当前容器日志收集的场景,无非就是两种方式:一是直接采集Docker标准输出,容器内的服务将日志信息写到标准输出,这样通过Docker的log driver可以发送到相应的收集程序中:二是延续

公钥体系下的安全通信

网络是一个开放的世界,服务器可以被不法节点冒名顶替,传输的数据可以被整个通路上的任何一个节点监听.要保证客户机和服务器在网络中通信的安全,客户机首先要验明服务器正身,然后还要加密要传输的数据,该数据到达服务器后再进行解密.整个过程在X.509规范的PKI(公钥体系,public key infrastructure)下得到完成,数据的加密解密由SSL(安全套接字层,Secure Socket Layer)或TLS(传输层安全,Transport Layer Security)实现.当客户机需要与