2013-08-16 40 views
3

我有一張桌子和一個視圖。它們在不同的模式,但具有相同的所有者:更新,但無法更新基礎表,爲什麼?

  • 根據sys.objects中:principal_ID = NULL,schema_ID是根據sys.schemas 1和4
  • :兩種模式具有相同的principal_id(1 = DBO)

的視圖是簡單地select a,b,c from table

現在,用戶已經給出了權利選擇,插入,更新,並從視圖中刪除行。他對底層表沒有任何權利。

實際上,用戶可以選擇數據。但如果他想改變什麼,我們得到了兩個錯誤:「沒有選擇准予對錶」和‘授予表不更新’

這是怎麼回事錯在這裏

+0

有沒有在視圖或表中的任何觸發器有哪些?與所有對象的同一個所有者一樣,這應該起作用。 – steoleary

+0

@ stellary不,沒有觸發器。我不明白。由於所有權鏈接,這應該工作。如果我授予更新表的權利,那麼它就可以工作,但是這破壞了它的整個想法。 –

回答

0

解決方法是,我正在訪問C#SqlCommandBuilder類的視圖。但我不知道的是CommandBuilder試圖「聰明」並分析視圖。然後創建訪問基礎表而不是視圖的語句。唯一的解決方案是繞過SqlCommandBuilder。

今年我絆了問題也,這裏是另一個鏈接: https://stackoverflow.com/a/31231563/2504785

2

更新,能夠檢視只更新?如果您授予對錶的權限,也-able:

需要UPDATE,INSERT,或在目標表中刪除權限,具體取決於正在執行的操作

請參閱TechNet文章Modify Data Through a View