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”语句一定要有删除表的权限!!

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