2014-06-20 64 views
1

我們希望授予用戶execute一個存儲過程,該存儲過程將訪問某些表,但阻止同一用戶對相同表執行直接查詢。存儲過程表安全

這是我們目前的型號。用戶foo是存儲過程的所有者。它具有對所有必要表格的直接選擇,插入,更新和刪除權限。存儲過程已使用AUTHID CURRENT_USER創建。 Foo將其存儲過程授予execute至用戶bar。用戶bar通過上面的授權調用存儲過程。根據設計,它無法更改任何存儲過程的源代碼。它可以通過角色訪問必要的表格。

到目前爲止,這工作正常。現在我們有了一個新的要求。必須創建一個可以執行存儲過程但不能直接對錶進行查詢的新用戶(通過SQLPlus,JDBC,ODBC等)

我看不到任何明顯的實現方法。所有建議都歡迎。

回答

3

如果foo擁有的過程被定義爲authid definer,那麼默認情況下,調用者不需要基礎表上的特權來執行存儲過程。通常情況下,這就是Oracle管理權限的方式。使用authid current_user存儲過程的情況並不常見,因爲這會強制調用方在存儲過程上擁有對基礎表的特權以外的權限。

您需要修改現有過程以使其成爲定義者的權限存儲過程,否則您需要創建一組單獨的定義者權限存儲過程,以使新用戶可以訪問該過程。