用户可以通过调用过程从表中删除行

时间:2013-08-13 10:50:35

标签: sql-server sql-server-2008 sql-server-2008-r2

我对SQL Server安全性感到有些困惑

  • 我们有登录用户test

  • 我们有表格dbo.tblSessionFilter

用户测试在此表上没有选择权限且没有删除权限(我测试了这个!!)

  • 然后我们有程序

    create procedure dbo.procFilter_Clear with execute as caller 
    as
       delete from dbo.tblSessionfilter 
       where spid = @@SPID
    

用户测试已执行此程序。

现在,用户测试可以调用此过程,可以从表中删除条目;虽然他没有对表格进行直接删除访问,但程序为execute as caller

怎么可能?

可能是因为过程和表在同一个模式中?

1 个答案:

答案 0 :(得分:1)

请参阅Ownership Chains

  

当多个数据库对象按顺序相互访问时,序列称为链。虽然这些链不是独立存在的,但当SQL Server遍历链中的链接时,SQL Server对组成对象的权限评估方式与单独访问对象时的权限不同。

  

当通过链访问对象时,SQL Server首先将对象的所有者与调用对象的所有者进行比较。这是链中的前一个链接。 如果两个对象具有相同的所有者,则不会评估所引用对象的权限。

我的重点