Security 10:权限管理
SQL Server 用于管理权限的TSQL命令有:GRANT用于授予权限,REVOKE 用于移除授予的权限,而DENY用于防止安全主体通过GRANT获得权限。但是,SQL Server的权限管理不是扁平的,是立体的,在不同的安全上下文(Security context)中,不同的权限空间(Permission Space)中,这三个命令的优先级是不同的。
在进行权限管理时,应遵守“最低权限”原则,即每个人只授予必需的最小权限。相对于授予的权限,数据库中还有一个特殊的权限,那就是所有权(Ownship)。
一,管理权限的规则
在管理权限时,要注意权限的上下文、权限的立体空间和权限的优先级
1,安全上下文和权限空间
安全上下文(Security Context),是跟user 或 login 相关的环境,用户可以通过EXECUTE AS 来切换安全上下文。安全上下文主要包括:Login、User、Role membership、Windows Group membership
权限空间,是指安全对象(Securable)和包含安全对象的所有安全对象类(Securable class),比如,表包含在schema 中,schema是表的安全对象类;而database包含schema,database是schema的安全对象类。访问表的权限,受到表、schema和database的权限的影响,这三个对象构成一个权限空间,访问受到权限空间的约束。
2,权限的优先级
当这三个命令作用于同一个安全对象(Securable)时,情况会变得复杂,不仅需要考虑权限空间,还需要考虑权限的优先级。
在同一个安全主体范围内对同一个安全对象设置权限,GRANT子句会移除DENY和REVOKE子句设置的权限,这三个命令的优先级相同,后执行的语句会移除先执行语句的效果。
但是,当相同的权限作用于同一安全主体的不同范围时,如果DENY 作用于更高的范围内,那么DENY优先,但是在更高的范围内,REVOKE不优先。
这里有一个例外,列级别的GRANT语句,会覆盖Object级别的DENY语句,但是后续Object级别的DENY语句会覆盖列级别的GRANT语句。
3,权限的层次结构
权限的层次结构,类似于权限空间,但是权限的层次结构是一种父子结构。
举个例子,数据库级别的权限:
- 在数据库级别授予操作数据库对象的权限,比如 EXECUTE、DELETE、INSERT、SELECT、UPDATE、REFERENCES、VIEW DEFINITION,实际上,授予的是操作数据库中所有对象的权限。
- 数据库级别独有的权限:ALTER、BACKUP DATABASE、BACKUP LOG、CHECKPOINT、CONNECT、CREATE TABLE、CREATE VIEW、CREATE PROCEDURE等
二,权限管理的实现
权限管理涉及到Principal、Securable和Permission三个概念。Principal可以是单个User,也可以是多个User构成的Windows Group;Securable可以是单个数据库对象,也可以是包含多个数据库对象的schema;同时,User也可以通过role获得数据库对象的权限。
第一种方式,为每一个User设置单个Securable的权限

第二种方式,创建Windows Group,为每一个Windows Group设置单个Securable的权限

第三种方式,通过数据库 role来设置权限

第四种方式,通过Schema来设置权限,在一个Schema下包含多个Securables。

