2
A
回答
9
正確答案是否,存儲過程無權寫入表中。然而大多數用戶感知它,不正確,因爲由於Ownership Chains YES:
當多個數據庫對象訪問 彼此順序,序列 被稱爲鏈。雖然這樣的鏈不獨立存在,但當SQL Server遍歷鏈中的鏈接時,SQL Server將對構成對象 評估 的權限,與分別訪問對象的 不同。 這些差異對於管理安全性具有重要的意義 。 所有權鏈接允許通過對一個對象(例如 視圖)設置 權限來管理 多個對象的訪問權限,例如 多個表。
因此,一個程序就可以寫入到該用戶沒有權限寫入如果他們形成所有權鏈表。這意味着如果包含該表的模式的所有者與包含該過程的模式的所有者相同,則會形成所有權鏈,並允許該過程寫入表中。由於實踐中部署的絕大多數對象屬於dbo
模式,所有權鏈幾乎總是形成。
瞭解這些細節非常重要,因此您可以排查問題並瞭解爲什麼是允許寫入表格的過程。 Erland Sommarskog在這個主題上有一個很好的綜合報道:Giving Permissions through Stored Procedures。本文詳細解釋了所有可用的選項。您的最佳選擇,比所有權鏈接更好,是code signing。
瞭解這種工作原理還有助於理解爲什麼動態SQL似乎'破壞':運行動態SQL是所有權鏈中的一個自動中斷,導致所有'魔法'消失。這也有助於理解爲什麼這個'魔術'似乎不在數據庫之外工作:cross db ownership chaining Option默認值爲0.
0
0
總之,是的。
這種情況下的主要限制是用戶是否可以執行存儲過程。
當創建存儲過程,它需要一個登錄/用戶已在問題表中必要的寫訪問完成。
相關問題
- 1. 在Ruby中訪問MySQL存儲過程
- 2. 存儲過程上次訪問時間?
- 3. 訪問存儲過程時出錯
- 4. 使用存儲過程訪問列表
- 5. SQL存儲過程在訪問中超時
- 6. 存儲過程臨時表問題?
- 7. 在Oracle存儲過程中訪問另一個用戶的表
- 8. 表格處於不同模式時通過存儲過程訪問表格
- 9. 何時在存儲過程中使用CTE在存儲過程
- 10. 使用robconery/massive訪問存儲過程?
- 11. 運行存儲過程從訪問VBA
- 12. 允許訪問存儲過程
- 13. 只讀訪問存儲過程
- 14. 從存儲過程訪問Apex_application.g_fXX值
- 15. DB2存儲過程 - 循環訪問值?
- 16. 休眠存儲過程訪問
- 17. 從Java訪問存儲過程%ROWTYPE
- 18. 使用存儲過程訪問數據
- 19. 只讀訪問存儲過程內容
- 20. 無法訪問存儲過程
- 21. 訪問遠程存儲過程時語法錯誤不正確
- 22. 從MySQL存儲過程綁定訪問表單/報表
- 23. 存儲過程中的臨時表
- 24. 訪問在過程之外但在同一事務中的存儲過程內創建的臨時表
- 25. C#訪問存儲過程時出錯插入到表中並返回ID
- 26. Windows Azure存儲表的訪問時間
- 27. 訪問存儲爲BLOB的Java對象的MYSQL存儲過程
- 28. 在ember.view中訪問存儲
- 29. 在數據訪問層中使用存儲過程
- 30. 在mysql存儲過程中循環訪問數組
不能滿足這個足夠!只是測試了這一點,這是真的。現在我必須改變我的一些模式的所有權.... – DForck42 2011-03-18 18:51:36