Oracle:Authid Current_User使用
由于用户拥有的role权限在存储过程是不可用的。遇到这种情况,我们一般需要显示授权,如grant create table to user;但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储过程,实际上,oracle给我们提供了在存储过程中使用role权限的方法:修改存储过程,加入Authid Current_User时存储过程可以使用role权限。
下面以例子说明:
----执行存储过程p_create_emp2报下面的错误:
SQL> exec p_create_emp2; begin p_create_emp2; end; ORA-01031: 权限不足
ORA-06512: 在 "ECHO.P_CREATE_EMP2", line 12
ORA-06512: 在 line 2 ----查看p_create_emp2,该存储过程是要创建emp2表
create or replace procedure P_create_emp2 as
cursor t_cursor is
select * from user_tables where table_name = 'EMP2';
t_cur t_cursor%rowtype;
num int:=0;
begin
for t_cur in t_cursor loop
num:=num+1;
end loop;
if num=1 then
execute immediate 'drop table emp2 purge';
execute immediate 'create table emp2 as select * from emp';
else
execute immediate 'create table emp2 as select * from emp';
end if;
end P_create_emp2; ----查看echo用户的角色或权限
SQL> select * from dba_role_privs where grantee='ECHO'; GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
------------------------------ ------------------------------ ------------ ------------
ECHO DBA NO YES
----有dba的角色,说明建表的权限 ----修改存储过程p_create_emp2:
create or replace procedure P_create_emp2 authid current_user as
cursor t_cursor is
select * from user_tables where table_name = 'EMP2';
t_cur t_cursor%rowtype;
num int:=0;
begin
for t_cur in t_cursor loop
num:=num+1;
end loop;
if num=1 then
execute immediate 'drop table emp2 purge';
execute immediate 'create table emp2 as select * from emp';
else
execute immediate 'create table emp2 as select * from emp';
end if;
end P_create_emp2; ----再次执行:
SQL> exec p_create_emp2; PL/SQL procedure successfully completed SQL> desc emp2;
Name Type Nullable Default Comments
-------- ------------ -------- ------- --------
EMPNO NUMBER(4) Y
ENAME VARCHAR2(10) Y
JOB VARCHAR2(9) Y
MGR NUMBER(4) Y
HIREDATE DATE Y
SAL NUMBER(7,2) Y
COMM NUMBER(7,2) Y
DEPTNO NUMBER(2) Y ----在存储过程加了Authid Current_User选项,表创建成功。
Oracle:Authid Current_User使用的更多相关文章
- Oracle存储过程动态创建临时表/存储过程执行权限问题--AUTHID CURRENT_USER
关于Oracle存储过程执行权限问题的解决 http://blog.sina.com.cn/s/blog_6ceed3280101hvlo.html (2014-04-02 04:06:28) 转载▼ ...
- (转+整理) oracle authid definer 与 authid current_user
转:http://blog.csdn.net/indexman/article/details/17067531 http://blog.csdn.net/liqfyiyi/article/detai ...
- Oracle:Authid Current_User的使用
我们知道,用户拥有的role权限在存储过程是不可用的.遇到这种情况,我们一般需要显式授权,如grant create table to usera;但这种方法太麻烦,有时候可能需要进行非常多的授权才能 ...
- Oracle之AUTHID CURRENT_USER
没有AUTHID CURRENT_USER表示定义者权限(definer rights),以定义者身份执行: 加上AUTHID CURRENT_USER表示调用者权限(invoker rights), ...
- Oracle数据库基础知识
oracle数据库plsql developer 目录(?)[-] 一 SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...
- 重写Oracle的wm_concat函数,自定义分隔符、排序
oracle中,wm_concat函数是一个聚合函数,和mysql中的group_concat函数类似,不过group_concat函数比较强大,可以定义分隔符和排序,当然所谓强大是相对的,这里假使我 ...
- Oracle存储过程中异常Exception的捕捉和处理
Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...
- Oracle 行转列(不固定行数的行转列,动态)(转)
http://bbs.csdn.net/topics/330039676 SQLSERVER :行列转换例子: http://www.cnblogs.com/gaizai/p/3753296.htm ...
- ORACLE 自动增长通过封装函数,方便调用
好的编程习惯,是一个很有必要的过程.好的编程习惯,可以因人而异,但是简单地.基本地代码级别的就那些:写注释.合理的缩进.换行.变量命名等. 对我们程序员来说,大部分时间都对着电脑,在对着电脑的大部分时 ...
随机推荐
- 字符集WideCharToMultiByte
GDAL C#封装对中文字符转换过程中存在问题. C++封装一个Win32 DLL,采用Unicode字符集.使用标准头文件. https://msdn.microsoft.com/en-us/lib ...
- Java学习——变量类型
Java有3类变量 局部变量 成员变量(实例变量) 类变量(静态变量) 局部变量 局部变量声明在方法.构造方法或者语句块中: 局部变量在方法.构造方法.或者语句块被执行的时候创建,当它们执行完成后,变 ...
- CPU boot up过程
1. CPU0 BOOT CPU1 BOOT 通过IPC互相通信 2. CPU1 BOOT 完后,loop,等待IPC from CPU0 3. cpu0 写IPC通知CPU1,cpu1 ...
- git提交
1.git pull 本地已经commit 2.git checkout master 3.git pull 4.git checkout - 5.git merge master 6.git pus ...
- Android根据baidu Android定位SDK实现定位
参考: http://www.open-open.com/lib/view/open1346982366162.html http://api.map.baidu.com/lbsapi/cloud/g ...
- C++Primer 第七章
//1.定义在类内部的函数是隐式内联的. //2.默认情况下,this指针的类型是指向类类型非常量版本的常量指针.对于类的常量成员函数的声明方法是:将const放置于成员函数的参数列表后,用于修饰th ...
- PostgreSQL Insight Monitor pgstat
PostgreSQL Insight Monitor pgstat pgstat 是一个连接到数据库并获取数据库的活动状态的命令行工具. PostgreSQL有许多状态: archiver for ...
- 转:Tomcat配置
一.修改Tomcat端口号步骤: 1.找到Tomcat目录下的conf文件夹 2.进入conf文件夹里面找到server.xml文件 3.打开server.xml文件 4.在server.xml文件里 ...
- c++ 中this底层
成员变量设置在一个结构体中, 操作成员变量的成员函数,其实质上就是拥有一个隐藏的 成员变量结构体的地址指针,俗称this指针.
- Java里的File I/O
Java的输入流主要由:InputStream和Reader作为基类,把持久化数据读入内存.输出流由OutputStream和Write类作为父类. 其中读如内存的时候,不可能一下去全读进去,需要一个 ...