三,所有权和所有权链
对象的所有者对一个对象拥有所有可能的权限,并且这些权限不能禁止。CONTROL权限可以执行与对象所有者几乎相同的操作,但是所有权和授权是不同的。对象的所有者通常是其创建者,但是可以在创建时使用AUTHORIZATION子句指定其他所有者,也可以把Ownship转移给其他Principal。
如何在不授予基础表访问权限的情况下,仅对视图或任何其他类型的程序授予SELECT权限呢?答案是使用所有权链(Ownership-chaining)。通常情况下,当用户从视图中查询数据时,系统做两次权限检查,第一次是检查用户是否有权限查询视图,第二次是在视图引用基础表时检查用户是否有权限查询基础表,由于用户没有基础表的权限,因此第二次权限检查失败。
所有权链(Ownership-chaining)通过绕过第二次权限检查来避免这种情况,否则将在视图引用基础表时进行第二次权限检查。当链接的对象(underlying table)与调用对象(view)具有相同的所有者时,权限检查将被完全绕开。
如果一个user在具有Ownership权限的Schema中创建视图,因为它视图的所有者,就是被视图引用的基表的所有者,这是一个链:我是Schema的所有者,那么Schema下的所有对象的Owner都是我,我有权限访问视图,但不能访问基础表。
参考文档:
Schema-Based Access Control for SQL Server Databases
Security 10:权限管理的更多相关文章
- 使用Spring Security实现权限管理
使用Spring Security实现权限管理 1.技术目标 了解并创建Security框架所需数据表 为项目添加Spring Security框架 掌握Security框架配置 应用Security ...
- springBoot整合spring security实现权限管理(单体应用版)--筑基初期
写在前面 在前面的学习当中,我们对spring security有了一个小小的认识,接下来我们整合目前的主流框架springBoot,实现权限的管理. 在这之前,假定你已经了解了基于资源的权限管理模型 ...
- Spring boot Security 用于权限管理,用户添加等。
1:添加依赖: <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thy ...
- springBoot整合spring security+JWT实现单点登录与权限管理--筑基中期
写在前面 在前一篇文章当中,我们介绍了springBoot整合spring security单体应用版,在这篇文章当中,我将介绍springBoot整合spring secury+JWT实现单点登录与 ...
- 话说Spring Security权限管理(源码)
最近项目需要用到Spring Security的权限控制,故花了点时间简单的去看了一下其权限控制相关的源码(版本为4.2). AccessDecisionManager spring security ...
- 基于Spring Security 的JSaaS应用的权限管理
1. 概述 权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源.资源包括访问的页面,访问的数据等,这在传统的应用系统中比较常见.本文介绍的则是基于Saas系统 ...
- spring boot:spring security用mysql实现动态权限管理(spring boot 2.3.3)
一,动态权限管理的优点和缺点 1,优点: 因为控制权限的数据保存在了mysql或其他存储系统中, 可以动态修改权限控制,无需改动代码和重启应用, 权限变更时灵活方便 2,缺点: 权限的设置需要保存在 ...
- spring boot:spring security用mysql数据库实现RBAC权限管理(spring boot 2.3.1)
一,用数据库实现权限管理要注意哪些环节? 1,需要生成spring security中user类的派生类,用来保存用户id和昵称等信息, 避免页面上显示用户昵称时需要查数据库 2,如果需要在页面上显示 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(10)- VSS源代码管理
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(10)- VSS源代码管理 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ( ...
随机推荐
- Java实现 LeetCode 791 自定义字符串排序(桶排序)
791. 自定义字符串排序 字符串S和 T 只包含小写字符.在S中,所有字符只会出现一次. S 已经根据某种规则进行了排序.我们要根据S中的字符顺序对T进行排序.更具体地说,如果S中x在y之前出现,那 ...
- Java实现 蓝桥杯 算法提高 最长滑雪道
试题 算法提高 最长滑雪道 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小袁非常喜欢滑雪, 因为滑雪很刺激.为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上 ...
- java实现输入信用卡号码
/* 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心, 因为并不是一个随便的信用卡号码都是合法的,它必须通过 Luhn 算法来验证通过. 该校验的过程: 1.从卡号最后一 ...
- java实现第五届蓝桥杯等额本金
等额本金 题目描述 小明从银行贷款3万元.约定分24个月,以等额本金方式还款. 这种还款方式就是把贷款额度等分到24个月.每个月除了要还固定的本金外,还要还贷款余额在一个月中产生的利息. 假设月利率是 ...
- apollo与springboot集成实现动态刷新配置
分布式apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性. 本 ...
- zabbix 监控cpu 温度
Zabbix监控Linux主机CPU温度 一.客户端 1.客户Linux主机安装Im_sensors [root@localhost ~]# yum install -y lm-sensors-y ...
- Myeclipse 2014 破解补丁以及Y2课件迅雷下载
一. 在破解myeclipse2014之前,要先把环境变量配置好: 1)打开我的电脑--属性--高级--环境变量2)新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变 ...
- js实现点击切换checkbox背景图片
在制作网页的过程中,经常需要实现点击切换背景图片的效果,本文关注的是表单中checkbox背景图片切换的实现.如图,在输入用户名和密码后,用户需要选择是否记住密码 图片背景为白色表示未勾选状态 ,背景 ...
- 停电后,在UPS电源下服务器自动关机脚本
一年总有那么几次莫明停电,公司的服务器经不起这样的折腾 写了一个断电后UPS备用电源自动关机的脚本 原理就是检测路由器网关是否能ping通,长时间持续ping不通视为停电了 路由器不要接到ups上 用 ...
- 分析ThreadLocal的弱引用与内存泄漏问题
目录 一.介绍 二.问题提出 2.1内存原理图 2.2几个问题 三.回答问题 3.1为什么会出现内存泄漏 3.2若Entry使用弱引用 3.3弱引用配合自动回收 四.总结 一.介绍 之前使用Threa ...