Sql-Server
通過查詢查看視圖定義需要哪些權限?
我對我們的數據庫擁有完全的管理員權限,因此可以查詢和查看視圖定義。但是,我想在 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_SCHEMA
和sys
模式的 VIEW DEFINITION 和 SELECT 權限不會授予您查看視圖定義的權利。您添加的權限將為您提供有關 sys schema 和 information_schema 中所有對象的資訊。
我想您想查看在其他模式中創建的視圖定義,在這種情況下,您必須向使用者提供
VIEW DEFINITION
該特定模式。如 :
GRANT VIEW DEFINITION ON SCHEMA::SchemaWhereViewsAreCreated TO [YourUser]