Sql-Server

通過查詢查看視圖定義需要哪些權限?

  • July 13, 2017

我對我們的數據庫擁有完全的管理員權限,因此可以查詢和查看視圖定義。但是,我想在 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

結果,以管理員身份執行查詢時,我得到如下條目:

name        | definition        | create_date | modify_date 
sample_view | SELECT * FROM bla | 01.01.2017 | 02.01.2017

但是,當我對我的只讀使用者執行此操作時,我得到的並不是那麼多

name        | definition        | create_date | modify_date 
sample_view | null              | 01.01.2017  | 02.01.2017

在這裡你可以看到我對只讀使用者的權限配置。儘管我已授予他必要的權限,但視圖定義在結果集中對使用者是不可見的。

更奇怪的是,在允許使用者執行 SELECT 和 VIEW 定義語句並保存配置後,SELECT 和 VIEW DEFINITION 的第二個條目被添加到配置表中。

只讀使用者權限

簡單地授予對INFORMATION_SCHEMAsys模式的 VIEW DEFINITION 和 SELECT 權限不會授予您查看視圖定義的權利。

您添加的權限將為您提供有關 sys schema 和 information_schema 中所有對象的資訊。

我想您想查看在其他模式中創建的視圖定義,在這種情況下,您必須向使用者提供VIEW DEFINITION該特定模式。

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

引用自:https://dba.stackexchange.com/questions/179755