专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » 在存储过程中拥有"role"权限的特殊性 »正文

在存储过程中拥有"role"权限的特殊性

来源: 发布时间:星期三, 2009年1月21日 浏览:6次 评论:0

="t18">在Oracle数据库中用户拥有role权限在存储过程是不可以使用 举例如下:

SQL> select * from dba_role_privs where grantee='TEST'; GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE ------------ ------------ ------------ ------------ TEST DBA NO YES --用户拥有DBA这个role --再创建个测试存储过程: create or replace procedure p_create_table is begin Execute Immediate 'create table create_table(id )'; end p_create_table; --然后测试 SQL> exec p_create_table; begin p_create_table; end; ORA-01031: 权限不足 ORA-06512: 在"TEST.P_CREATE_TABLE", line 3 ORA-06512: 在line 1



--大家可以看到即使拥有DBA role也不能创建表role在存储过程中不可用 --遇到这种情况我们般需要显式进行系统权限如grant create table to test; --但这种思路方法太麻烦有时候可能需要进行非常多授权才能执行存储过程 --实际上Oracle给我们提供了在存储过程中使用role权限思路方法: --修改存储过程加入Authid Current_User时存储过程可以使用role权限

create or replace procedure p_create_table Authid Current_User is begin Execute Immediate 'create table create_table(id )'; end p_create_table; --再尝试执行: SQL> exec p_create_table; PL/SQL procedure successfully completed



标签:

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: