授予视图的SELECT权限,但不授予底层对象的SELECT权限

tho*_*ulb 24 sql t-sql security sql-server-2008

我经常读到VIEW的一个目的是安全性:允许一些用户访问底层表,而其他用户只能访问派生视图.考虑到这一点,我设计了几个视图,为外部用户提供受限数据集.

一切都很好,但实际上这不起作用.在我授予SELECT视图权限后,除非我同时授予SELECT所有基础对象,否则用户无法访问它.存储过程的相同故事.最终结果是非功能性的,因为我最终仍然允许对错误用户访问敏感数据,并且令人讨厌,因为很容易忘记一个对象并且用户回过头来抱怨该视图"不工作".

有没有办法SELECT在视图或存储过程上授予权限,而不必公开底层对象?

Gra*_*row 22

拥有该视图的同一用户是否也拥有基础表?如果不是,表的所有者需要授予视图所有者权限WITH GRANT OPTION.如果同一用户拥有表和视图,则授予视图权限就足够了.