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)权限去执行则不存在此问题。
Oracle之AUTHID CURRENT_USER的更多相关文章
- Oracle:Authid Current_User使用
由于用户拥有的role权限在存储过程是不可用的.遇到这种情况,我们一般需要显示授权,如grant create table to user;但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储 ...
- Oracle:Authid Current_User的使用
我们知道,用户拥有的role权限在存储过程是不可用的.遇到这种情况,我们一般需要显式授权,如grant create table to usera;但这种方法太麻烦,有时候可能需要进行非常多的授权才能 ...
- 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存储过程结合我公司代码1
1. Framework.QueryInfo info1 = new Framework.QueryInfo(); //string Sql = Holwor ...
- 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 ...
随机推荐
- 局部变量和static变量的区别
static int a ; int b; scanf_s("%d %d",&a,&b); 01374212 lea eax,[b] 01374215 push e ...
- javascript总结3:javaScript的 Math 对象
Math 对象 Math 对象用于执行数学任务. Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(). Math 常用的方法 var n1=1234; v ...
- 云存储上传控件(cloud2)-Xproer.CloudUploader
版权所有 2009-2016荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
- 20145218张晓涵 PC平台逆向破解_advanced
---恢复内容开始--- 20145218张晓涵 PC平台逆向破解_advanced shellcode注入 基础知识 shellcode就是在利用溢出攻击溢出时要值入的代码,也就是溢出后去执行的代码 ...
- 【留用】C#的一些好的书籍
浏览博客的时候发现一篇推荐的C#书籍,感觉真的不错,涉略过几本,水平问题,没看的很深入,正在努力,留用了!!! http://www.cnblogs.com/tongming/p/3879752.ht ...
- 在sql server数据库可以插入在回车的数据
insert into t_FamilyClass (id,ParentId,Name) values(111,111,'111')可以在编辑模式下copy到editplus中,设置 显示 空白字符: ...
- 十二、Nodejs 包与 NPM 第三方模块安装 package.json 以及 CNPM
1. 包 Nodejs 中除了它自己提供的核心模块外,我们可以自定义模块,也可以使用第三方的模块.Nodejs 中第三方模块由包组成,可以通过包来对一组具有相互依赖关系的模块进行统一管理. 在 Nod ...
- 《C#多线程编程实战》2.5 AutoResetEvent
这个有点像是缩小版的mutex 还是很好理解的 相对mutex 使用的范围可能比较小一点. class Program { static AutoResetEvent work = new AutoR ...
- xcode工程配置绝对路径与相对路径
1.问题描述 一般我们在xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,如果只是自己用这个项目,用绝对路径的问题不大,但是如果你把工程发给别人,别人就要在改这个绝对路径,这 ...
- linux下vim python代码自动补全
一.vim python自动补全插件:pydiction 可以实现下面python代码的自动补全: 1.简单python关键词补全 2.python 函数补全带括号 3.python 模块补全 4.p ...