2009-06-08 24 views
0

這裏是我的情況...SQL權限/安全性 - 我可以授予對使用另一個未授予權限的視圖的「選擇」權限嗎?

SQL角色

  • Staff_User

方案

  • 人民

  • People.Persons

  • People.PhoneNumbers

查看

  • People.vtPersons - vtPersons視圖過濾來自Persons表的數據,僅顯示屬於當前登錄用戶的數據。

  • People.vtPhoneNumbers - 的vtPhoneNumbers視圖過濾從PHONENUMBERS表僅示出了屬於在用戶當前登錄的數據。

  • People.vwContactInformation - 的vwContactInformation「查看」結合了vtPersons和vtPhoneNumbers數據,因此它可以被用作一個水晶報表的查詢。

的Staff_User角色已被授予「SELECT」權限vwContactInformation觀點而已。

我收到一個錯誤,現在說權限被拒絕給對象vtPhoneNumbers。我還必須授予對此視圖的「SELECT」權限嗎?從另一個方案的經驗來看,我不必這樣做,一切運作良好。但是現在我在我創建的第二個SCHEME中收到了這個錯誤。任何人都可以建議我在第一個方案中擁有什麼,它允許權限級聯到角色可訪問的視圖中調用的視圖,表格,函數等。

感謝, 賈斯汀

+0

您使用的是哪些DBMS?一些供應商提供「調用者」權利和「定義者」權利的特定行爲。 – 2009-06-09 03:50:49

回答

0

假設的SQL Server(所有版本)

錯誤表示「拒絕」:如果權限已丟失或不正確,你會看到類似「不存在或沒有權限」。基於此,我會檢查vtPhoneNumbers的權利,看看是否設置了任何顯式的DENY。 DENY is always evaluated and takes precedence.(對不起,在BOL中找不到它)。

爲什麼:

ownership chains/chaining想法意味着,如果所有的對象都在相同的架構(也稱爲所有者),不檢查所引用的對象的權限。

在這種情況下,不應該檢查vtPhoneNumbers和vtPersons的權限,因爲所有視圖和表都位於「People」架構中。

注意,REVOKE刪除權限(以前使用GRANT或DENY設置)。有人可能使用了DENY而不是REVOKE來刪除之前關於vtPhoneNumbers的GRANT聲明