有没有办法只授予用户访问数据库的所有非系统视图的权限?

Chr*_*cia 9 security sql-server

在 SQL Server 中,我在特定数据库中有一个用户,我被要求仅授予他们访问该数据库的所有非系统视图的权限。我相信这可以通过编辑视图类型的安全对象并在每个视图上授予选择来完成,但是有很多很多视图。有没有更有效的方法来实现这一目标?

Mar*_*ith 8

没有语法如

GRANT SELECT ON ALL::Views TO SomeUser 
Run Code Online (Sandbox Code Playgroud)

您可以GRANT SELECT对单个对象架构或整个数据库进行许可,但不能按对象类型过滤以仅包括视图。对于这种临时任务,我可能会创建一个名为 的新角色ViewReader,将用户添加到该角色,然后在 SSMS 中运行

SELECT 'GRANT SELECT ON ' + 
          QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + 
      ' TO ViewReader;'
FROM sys.views
WHERE is_ms_shipped = 0
Run Code Online (Sandbox Code Playgroud)

生成脚本以运行到GRANT所需的权限。