2009-11-10 22 views
3

我搜索了一個已經存在但找不到的相關問題。查看管理工作室中的表格列表所需的權限

我正在爲我們的服務器場中的一些數據庫設置只讀數據庫角色。下面是一個表的權限的示例:

GRANT SELECT ON [dbo].[Table] TO [ReadOnly] 
GRANT VIEW DEFINITION ON [dbo].[Table] TO [ReadOnly] 
DENY ALTER ON [dbo].[Table] TO [ReadOnly] 
DENY CONTROL ON [dbo].[Table] TO [ReadOnly] 
DENY DELETE ON [dbo].[Table] TO [ReadOnly] 
DENY INSERT ON [dbo].[Table] TO [ReadOnly] 
DENY REFERENCES ON [dbo].[Table] TO [ReadOnly] 
DENY TAKE OWNERSHIP ON [dbo].[Table] TO [ReadOnly] 
DENY UPDATE ON [dbo].[Table] TO [ReadOnly] 

這工作按預期的SELECT權限...我能ONLY SELECT數據,這是exactky我想要的。

但是,我無法在Management Studio中的指定數據庫的「表」選項卡中看到表的列表。我與這個用戶的目標是向一些不熟悉SQL的用戶提供他們可以用來提取數據並開始嘗試SQL的登錄。這些用戶對統計處理語言SAS有豐富的經驗,所以他們在處理代碼方面有一定的經驗,但在SQL中並沒有太多的使用,特別是

哪些權限將在Management Studio中顯示錶列表?

+0

這特別令人不安......我的印象是,VIEW DEFINITION是查看數據庫元數據所需的全部。 – karlgrz

+0

這是您需要的唯一權限 - 您明確拒絕對同一用戶的其他可繼承權限,這是重寫GRANT(DENY總是優先於GRANT)。更改爲REVOKE,您將看到SSMS中的對象(請參閱下面的答案) – chadhoc

回答

4

授予任何權限和查看定義是您所需要的,但您也明確DENY來自同一用戶的可繼承權限(DENY始終覆蓋GRANT)。如果你只是不要GRANT的權限,他們將不會擁有它(或者,你可以REVOKE而不是DENY,它沒有明確覆蓋GRANT)。如果在上述腳本中將DENY更改爲REVOKE,則用戶將能夠列出/查看SSMS中的對象。

+0

這個伎倆!謝謝@chadhoc! – karlgrz

0

這不是問題的答案 - 但它做你需要做什麼:

使用db_datareader角色 - 你要爲只讀用戶。 那麼如果你需要進一步隱藏他的一些表 - 只要處理它們。

+0

非常好......這是所有名爲「INFORMATION_SCHEMA。***」的表嗎? – karlgrz

+0

我認爲你可能需要授予視圖定義更多的對象爲這項工作,我想弄清楚哪些是他們...... – Dani

+0

我已經編輯了答案 - db_datareader角色是很好的選擇創建一個只讀用戶。可以看到模式,但不能訪問表。 – Dani

相關問題