Oracle之AUTHID CURRENT_USER

Oracle之AUTHID CURRENT_USER

没有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)权限去执行则不存在此问题。

 

 

ALTERNATE REF: http://zhidao.baidu.com/question/150637739.html

 

原文链接:
http://blog.csdn.net/t0nsha/article/details/6429361

转载于:https://my.oschina.net/dtec/blog/46741

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110459.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何把文件复制到桌面_如何把桌面文件放一起

    如何把文件复制到桌面_如何把桌面文件放一起如何解决电脑桌面文件无法删除问题电脑是现在最常用的工具之一,有些用户遇到了桌面文件无法删除问题,想知道如何解决,接下来小编就给大家介绍一下具体的操作步骤。具体如下:1.首先第一步鼠标右键单击桌面,在弹出的菜单栏中根据下图所示,点击【刷新】选项,查看是否删除文件,或者将电脑重新启动后再次删除。2.第二步如果仍然无法删除文件,则打开【计算机】窗口,根据下图所示,依次点击【组织-文件夹和搜索选项】。…

    2025年8月25日
    2
  • django drf jwt_jwt验证原理

    django drf jwt_jwt验证原理前言带着问题学习是最有目的性的,我们先提出以下几个问题,看看通过这篇博客的讲解,能解决问题吗?什么是JWT?为什么要用JWT?它有什么优势?JWT的认证流程是怎样的?JWT的工作原理?我们

    2022年8月7日
    5
  • 静态内部类和内部类的区别_内部类不能定义为抽象类

    静态内部类和内部类的区别_内部类不能定义为抽象类今天稍微复习一下静态内部类和内部类的相关知识,平常很少用静态内部类静态内部类,不能访问外部类的非静态成员静态内部类不需要创建外部类的对象就可访问(外部类名.内部类比如newMyMain.Person().display();就创建了静态内部类对象)静态内部类可以有public、protected、默认的、private等多种类型(这个功能我倒是从来没听说,通过实验的确ok…

    2022年10月11日
    1
  • python激活码2021_在线激活

    (python激活码2021)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月28日
    338
  • networkx是什么

    networkx是什么networkx简介:networkx是Python的一个包,用于构建和操作复杂的图结构,提供分析图的算法。图是由顶点、边和可选的属性构成的数据结构,顶点表示数据,边是由两个顶点唯一确定的,表示两个顶点之间的关系。顶点和边也可以拥有更多的属性,以存储更多的信息。对于networkx创建的无向图,允许一条边的两个顶点是相同的,即允许出现自循环,但是不允许两个顶点之间存在多条边,即出现平行边。边和…

    2025年6月28日
    5
  • 网页设计与制作毕业论文(解析ip数据包课程设计)

    PAGE单位代码学号分类号毕业设计(论文)基于HTML5的P2P流媒体传输技术的设计与实现院(系)名称专业名称计算机科学与技术学生姓名指导教师2014年6月北京航空航天大学毕业设计(论文)第PAGE\*ROMANI页基于HTML5的P2P流媒体传输技术的设计与实现摘要P2P流媒体传输技术是一项基于对等网络的大规模流媒体实时直播技术。P2P流媒体传输技术使…

    2022年4月15日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号