2014-09-21 32 views
1

我創建了一個新的類型和新的用戶別名數據類型:引用和VIEW DEFINITION權限,用戶在

CREATE TYPE dbo.MY_TYPE FROM varchar (128) NULL 
GO 
CREATE USER MyUser WITHOUT LOGIN; 
GO 

那麼,如果我不授予我的類型用戶的任何權限,那麼我看不到這種類型的定義:

EXECUTE AS USER = 'MyUser'; 
GO 
SELECT * FROM sys.types where name = 'MY_TYPE'; 
--returns nothing 
REVERT 
GO 

根據BOL

VIEW DEFI授予個體實體的NITION允許被授予者 查看指定實體的元數據。

所以,如果我授予VIEW DEFINITION權限:

GRANT VIEW DEFINITION ON TYPE::dbo.MY_TYPE TO MyUser; 

,並重複測試,我從sys.types的信息。還行吧。

問題是爲什麼我可以通過授予REFERENCES權限來解決該問題?

REVOKE VIEW DEFINITION ON TYPE::dbo.MY_TYPE FROM MyUser; 
GRANT REFERENCES ON TYPE::dbo.MY_TYPE TO MyUser; 
GO 

EXECUTE AS USER = 'MyUser'; 
GO 
SELECT * FROM sys.types where name = 'MY_TYPE'; 
--see the result here!!! 
REVERT 
GO 

回答

2

總之,它看起來像上的任何類型的許可足以看到的元吧。要獲得更深入的答案,請查看this