【转】理解SQL Server的安全对象和权限

理解安全对象(Securable)

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

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

  •     服务器层级

  •     数据库层级

  •     构架层级

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

    https://img3.mukewang.com/5af2cc570001035308290636.jpg

 

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

    https://img2.mukewang.com/5af2cc6700012dcb07400378.jpg

    

    https://img1.mukewang.com/5af2cc7400015e0907460672.jpg

 

理解权限(Permission)

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

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

https://img3.mukewang.com/5af2cc8800016fc706250742.jpg

   

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

https://img2.mukewang.com/5af2cc970001df9708390685.jpg

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

    https://img1.mukewang.com/5af2cca0000169bd04050392.jpg

 

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

   https://img4.mukewang.com/5af2ccb50001de8b10150422.jpg

 

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

    https://img4.mukewang.com/5af2ccc20001795f10300474.jpg

 

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

 

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

 

总结

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439248.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【NC14 按之字形顺序打印二叉树】

描述 给定一个二叉树&#xff0c;返回该二叉树的之字形层序遍历&#xff0c;&#xff08;第一层从左向右&#xff0c;下一层从右向左&#xff0c;一直这样交替&#xff09; 数据范围&#xff1a;0 \le n \le 15000≤n≤1500,树上每个节点的val满足 |val| < 100∣val∣<1…

SharePoint 2010文档库批量下载文档的实现

在SharePoint 2010文档库中&#xff0c;结合单选框&#xff0c;在Ribbon中提供了批量处理文档的功能&#xff0c;比如&#xff0c;批量删除、批量签出、批量签入等&#xff0c;但是&#xff0c;很遗憾&#xff0c;没有提供批量下载&#xff0c;如图: 若选中多个文档后&#xff…

【LeetCode - 42. 接雨水】

