所有权链(Ownership Chain)是特殊的权限评估方式,常见拥有所有权的数据库对象是:数据库对象,数据库角色(Role),和架构(Schema),在创建数据库角色,或架构时,SQL Server自动创建所有权:

CREATE ROLE role_name [ AUTHORIZATION owner_name ]
CREATE SCHEMA schema_name [AUTHORIZATION owner_name]

数据库对象,例如,数据表(Table),存储过程(SP),视图(View)等,也有所有者(Owner),从系统视图 sys.objects 中查看数据库对象的所有者,字段principal_id 指定数据库对象的所有者,如果该对象的principal_id为null,并且包含在架构中,那么该对象(schema-contained object)的所有者是其数据库架构的所有者(Schema Owner)。

一,所有权链的权限评估方式

SQL Server保证只有被授予权限的安全主体(Principal)才能访问安全对象(Securable)。当多个数据库对象相互访问时,访问的对象序列称作链(chain),链中的每个节点都是一个数据库对象。当遍历链中的各个节点时,SQL Server会采用特殊的方式来评估权限,这跟分别访问单个对象时的权限评估方式不同。

当通过链访问对象时,SQL Server首先把对象的所有者与调用对象的所有者(链中的上一个链接)进行比较。 如果两个对象拥有相同的所有者,则不会检查被引用对象的权限。每当一个对象访问具有不同所有者的另一个对象时,所有者链被中断,并且SQL Server必须检查调用者的安全上下文。这意味着,当一个对象的所有者把权限授予其他用户时,该用户能够访问该所有者拥有的所有数据库对象。

所有权链是一种特殊的权限评估方式:只检查链中对象的所有者,如果所有者相同,那么有权限访问该对象。这就是说,在所有权链中,SQL Server完全信任数据库对象的所有者(Owner),不会检查用户是否具有该对象的访问权限,只比较链中相邻的两个对象的所有者是否相同,如果相同,那么就有权限访问该对象;只在所有者不同时,才会执行权限检查。这在数据库管理上非常有用,但也会带来潜在的风险。

假设存在一个存储过程,用于从一个数据表中读取数据,用户被授予对存储过程的执行权限。如果存储过程和表具有相同的所有者,那么不需要被授予对该表的任何权限(甚至被授予拒绝权限),用户都可以访问该数据表。 但是,如果存储过程和表具有不同的所有者,那么SQL Server必须在允许访问数据之前检查用户在表上的权限。

二,修改所有者

所有权实际上是一种特殊的权限验证(AUTHORIZATION),修改所有权链的语法如下:

ALTER AUTHORIZATION
ON [ <class_type>:: ] entity_name
TO { principal_name | SCHEMA OWNER } 

常见的class_type是:OBJECT、ROLE、SCHEMA

三,所有权链关系不适用的情况

所有权链不适用于动态SQL语句,要调用执行动态TSQL语句的存储过程,调用者(caller)必须被授予访问基础表的权限,这使得应用程序更容易受到SQL注入攻击。 SQL Server提供了新的安全机制,例如,模拟和认证得签名模块,不需要授予对基础表的权限。

引文1,出自《The Ownership Chain – How the Securable Owner affects Permission Enforcement in SQL Server》:

When SQL Server executes a query, it checks the permissions of the executing principal on every object that is touched on the way. Therefore, if you run a select statement against a view that in turn selects form a table, you need to have access to both the view and the underlying table.

However, before checking the permissions on the underlying securable, SQL Server checks if the accessing object (the view) and the accessed securable (the table) have the same owner. If they have the same owner, permission checking on the accessed securable is completely skipped and access is granted.

引文2,出自《【译】第七篇 SQL Server安全跨数据库所有权链接》:

所有数据库对象都有一个所有者,并且所有者控制谁在对象上有权限。对象访问其他对象,比如存储过程在SELECT语句把多张表联接起来,形成一个连续的所有权链接,只要一个所有者拥有所有对象。
这种情况下用户只要有顶层对象(比如存储过程、视图)的权限,访问其他对象并不需要对底层对象有权限,只要存在一个连续的所有权链接就行。SQL Server一旦证实用户对顶层对象有权限就会停止检查底层对象的权限。这种设计为用户提供了更多更好的控制权,因为用户只需要直接访问对象的权限。
提示:所有权链接只适用于对象的权限,如SELECT、UPDATE和EXECUTE操作。SQL Server总是检查数据定义语言语句的权限,因为这些权限应用于语句而不是对象。

参考文档:

Ownership Chains

Security Through Ownership Chains

