SQL Server 2008向information_schema.columns授予权限

pil*_*mps 8 sql-server permissions information-schema sql-server-2008

我有一系列存储过程从数据库中选择数据.我有一个角色(cctc_reader),它具有在程序上授予的执行权限.其中一个过程调用另一个存储过程,该过程recControl_system_option依次进行查询Information_schema.columns.

问题是在这个proc中查询

select column_name from information_schema.columns where table_name = 'recControl_manager'

不会返回任何记录.cctc_reader具有以下授权权限:

  • 每个选择过程
  • recControl_system_option

所以在理论上这应该有效.在dbo下运行时我没有问题.

如果我将db_datareader授予cctc_reader,那么查询就可以了,但我不想将读者权限授予所有表(因此我使用了存储过程).我已经尝试在一些文章中建议的主数据库中的Information_schema上授予选择权限,但仍然无法使其工作.

有什么建议?

Rem*_*anu 6

对象元数据可见性受VIEW DEFINITION权限的约束:

GRANT VIEW DEFINITION ON ... TO cctc_reader;
Run Code Online (Sandbox Code Playgroud)

VIEW DEFINITION权限允许用户查看授予权限的安全性的元数据.但是,VIEW DEFINITION权限不授予对安全性本身的访问权限.例如,仅授予表的VIEW DEFINITION权限的用户可以在sys.objects目录视图中看到与该表相关的元数据.但是,如果没有SELECT或CONTROL等其他权限,用户将无法从表中读取数据.

授予权限的权利取决于您的方案.它可以是dbo或其他一些模式,它可以是数据库本身,也可以是单独的表.如果我在你的位置,我会对recControl_system_option程序进行代码签名,并且我会在服务器级别对签名授予查看任意定义,这是一种使用角色和授予角色权限的更好,更安全的方法.有关如何签署过程并授予签名的服务器级别权限的示例,请参阅签署激活过程.