oracle授权所有表修改权限 如何解决关于Oracle存储过程执行权限问题?

[更新]
·
·
分类:互联网
1895 阅读

oracle授权所有表修改权限

如何解决关于Oracle存储过程执行权限问题?

如何解决关于Oracle存储过程执行权限问题?

在数据库系统中存储过程是必不可少的利器,存储过程是预先编译好的为实现一个复杂功能的一段Sql语句集合。它的优点我就不多说了,说一下我碰到的问题吧。我在项目开发的过程中需要用存储过程来实现一个功能,其中涉及到判断一张表是否已经建立,没有建立就由存储过程来建立这张表。
CREATE OR REPLACE PROCEDURE TestProc
IS
flag number
BEGIN
select count(*) into flag from all_tables where table_nameTEMP3
if (flag0) then
execute immediate create global temporary table TEMP3 on commit preserve rows as select * from BUSI_ECONTRACT
else
execute immediate insert into TEMP3 select * from BUSI_ECONTRACT
end if
END
写这段存储过程比较简单,在测试执行的过程中,系统出现如下提示:
ora -01031 :权限不足
从错误提示我们定位到错误,发现存储过程在执行 Create table语句时,权限不足。我尝试着把存储过程改成匿名存储过程在PL/SQL中执行,语句既然通过了。这说明这段语句没有问题,问题出现在执行存储过程中。我使用的是DBA帐号登录系统,按理应该不存在权限不足的问题呀。问题出现再哪里呢?通过上网查阅资料,发现Oracle对于执行存储过程有和Sql-Server不一样的规定,这个规定造成了执行建表语句权限不足。
Oracle规定,在默认的情况下,在调用存储过程用户的角色不起作用,即在执行存储过程时只有Public权限。所以在调用Create table时,会有权限不足的提示。
存储过程分为两种,即DR(Definers Rights ) Procedure和IR(Invokers Rights ) Procedure。为什么会有两种存储过程呢?其实考虑完下面的问题就清楚了。比如说用户hrch创建了删除表tar_table的存储过程drop_table(),当用户hrch调用时,即删除用户hrch下

oracle授权语句?

给连接权限 grant connect to 用户 给资源权限 grant resource to 用户 给DBA权限 grant dba to 用户-----------------------role 就是角色,就是你建的用户啊