The Ownership Chain – How the Securable Owner affects Permission Enforcement in SQL Server

Ownership chaining in SQL Server security feature or security risk

【译】第七篇 SQL Server安全跨数据库所有权链接

作者:悦光阴
出处:http://www.cnblogs.com/ljhdo/
本文版权归作者和博客园所有,欢迎转载,但未经作者同意,必须保留此段声明,且在文章页面醒目位置显示原文连接,否则保留追究法律责任的权利。

分类: Security
本文转自悦光阴博客园博客,原文链接:http://www.cnblogs.com/ljhdo/p/4602544.html,如需转载请自行联系原作者

所有权链(Ownership Chain)相关推荐

  1. 职责链模式(Chain of Responsibility)(对象行为型)

    1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就推卸给另外个一个部门(对象).至于到底谁来解决这个问题呢?政府部门就是为了可以避免屁民的请求与 ...

  2. atitit.设计模式(1)--—职责链模式(chain of responsibility)最佳实践O7 日期转换

    atitit.设计模式(1)---职责链模式(chain of responsibility)最佳实践O7 日期转换 1. 需求:::日期转换 1 2. 可以选择的模式: 表格模式,责任链模式 1 3 ...

  3. 乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern)

    原文:乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 责任链模式(Chain of ...

  4. 二十四种设计模式:责任链模式(Chain of Responsibility Pattern)

    责任链模式(Chain of Responsibility Pattern) 介绍 为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求.将这些对象连成一条链,并沿着这条链传递该请求, ...

  5. hive时空链战_时空链战Chain Strike游戏电脑版下载_时空链战Chain Strike最新电脑版下载_18183手机游戏下载...

    时空链战Chain Strike电脑版下载拥有丰富的玩法模式任你选择,让你的游戏过程更加的精彩! <时空链战>(Chain Strike)由韩国游戏商Com2uS研发制作,故事讲述了男主角 ...

  6. 责任链模式(Chain of Responsibility)

    责任链模式(Chain of Responsibility) 1.意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个 ...

  7. 区块链公司Chain在纳斯达克区块链…

    区块链初创公司Chain已经允许私人投资者在纳斯达克最近推出的私人市场解决方案Linq购买其发行的股票. 在声明中:纳斯达克称Chain是第一家使用Linq技术发行公司股票的公司,允许私人投资投资.该 ...

  8. 责任链模式 Chain of Responsibility

    责任链模式是一种设计模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个对象最 ...

  9. iOS之深入解析响应者链Responder Chain

    一.响应链事件 iOS 中的事件可分为:触摸事件(multitouch events).加速计事件(accelerometer events).远程控制事件(remote control events ...

最新文章

  1. leetcode算法题--翻转单词顺序
  2. 网络组Network Teaming
  3. (2) nginx信号量
  4. Android开发之Git提交Template模板配置
  5. 一个拆分使用的存储过程例子
  6. 1.9 编程基础之顺序查找 08 白细胞计数 python
  7. c语言encoder作业字符数组,C语言练习题库----数组
  8. python 06day --bootstrap框架使用及linux的磁盘管理
  9. BizTalk database lookup funcatoid DbConnectionString 设定问题有解了
  10. 算法分析与设计:贪心算法
  11. 电子计算机能够按照,电子计算机能够快速、自动、准确地按照人们地意图工作的基本思想最主要是什么,由谁在1946年提出的。...
  12. GPU 编程与CG 语言之阳春白雪下里巴人——CG学习读书笔记之数学函数(之二)。
  13. [测试通过]svn详细权限配置
  14. 亚马逊黑五哑火,中国跨境电商高歌猛进!
  15. 2020新版软件自动化测试自学全套教程——中级程序员学习路线
  16. 聚划算影响淘宝搜索权重?客服:未接到通知
  17. 【报告分享】2020年中国房地产销售额百亿企业排行榜-中国指数研究院(附下载)
  18. ISO9001标准文档模版-测试计划
  19. 关于EFI启动安装系统的一些心得
  20. WebAssembly上手:基础指南

热门文章

  1. Codeforces Round#308
  2. python--之np.any,np.a;;
  3. pytorch-tensorflow版本选择-cuda8-cudnn5.1
  4. 【树莓派搭建个人网站】花生壳内网穿透
  5. 为什么python如此火爆_Python为何如此火爆?
  6. linux 采集 bash 脚本,Linux shell脚本攻略(2)
  7. java 上文件传示例_Java解压缩文件示例
  8. mongodb更新语句_MongoDB更新
  9. python字符串转化列表_Python列表到字符串的转换
  10. testng xml_TestNG XML