[20160412]访问all_directorys视图问题.txt

简介: [20160412]访问all_directorys视图问题.txt --调试PL SQL脚本,遇到一个问题: 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING         VERSION    BANNER --...

[20160412]访问all_directorys视图问题.txt

--调试PL SQL脚本,遇到一个问题:

1.环境:
SCOTT@book> @ &r/ver1
PORT_STRING         VERSION    BANNER
------------------- ---------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.建立测试问题:

--以scott用户登录:
SCOTT@book> SELECT count(*) FROM ALL_DIRECTORIES WHERE directory_name = UPPER ('DATA_PUMP_DIR');
COUNT(*)
--------
1

set serverout on
DECLARE
   v_count   NUMBER;
BEGIN
   SELECT COUNT (*)
     INTO v_count
     FROM ALL_DIRECTORIES
    WHERE directory_name = UPPER ('DATA_PUMP_DIR');

   DBMS_OUTPUT.put_line ('count: ' || v_count);
END;
/
count: 1

CREATE OR REPLACE PROCEDURE test_a1 (p_dir VARCHAR2 DEFAULT 'DATA_PUMP_DIR')
AS
   v_count   NUMBER;
BEGIN
   SELECT COUNT (*)
     INTO v_count
     FROM ALL_DIRECTORIES
    WHERE directory_name = UPPER (p_dir);

   DBMS_OUTPUT.put_line ('count: ' || v_count);
END;
/

SCOTT@book> exec test_a1('DATA_PUMP_DIR')
count: 0
PL/SQL procedure successfully completed.

--可以发现在存储过程中相似的sql语句返回不同的结果.

3.实际上这个问题角色授权问题:

我们知道,用户拥有的role权限在存储过程是不可用的。遇到这种情况,我们一般需要显式授权,如grant create table to usera;但这
种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储过程,实际上,oracle给我们提供了在存储过程中使用role权限的方法:
修改存储过程,加入Authid Current_User时存储过程可以使用role权限。

CREATE OR REPLACE PROCEDURE test_a2  (p_dir VARCHAR2 DEFAULT 'DATA_PUMP_DIR') AUTHID CURRENT_USER
AS
   v_count   NUMBER;
BEGIN
   SELECT COUNT (*)
     INTO v_count
     FROM ALL_DIRECTORIES
    WHERE directory_name = UPPER (p_dir);

   DBMS_OUTPUT.put_line ('count: ' || v_count);
END;
/

SCOTT@book> exec test_a2('DATA_PUMP_DIR')
count: 1
PL/SQL procedure successfully completed.


CREATE OR REPLACE PROCEDURE test_a3  (p_dir VARCHAR2 DEFAULT 'DATA_PUMP_DIR') AUTHID DEFINER
AS
   v_count   NUMBER;
BEGIN
   SELECT COUNT (*)
     INTO v_count
     FROM ALL_DIRECTORIES
    WHERE directory_name = UPPER (p_dir);

   DBMS_OUTPUT.put_line ('count: ' || v_count);
END;
/

--这个结果与原来一样.

--ZALBB 提出 如下授权也可以.

grant all on directory DATA_PUMP_DIR to public;


SCOTT@book> grant all on directory DATA_PUMP_DIR to public;
Grant succeeded.

SCOTT@book> exec test_a1('DATA_PUMP_DIR')
count: 1
PL/SQL procedure successfully completed.

SCOTT@book> revoke all on directory DATA_PUMP_DIR from public;
Revoke succeeded.

SCOTT@book> exec test_a1('DATA_PUMP_DIR')
count: 0
PL/SQL procedure successfully completed.

--对于这些非常不熟悉,做一个记录.

目录
相关文章
touch-cat-more命令,touch 命令可以创建文件,touch test.txt创建一个txt文件,ls -l 标识为d,头部显示,行,的就是文件的意思,cat查看文件,more支持翻页q
touch-cat-more命令,touch 命令可以创建文件,touch test.txt创建一个txt文件,ls -l 标识为d,头部显示,行,的就是文件的意思,cat查看文件,more支持翻页q
|
3月前
|
图形学
【unity小技巧】unity读excel配置表操作,excel转txt文本,并读取txt文本内容,实例说明
【unity小技巧】unity读excel配置表操作,excel转txt文本,并读取txt文本内容,实例说明
53 0
|
关系型数据库
[20131027]11G的内部视图X$DBGALERTEXT.txt
[20131027]11G的内部视图X$DBGALERTEXT.txt链接:http://www.askmaclean.com/archives/11g%E6%96%B0%E7%89%B9%E6%80%A7xdbgalertext%E4%B8%80%E4%B8%AA%E5%BE%88%E9%85%B7%E7%9A%84%E5%86%85%E9%83%A8%E8%A7%86%E5%9B%BE.html以前我们看alert*.log文件,一般直接进入目录,直接查看。
890 0
【TP5】在视图给url追加俩个参数
【TP5】在视图给url追加俩个参数
101 0
【TP5】在视图给url追加俩个参数
win7,如何把文件夹和文件,视图改成平铺,默认是列表
win7,如何把文件夹和文件,视图改成平铺,默认是列表
165 0
|
索引
[20180503]视图提示使用索引.txt
[20180503]视图提示使用索引.txt --//昨天优化sql语句,想提示某个视图里面的表使用索引,有点忘记ZALBB以前讲过的提示写法,看了以前链接, --//自己在写一个例子便于记忆.
954 0
|
SQL Oracle 关系型数据库
[20180328]不要在sys建立用户对象.txt
[20180328]不要在sys建立用户对象.txt --//好几年前遇到的问题,开发安装UTL_DBWS在linux下遇到问题,最后选择winows下安装. --//随着业务增加,无法支撑,需要数据库组迁移到linux下,也就是我当时的安装笔记: --//http://blog.
976 0
|
Oracle 关系型数据库
[20170502]11G查询隐含参数视图.txt
[20170502]11G查询隐含参数视图GV$SYSTEM_PARAMETER3.txt --//oracle 存在许多隐含参数,一直以为oracle没有提供正常的视图查询该内容,实际上oracle 11G已经提供这方面的功能,只不过oracle并不公开.
1011 0
|
Oracle 关系型数据库 数据库管理
[20170209]索引范围访问2.txt
[20170209]索引范围访问2.txt --ITPUB网友问的问题: http://www.itpub.net/thread-2083504-1-1.html --索引范围扫描是如何访问数据块的? 1 FOR  (根节点-> 分支节点->叶节点->...
693 0