42. 接雨水 难度困难3164 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 […

【LeetCode】第283场周赛题解

本场题题目不难&#xff0c;但是力求写出精简优雅的代码&#xff0c;还是有需要学习的地方的。 第一题 力扣 class Solution:def cellsInRange(self, s: str) -> List[str]:ans []a,b,c,d s[0],s[1],s[3],s[4]for i in range(ord(a), ord(c)1):for j in range(int(b),int…

Linq to Sql : 三种事务处理方式

Linq to SQL支持三种事务处理模型&#xff1a;显式本地事务、显式可分发事务、隐式事务。(from MSDN: 事务 (LINQ to SQL))。MSDN中描述得相对比较粗狂&#xff0c;下面就结合实例来对此进行阐述。 0. 测试环境 OSWindows Server 2008 Enterprise sp1IDEVisual Studio 2008, …

【LeetCode - 33】搜索旋转排序数组(二分)

力扣 解题报告&#xff1a; 二分。但是有不少细节要考虑清楚。 所以干脆考虑另一种二分的方式。也就是第二次二分的时候&#xff0c;把两半数组给拼成一个完整的数组&#xff0c;当然下标需要是虚拟的&#xff0c;这一步可以用偏移量取模完成。这样就不需要考虑边界情况了。 …

【LeetCode - 1765】. 地图中的最高点

力扣 解题报告&#xff1a; 多元BFS。 进阶一下&#xff1a; 二维数组&#xff0c;1表示等高线&#xff0c;0表示平地&#xff0c;比如 输入 010 111 010 输出 010 121 010输入 010 101 010 输出 010 111 010即输入一个二维地图&#xff0c;保证等高线一定是闭合的环&#x…

【转】微服务架构下分布式事务方案

1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务&#xff0c;这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇&#xff0c;很多互联网行业巨头、开源社区等都开始了微服务的讨论和实践。Hailo有160个不同服务构成…

【LeetCode - 443】压缩字符串(模拟)

解题报告&#xff1a; 直接模拟。 class Solution { public:int compress(vector<char>& chars) {int p 0;for(int i 0; i<chars.size();) {int j i1;while(j<chars.size() && chars[j] chars[i]) j;chars[p] chars[i];if(j-i > 1) {int cnt…

Linq to SQL之使用事务

事务是一个原子的工作单位&#xff0c;必须完整的完成单位里的所有工作&#xff0c;要么全部执行&#xff0c;要么全部都不执行。如果提交事务&#xff0c;则事务执行成功&#xff1b;如果回滚事务&#xff0c;则事务执行失败。 事务具备4个基本特性--ACID(原子性、一致性、孤立…

【LeetCode - 798】得分最高的最小轮调(转化法)

解题报告&#xff1a; 思路一&#xff1a;这题首先说一个nlogn的方法。 首先一个主客转化&#xff0c;题目描述是说把数组做翻转&#xff0c;idx不变&#xff0c;然后nums[i]和i作比较。那么我们可以转化为让数组不变&#xff0c;idx转变&#xff0c;即&#xff1a;假设刚开始…

【转】聊聊分布式事务,再说说解决方案

前言 最近很久没有写博客了&#xff0c;一方面是因为公司事情最近比较忙&#xff0c;另外一方面是因为在进行 CAP 的下一阶段的开发工作&#xff0c;不过目前已经告一段落了。 接下来还是开始我们今天的话题&#xff0c;说说分布式事务&#xff0c;或者说是我眼中的分布式事务…

【LeetCode - 2049】统计最高分的节点数目

解题报告&#xff1b; 直接dp。注意mx也得longlong AC代码&#xff1a; class Solution { public:vector<int> vv[200005];int sum[200005];long long ans[200005];int n;void dfs(int x) {ans[x] 1; sum[x] 1;for(int i 0; i<vv[x].size(); i) {dfs(vv[x][i]);s…

【LeetCode每日一题】2024. 考试的最大困扰度

​​​​​​力扣 解题报告&#xff1a; 因为只有T和F两个元素&#xff0c;不难证明单向性。尺取法解决。当然这题也可以二分。 AC代码&#xff1a; class Solution { public:int maxConsecutiveAnswers(string answerKey, int k) {int l 0, r 0;int T 0, F 0;int ans …

2022-08-20-网易笔试题

写在前面 题目收集来源自网络&#xff0c;前四题是开发岗的&#xff0c;后四题是算法岗的&#xff0c;因为代码无处提交&#xff0c;不一定正确&#xff0c;就不贴出来了&#xff0c;这里只写一下我的思路吧~欢迎大家一起讨论~~ 1、 思路&#xff1a;因为最大1e9&#xff0c…

TUN/TAP设备浅析(一) -- 原理浅析

TUN/TAP设备浅析 TUN设备 TUN 设备是一种虚拟网络设备&#xff0c;通过此设备&#xff0c;程序可以方便地模拟网络行为。TUN 模拟的是一个三层设备,也就是说,通过它可以处理来自网络层的数据&#xff0c;更通俗一点的说&#xff0c;通过它&#xff0c;我们可以处理 IP 数据包…

2022-08-21 星环科技-C++开发笔试

1、 思路&#xff1a;拓扑排序&#xff0c;不解释了 2、 思路&#xff1a; 本来以为他是一个图论问题&#xff0c;找最大环。 但其实对于这种情况&#xff0c;他是要输出0的&#xff0c;而不是9&#xff0c;所以他不是一个图论问题&#xff0c;他带有顺序性&#xff0c;这种可…

【算法练习题】位运算(贪心)

题目&#xff1a; 解题报告&#xff1a; 首先预备几个结论&#xff1a; 1、对于两个数a,b &#xff0c;生成a&b和a|b&#xff0c;则一定对应一个常数c&#xff0c;使得生成的两个数分别是ac和a-c。 2、对于两个数a,b&#xff0c;生成a&b和a|b的前后&#xff0c;二进…

TUN/TAP设备浅析(三) -- TUN/TAP设备的应用

上一篇文章主要讲述了TUN/TAP设备的一些原理&#xff0c;你可能会好奇&#xff0c;TUN/TAP设备究竟有什么用处呢&#xff1f;所以这篇文章&#xff0c;我想用一些实际的例子来回答这个问题。 例子源自陈硕老师的博客&#xff0c;博文中关于TUN/TAP设备的使用非常典型&#xff…

云计算底层技术-虚拟网络设备(Bridge,VLAN)

openstack底层技术-各种虚拟网络设备一(Bridge,VLAN) openstack底层技术-各种虚拟网络设备二(tun/tap,veth) Linux BridgeBridge与netfilterVLAN VLAN设备原理及配置VLAN在openstack中的应用IBM网站上有一篇高质量文章Linux 上的基础网络设备详解。本文会参考文章部分内容&…