对组成链对象的用户权限控制不同于单独访
2008-12-31 10:17:05 来源:WEB开发网视图是数据库应用中的一个很好的工具,但是,其也有安全隐患。如在SQL Server视图的设计过程中,就存在“所有权链的权利寻租问题”。
什么叫做SQL Server的所有权链呢?如下图所示。当用户需要使用视图“产品成本”时,由于该视图需要用到另外一张视图“材料成本”中的内容,故会自动去打开“材料成本”这个对象。同理,由于材料成本要引用数据库对象“物料清单”中的数据,故数据库又会自动去调用这张基础表的内容。类似的,当多个数据库对象互相按顺序访问,这种顺序就称为“链”。由于在SQL Server数据库中,对组成链对象的用户权限控制不同于单独访问各个对象时的控制。所以,在这里就会出现一个“权利寻租”的安全隐患。
A公司数据库
视图:产品成本
所有者:Landy
视图:材料成本
所有者:Landy
基础表:物料清单
所有者:Grerc
B公司数据库
用户:Lance
一、链的权限控制原则。
若需要了解链的权限控制原则,就需要了解什么叫做所有权链断开与所有权链未断开。下面笔者结合上面这个图示,来谈谈链所涉及对象的具体权限处理方式。
现在假设视图“产品成本”的所有者为“Landy”,他把这个对象的访问权限赋予给了用户Lance。此时,这个用户就可以访问数据库对象“产品成本”这张视图。
第一步:产品成本调用数据库对象材料成本。
当用户Lance访问视图“产品成本”时,由于该视图需要引用另外一个数据库对象“材料成本”视图。此时,SQL Server数据库会自动去访问“材料成本”这张视图。这个访问跟用户直接访问数据库对象不同。若用户Lance直接去访问“材料成本”这张视图时,数据库会去查询这个数据库对象的访问权限。而现在Lance由于没有“材料成本”视图的访问权限,所以,数据库会拒绝。但是,现在通过视图“产品成本”去引用“材料成本”视图中的内容,则就不一样了。此时,数据库不会先去查询“材料成本”的访问权限,而是先查询“材料成本”这张视图的所有者。由于这张视图的所有者跟调用它的数据库对象“产品成本”的所有者一致,都是“Landy”。此时,数据库就不会再去查询“材料成本”这张视图的访问权限,而直接认为用户Lance具有相关的权限,把信息返回给用户。由于此时,数据库对象“产品成本”与其直接引用的“材料成本”所有权没有发生变化,此时,就叫做“所有权链未断”。
更多精彩
赞助商链接