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)
总结
本文接着上篇文章讲述了安全对象以及相应的权限。对于权限控制时,理解权限的继承和权限的覆盖会在设置权限时减少很多问题。
sqlserver权限体系(下)的更多相关文章
- 理解SQL Server中的权限体系(下)----安全对象和权限
原文:http://www.cnblogs.com/CareySon/archive/2012/04/12/SQL-Security-SecurableAndPermission.html 在开始阅读 ...
- sqlserver权限体系(上)
简介 权限两个字,一个权力,一个限制.在软件领域通俗的解释就是哪些人可以对哪些资源做哪些操作. 在SQL Server中,”哪些人”,“哪些资源”,”哪些操作”则分别对应SQL Server中的三个对 ...
- 深入浅出:全面理解SQL Server权限体系
转自IT168 好文转载存档! [IT168 技术]权限两个字,一个权力,一个限制.在软件领域通俗的解释就是哪些人可以对哪些资源做哪些操作.在SQL Server中,"哪些人", ...
- 浅谈Oracle权限体系
对于数据库来讲,安全性的重要程度不言而喻,今天我们就来聊一聊Oracle的权限体系. 1.账户管理 在此之前,先解释下一个容易混淆的概念:模式.所谓模式,指的是用户账户所拥有的一组对象(比如表,索引, ...
- 理解SQL Server中的权限体系(上)----主体
原文:http://www.cnblogs.com/CareySon/archive/2012/04/10/mssql-security-principal.html 简介 权限两个字,一个权力,一个 ...
- mysql数据库的权限体系介绍
一.权限体系简介: MySQL的权限体系在实现上比较简单,相关权限信息主要存储在mysql.User.mysql.db.mysql.Host.mysql_table_priv和mysql.column ...
- MySQL数据库权限体系介绍
本文主要向大家介绍了MySQL数据库权限体系,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 一.权限体系简介: MySQL的权限体系在实现上比较简单,相关权限信息主要存储在mys ...
- 涂抹mysql笔记-数据库中的权限体系
涂抹mysql笔记-数据库中的权限体系<>能不能连接,主机名是否匹配.登陆使用的用户名和密码是否正确.mysql验证用户需要检查3项值:用户名.密码和主机来源(user.password. ...
- Mysql 之权限体系
1,MySQL权限体系 MySQL 的权限体系大致分为5个层级: 全局层级: 全局权限适用于一个给定服务器中的所有数据库.这些权限存储在mysql.user表中.GRANT ALL ON .和REVO ...
随机推荐
- Redis必须注意的慢查询问题
今天解析服务在查询Redis的Set数据过程中抛出timeout exception,产生异常的方法是: db.SetMembers(key); 这个API返回结果是指定set内的所有kv对象: 解决 ...
- java-commons-HttpClient超时设置setConnectionTimeout和setSoTimeout
问题 之前使用httpclient请求数据 源码方法: public static String doHttp(HttpMethod result, int timeout, String chars ...
- 优先队列priority_queue的比较函数
STL头文件:#include<queue> 优先队列: 默认从大到小排列:priority_queuee<node>q; 自定义优先级的三种方法: 1.重载操作符: bool ...
- yii2的扩展程序包
查找yii2的扩展程序包 https://packagist.org/ 搜索yiisoft/yii2 可通过composer install下载 composer install下载程序包是通过com ...
- 非编码RNA
生命的基本过程是从DNA转录成mRNA,再翻译成蛋白质发挥功能.DNA就像一张绝密的密码图,不能随意被移动,只能被锁在细胞核里.要想知道这些密码,只能像复印一样,将密码图复印到mRNA上,由它们把这些 ...
- 53. Android常用工具类
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefer ...
- 【BZOJ-3343】教主的魔法 分块
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 950 Solved: 414[Submit][Status][Discuss ...
- body中设置-webkit-scrollbar竖向滚动条,在手机浏览器上无效
暂时无解,如果是chrome的PC模式,滚动条是没有的,但如果是手机模式,滚动条会出现,且无法设置其样式,滚完后会自动消失. 如果设置div这些块元素,完全没问题.
- BZOJ2005 莫比乌斯反演
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=2005 实际上把这些被挡住的点的坐标和能量值列举出来可以发现有个公式: “对于坐标系第一象限任意 ...
- GPU keylogger && GPU Based rootkit(Jellyfish rootkit)
catalog . OpenCL . Linux DMA(Direct Memory Access) . GPU rootkit PoC by Team Jellyfish . GPU keylogg ...