SQL Server中所有权链的权利寻租

发表于:2013-3-12 09:59

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  视图是数据库应用中的一个很好的工具,但是,其也有安全隐患。如在SQL Server视图的设计过程中,就存在“所有权链的权利寻租问题”。

  什么叫做SQL Server的所有权链呢?如下图所示。当用户需要使用视图“产品成本”时,由于该视图需要用到另外一张视图“材料成本”中的内容,故会自动去打开“材料成本”这个对象。同理,由于材料成本要引用数据库对象“物料清单”中的数据,故数据库又会自动去调用这张基础表的内容。类似的,当多个数据库对象互相按顺序访问,这种顺序就称为“链”。由于在SQL Server数据库中,对组成链对象的用户权限控制不同于单独访问各个对象时的控制。所以,在这里就会出现一个“权利寻租”的安全隐患。

  A公司数据库

  视图:产品成本

  所有者:Landy

  视图:材料成本

  所有者:Landy

  基础表:物料清单

  所有者:Grerc

  B公司数据库

  用户:Lance

  一、链的权限控制原则。

  若需要了解链的权限控制原则,就需要了解什么叫做所有权链断开与所有权链未断开。下面笔者结合上面这个图示,来谈谈链所涉及对象的具体权限处理方式。

  现在假设视图“产品成本”的所有者为“Landy”,他把这个对象的访问权限赋予给了用户Lance。此时,这个用户就可以访问数据库对象“产品成本”这张视图。

  第一步:产品成本调用数据库对象材料成本。

  当用户Lance访问视图“产品成本”时,由于该视图需要引用另外一个数据库对象“材料成本”视图。此时,SQL Server数据库会自动去访问“材料成本”这张视图。这个访问跟用户直接访问数据库对象不同。若用户Lance直接去访问“材料成本”这张视图时,数据库会去查询这个数据库对象的访问权限。而现在Lance由于没有“材料成本”视图的访问权限,所以,数据库会拒绝。但是,现在通过视图“产品成本”去引用“材料成本”视图中的内容,则就不一样了。此时,数据库不会先去查询“材料成本”的访问权限,而是先查询“材料成本”这张视图的所有者。由于这张视图的所有者跟调用它的数据库对象“产品成本”的所有者一致,都是“Landy”。此时,数据库就不会再去查询“材料成本”这张视图的访问权限,而直接认为用户Lance具有相关的权限,把信息返回给用户。由于此时,数据库对象“产品成本”与其直接引用的“材料成本”所有权没有发生变化,此时,就叫做“所有权链未断”。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号