Authid Current_User  的使用

在开发过程中,会遇到用户拥有的role权限在存储过程中是不可用的,遇到这种情况,经常采用一般需要显示授权,如:grant create table to user  grant truncate table to user ;这种方式是可以解决问题,当时很繁琐,有可能会执行N多grant才能执行存储过程,然后oracle很智能的提供了在存储过程中使用用户role权限的方法,在存储过程中添加

Authid Current_User,这样做相当于给调用者授权。以下为相关的example


SYS@ orcl >select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

SYS@ orcl >conn test/test
Connected.
TEST@ orcl >create or replace procedure p_test
  2  as
  3  begin
  4  execute immediate'create table t(a number)';
  5  end;
  6  /

Procedure created.
TEST@ orcl >exec  p_test;
BEGIN p_test; END;

*
ERROR at line 1:
ORA-01031: 权限不足
ORA-06512: 在 "TEST.P_TEST", line 4
ORA-06512: 在 line 1

--下面一步查看该用户的role,可以看到拥有dba权限,但是却不能被存储中的execute使用,所以报错
TEST@ orcl >select * from dba_role_privs where grantee='TEST';

GRANTEE                        GRANTED_ROLE                   ADM DEF
------------------------------ ------------------------------ --- ---
TEST                           DBA                            NO  YES

--修改存储过程,添加Authid Current_User
TEST@ orcl >create or replace procedure p_test
  2  Authid Current_User
  3  as
  4  begin
  5  execute immediate'create table t(a number)';
  6  end;
  7  /

Procedure created.

TEST@ orcl >exec  p_test;

PL/SQL procedure successfully completed.
--可以看到t表已经创建成功
TEST@ orcl >select * from t;

no rows selected

总结:在存储过程中存在这样的问题,都应该使用Authid Current_User,要不然只能显示的进行授权,不方便管理不说,且开发的时候可能会很复杂。


©著作权归作者所有:来自51CTO博客作者小麦苗DB宝的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 为何SYSTEM用户可以将V$SESSION的查询权限赋权给其他用户而SYS用
  2. 身份验证和权限管理---Openshift3.9学习系列第三篇
  3. 我的应用所需权限都已全部打开,定位数据依然不准确?
  4. Oracle的SYS用户登录报权限不足(ORA-01031: insufficient privile
  5. Oracle 定义者权限与调用者权限(AUTHID CURRENT_USER)
  6. Oracle角色权限之Default Role
  7. GNOME Linux 桌面入门
  8. 全面介绍 Linux 权限
  9. 【DB笔试面试265】在Oracle中,Oracle的SYS用户登录报权限不足的常

随机推荐

  1. android 通过资源文件名称获取资源文件id
  2. Android ——Window类
  3. 【Android】_SmsReceicer_短信监听
  4. Android Gradle 基础认识
  5. 指定浏览器访问指定页面(支持UC、Opera、
  6. Android入门之SeekBar
  7. @android:style/Theme.Dialog 和 @style/
  8. 三、mono for android 学习:参考书籍
  9. LocationManager Android自动定位使用以
  10. Hardware Acceleration | Android Develo