ORACLE多用戶之間共享存儲過程

在數據庫中,有兩個用戶usera,userb,如果在b中有個存儲過程,需要用a的用戶去調用,(比如b是權限很高的用戶,而a只是普通用戶,爲了屏蔽給a最小的權限只能如此)。於是,我就用grant execute on 存儲過程名 to usera。這樣,在a的用戶下面就能看到存儲過程了,但是我執行以後,還是報ora-1031,說是沒有權限,經過於高手交流,說是需要將存儲過程之中涉及的表的查詢權限賦值給a。於是我再次進行賦權,但是我的存儲過程中的表都是動態生成的,一天一個,而又不想給他any的權限。被逼無奈,又冥思苦想,發現存儲過程能夠正常的記錄日誌,就是操作日誌表。於是得出結論:如果給另一個用戶賦權以後,當它執行存儲過程時,就相當於存儲過程在自己的用戶下執行,不必再給表賦權了,把高手的結論推翻了。但是爲什麼還有1031的權限問題呢,繼續跟蹤!發現語句execute immediate語句中有truncate語句,需要清除a不用戶的表。而b用戶沒有drop any table或者a用戶表的權限!這次是真正的問題,所在,於是賦權,問題OK。

 

    結論:存儲過程賦權以後,相關的任何表和過程都不用再次賦權。就像語言對外提供的方法一樣!

   execute immediate “truncate”語句一定要有刪除表的權限!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章