2012-08-15 64 views
0

比方說,我有一個權限更新視圖,其中的觀點是:修改視圖修改基本關係,而我沒有權限

create view v as select * from Student where major like '%Engineering%'

我無權修改或查看任何主要不含「工程」一詞的學生。即使我插入的學生的專業是'Biology',我是否應該被允許插入該視圖?視圖會傳播到基礎關係嗎?

回答

1

它取決於數據庫引擎以及如何創建視圖。

您的原始視圖定義將允許Oracle和SqlServer用戶插入用戶無法看到的視圖行,或者更新視圖行以使行不再可見。

但是你可以添加WITH CHECK OPTION在甲骨文和SQLServer視圖,以防止用戶插入或更新視圖行這樣的結果是不可見的:

create view v as select * from Student where major like '%Engineering%' with check option; 
0

我剛剛在SQL Server 2008上嘗試過它 - 插入的行確實傳播到基礎表。 顯然,從視圖中進行選擇時,您將無法看到新的行。