没有AUTHID CURRENT_USER表示定义者权限(definer rights),以定义者身份执行;

加上AUTHID CURRENT_USER表示调用者权限(invoker rights),以调用者身份执行。

例:

1. 创建两个用户:xxpo,xxgl

2. 在xxpo下创建一张表:xxpo_authid_test

CREATE TABLE xxpo.xxpo_authid_test(ID NUMBER,NAME VARCHAR2(20));  

3. 在xxpo下创建如下两个procedure

3.1 xxpo_no_authid_test_prc:

    CREATE OR REPLACE PROCEDURE xxpo_no_authid_test_prc
(
p_id IN NUMBER
,p_name IN VARCHAR2
) IS
BEGIN
INSERT INTO xxpo_authid_test
(id
,NAME)
VALUES
(p_id
,p_name);
END xxpo_no_authid_test_prc;

3.2 xxpo_has_authid_test_prc:

    CREATE OR REPLACE PROCEDURE xxpo_has_authid_test_prc
(
p_id IN NUMBER
,p_name IN VARCHAR2
) AUTHID CURRENT_USER IS
BEGIN
INSERT INTO xxpo_authid_test
(id
,NAME)
VALUES
(p_id
,p_name);
END xxpo_has_authid_test_prc;

4. 将两个procedure的执行权限(EXECUTE)赋予xxgl:

    SQL> GRANT EXECUTE ON xxpo_no_authid_test_prc TO xxgl;  

    Grant succeeded
SQL> GRANT EXECUTE ON xxpo_has_authid_test_prc TO xxgl; Grant succeeded

5. 在xxgl分别调用xxpo下面的两个procedure,查看结果:

    SQL> BEGIN
2 xxpo.xxpo_no_authid_test_prc(1,'nameXXGL001');
3 END;
4 / PL/SQL procedure successfully completed SQL>
SQL> BEGIN
2 xxpo.xxpo_has_authid_test_prc(2,'nameXXGL002');
3 END;
4 / BEGIN
xxpo.xxpo_has_authid_test_prc(2,'nameXXGL002');
END; ORA-00942: table or view does not exist
ORA-06512: at "XXPO.XXPO_HAS_AUTHID_TEST_PRC", line 7
ORA-06512: at line 3 SQL> SELECT * FROM xxpo.xxpo_authid_test; ID NAME
---------- --------------------
1 nameXXGL001 SQL>

由于我们并没有在xxgl用户下创建一个名为xxpo_authid_test的表,所以当我们在xxgl用户下以调用者(xxgl)权限去执行xxpo.xxpo_has_authid_test_prc这个procedure的时候,会报表不能找到(ORA-00942)的错误;而以定义者(xxpo)权限去执行则不存在此问题。

Oracle之AUTHID CURRENT_USER的更多相关文章

  1. Oracle:Authid Current_User使用

    由于用户拥有的role权限在存储过程是不可用的.遇到这种情况,我们一般需要显示授权,如grant create table to user;但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储 ...

  2. Oracle:Authid Current_User的使用

    我们知道,用户拥有的role权限在存储过程是不可用的.遇到这种情况,我们一般需要显式授权,如grant create table to usera;但这种方法太麻烦,有时候可能需要进行非常多的授权才能 ...

  3. Oracle存储过程动态创建临时表/存储过程执行权限问题--AUTHID CURRENT_USER

    关于Oracle存储过程执行权限问题的解决 http://blog.sina.com.cn/s/blog_6ceed3280101hvlo.html (2014-04-02 04:06:28) 转载▼ ...

  4. (转+整理) oracle authid definer 与 authid current_user

    转:http://blog.csdn.net/indexman/article/details/17067531 http://blog.csdn.net/liqfyiyi/article/detai ...

  5. oracle存储过程结合我公司代码1

    1.           Framework.QueryInfo info1 = new Framework.QueryInfo();            //string Sql = Holwor ...

  6. Oracle数据库基础知识

    oracle数据库plsql developer   目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...

  7. 重写Oracle的wm_concat函数,自定义分隔符、排序

    oracle中,wm_concat函数是一个聚合函数,和mysql中的group_concat函数类似,不过group_concat函数比较强大,可以定义分隔符和排序,当然所谓强大是相对的,这里假使我 ...

  8. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  9. Oracle 行转列(不固定行数的行转列,动态)(转)

    http://bbs.csdn.net/topics/330039676 SQLSERVER :行列转换例子:  http://www.cnblogs.com/gaizai/p/3753296.htm ...

随机推荐

  1. 2、awk的输出

    1.常见的输出格式整理 awk '{print "this is " $1, $2, $1*$2, NR, NF, $NF}' file1   ###字符输出,字段输出,运算输出, ...

  2. 数据库 MySQL 之 数据操作

    数据库 MySQL 之 数据操作 一.MySQL数据类型介绍 MySQL支持多种类型,大致可以分为四类:数值.字符串类型.日期/时间和其他类型. ①二进制类型 bit[(M)] 二进制位(101001 ...

  3. storm源码分析之任务分配--task assignment

    在"storm源码分析之topology提交过程"一文最后,submitTopologyWithOpts函数调用了mk-assignments函数.该函数的主要功能就是进行topo ...

  4. IIS身份验证知识摘录

    IIS 身份验证 ASP.NET 身份验证分为两个步骤.首先,Internet 信息服务 (IIS) 对用户进行身份验证,并创建一个 Windows 令牌来表示该用户.IIS 通过查看 IIS 元数据 ...

  5. this关键字剖析

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. POJ3020 Antenna Placement(二分图最小路径覆盖)

    The Global Aerial Research Centre has been allotted the task of building the fifth generation of mob ...

  7. HackNine 避免在EditText中验证日期

    1.概要:    为什么不直接为EditTText设置一个点击监听器,而非要使用Button呢?     答案是:使用Button更安全,因为用户无法修改Button的文本内容.如果使用EditTex ...

  8. C# winform使用cefsharp

    注意事项写在开头: 一)cef要求.Net FrameWork框架最少为4.5.2,所以咱们在创建工程的时候注意 二)cef不支持anycpu平台 第一步: 新建工程  第二步 添加cef nuget ...

  9. [.net 多线程 ]ReaderWriterLock

    ReaderWriterLock 用于同步对资源的访问.在任一特定时刻,它允许多个线程同时进行读访问,或者允许单个线程进行写访问.在资源不经常发生更改的情况下,ReaderWriterLock 所提供 ...

  10. ARKit入门

    ARKit介绍 ARKit是iOS11引入的一个全新的框架,使用Visual Inertial Odometry(VIO,视觉惯性里程计)来精确跟踪现实世界中的真实场景.相比其它设备平台,ARKit中 ...