很多人都有这样的了解,用户拥有的role权限在存储过程是不可用的。示例: SQL> select * from dba_role_privs where grantee="SUK";GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE------------ ------------ ------------ ------------SUK DBA NO YESSUK CONNECT NO YESSUK RESOURCE NO YES用户SUK拥有DBA这个role。下面我们继续创建一个测试存储过程:create or replace procedure p_create_table isbeginExecute Immediate "create table create_table(id int)";end p_create_table;测试:SQL> exec p_create_table;begin p_create_table; end;ORA-01031: 权限不足ORA-06512: 在"SUK.P_CREATE_TABLE", line 3ORA-06512: 在line 1可以看到,即使拥有DBA role,也不能创建表。role在存储过程中不可用。遇到这种情况,我们一般需要显式进行系统权限,如grant create table to suk;但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储过程实际上,Oracle给我们提供了在存储过程中使用role权限的方法:修改存储过程,加入Authid Current_User时存储过程可以使用role权限。create or replace procedure p_create_table Authid Current_User isbeginExecute Immediate "create table create_table(id int)";end p_create_table;然后继续尝试执行:SQL> exec p_create_table;PL/SQL procedure successfully completed至此即可以执行了。Ubuntu 7.10 下安装MysqlSUSE Linux9下Oracle10g监听问题笔记相关资讯 Oracle数据库
- Oracle数据库全球化 (03月01日)
- Oracle数据库日期过滤方法性能比较 (02/02/2015 13:20:26)
- Oracle数据库安装中端口被占用问题 (10/29/2014 07:42:24)
| - 在CentOS 6.6上搭建C++运行环境并 (10/10/2015 19:44:40)
- Oracle数据库无法使用localhost和 (11/14/2014 16:39:10)
- Oracle 多数据库的数据同时更新 (06/16/2014 21:52:23)
|
本文评论 查看全部评论 (0)