通过查询查看视图定义需要什么权限?

Bru*_*tig 5 sql-server ssms view sql-server-2016

我对我们的数据库拥有完全的管理员权限,因此可以查询和查看视图定义。但是,我想在 JDBC Jenkins 作业魔术中使用只读用户查询视图。问题:与我的管理员用户不同,只读用户看不到视图的代码/定义。

当我担任管理员时,此查询为我提供了所有视图所需的所有视图定义和元数据:

SELECT name AS VIEW_NAME,
definition,
create_date,
modify_date  
FROM [my_database].[sys].[all_views]
JOIN [my_database].[sys].[sql_modules]
ON [my_database].[sys].[all_views].object_id = [my_database].[sys].[sql_modules].object_id
Run Code Online (Sandbox Code Playgroud)

结果,当以管理员身份执行查询时,我得到如下条目:

name        | definition        | create_date | modify_date 
sample_view | SELECT * FROM bla | 01.01.2017 | 02.01.2017
Run Code Online (Sandbox Code Playgroud)

然而,当我用我的只读用户做这件事时,我得到了

 name        | definition        | create_date | modify_date 
 sample_view | null              | 01.01.2017  | 02.01.2017
Run Code Online (Sandbox Code Playgroud)

在这里你可以看到我对只读用户的权限配置。尽管我已授予他必要的权限,但用户在结果集中看不到视图定义。

更奇怪的是,在允许用户执行 SELECT 和 VIEW 定义语句并保存配置之后,SELECT 和 VIEW DEFINITION 的第二个条目被添加到配置表中。

只读用户权限

小智 3

简单地授予对架构的 VIEW DEFINITION 和 SELECT 权限INFORMATION_SCHEMA不会sys赋予您查看视图定义的权限。

您添加的权限将为您提供有关 sys schema 和 information_schema 中所有对象的信息。

我想您想查看在其他模式中创建的视图定义,在这种情况下,您必须向用户提供VIEW DEFINITION该特定模式。

例如 :GRANT VIEW DEFINITION ON SCHEMA::SchemaWhereViewsAreCreated TO [YourUser]