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 ...
随机推荐
- CLR 显示实现事件 EventSet内部管理一个字典
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...
- Part4_lesson2---ARM处理器这个硬件启动流程分析
1.启动方式 s3c2440:可以从Nor flash启动,Nor flash一般是2MB:也可以从Nandflash启动,它一般是256MB,我们习惯上把我们的uboot,内核以及文件系统都放到Na ...
- Asp.net MVC获取访问系统的客户端计算机的主机名和IP地址
string HostName = string.Empty; string ip = string.Empty; string ipv4 = String.Empty; if (!string.Is ...
- mysql_5.6内存过高问题解决
MySQL 5.6安装完之后,每过一段时间就会莫名其妙挂掉.而且还很难启动.非要重启服务器,才能拉起mysql. 后来分析是由于mysql启动后内存过高,跑一段时间就会由于内存不足而被杀死. 今天分析 ...
- libtool: syntax error near unexpected token `]*
../libtool: line 543: syntax error near unexpected token `]*' ../libtool: line 543: ` *[\[\~\#\ ...
- Mac OS X 下android环境搭建
安装jdk6.0版本以支持eclipse的安装 安装eclipse 安装jdk8.0版本,实际开发中用到的jdk 配置java环境变量 打开shell命令窗口(终端) 检测输入java -versio ...
- DateType--字符类型
--=====================================================字符集 ASCII (American Standard Code for Informa ...
- DataSet取值并保存在List集合中
DBHelper db = new DBHelper(); //实例化DB类 string sql = "select * from student"; //虚构的sql语句 Da ...
- Windows 下 MongoDb 简单配置
以管理员的启动cmd 进入安装目录下 输入: mongod --auth --port 3406 --dbpath=库地址 --logp ...
- Spring容器管理对象和new对象
问题:一个业务类交给spring管理,并自动注入了其他业务类作为属性,方法中通过全局属性调用其他业务类的方法.当该业务类是通过new获取的情况下,该实例的属性会是null(不存在依赖注入实例),调用方 ...