視圖和過程可訪問由不同用戶擁有的基礎對象。例如,如果 usera、userb、 userc 和 userd 是四個不同的用戶,而 userd.viewd 可能基於userc.viewc, userc.viewc 可能基於 userb.viewb, userb.vIEwb 可能基於usera.table。對於過程,也與此相似:userd.procd 可能會調用userb.procb.procc, userc.procc 可能會調用 userb.procb, userb.procb 可能會插入 usera.tablea。
下列 " 任意訪問控制 "(DAC) 規則適用於嵌套視圖和表:
·要創建視圖,用戶必須對視圖中的所有基本對象 (例如,表和視圖)具有 SELECT 權限。
·要訪問視圖,必須用 GRANT OPTION (授權選項)向視圖所有者授予對基表或視圖的適當權限,還必須向視圖的用戶授予對視圖的適當權限。
·用 WHERE 子句更新需要同時具有 SELECT 和 UPDATE 權限。
·如果用戶擁有視圖定義中的表,則用戶可以通過某個視圖來訪問這些表,即使用戶不是該視圖的所有者並且尚未被授予對該視圖的訪問權限,也可以這樣做。
下列 DAC 規則適用於嵌套過程:
·用戶無需對基礎對象 (例如,表、視圖或過程)具有任何權限即可創建過程。
·要執行一個過程,過程的所有者需要對該過程所引用的對象具有適當的權限。
·即使某個用戶擁有某個過程引用的所有表,除非該用戶已被授予對該過程的 EXECUTE 權限,否則該用戶將無法執行該過程以訪問這些表。