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

[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.

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

时间: 2024-10-23 10:27:49

[20160412]访问all_directorys视图问题.txt的相关文章

[20120809]学习物化视图(补充).txt

[20120809]学习物化视图(补充).txt 1.测试环境: SQL> select * from v$version ; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production PL/SQL Release 11.2.0

数据库某个用户设置只能访问某个视图,但是视图删除后重新建立,该用户就不能再次访问此视图

问题描述 数据库某个用户设置只能访问某个视图,但是视图删除后重新建立,该用户就不能再次访问此视图.由于某些原因,可能视图需要删除重新建立,有什么方法让设置权限的用户再次访问删除后建立的视图,视图名称都是一样的. 解决方案 解决方案二:在删除视图并重建的时候,重新执行一段grant授权访问视图的脚本.解决方案三:引用1楼guwei4037的回复: 在删除视图并重建的时候,重新执行一段grant授权访问视图的脚本. 问题是不知道用户名,用户名是别人指定的.解决方案四:你在删除视图之前,先查查哪些用户

[20151105]视图DBA_HIST_SEG_STAT_OBJ.txt

[20151105]视图DBA_HIST_SEG_STAT_OBJ.txt --前一阵子看别人的awr报表.链接http://www.itpub.net/thread-1940496-1-1.html Segments by Physical Reads Owner          Tablespace Name  Object Name                     Subobject Name  Obj. Type  Physical Reads %Total ** MISSIN

[20130318]v$rman_backup_job_details访问缓慢的问题.txt

[20130318]v$rman_backup_job_details访问缓慢的问题.txt 今天我想检查备份,执行如下: SELECT start_time, end_time, elapsed_seconds,TRIM (time_taken_display) TIME, status, input_type,        compression_ratio, TRIM (input_bytes_display) inputb,        TRIM (output_bytes_disp

[20140529]建立视图问题.txt

[20140529]建立视图问题.txt --昨天想将在10g下建立的视图移植到11g,遇到一个奇怪的问题,自己做一个记录. orcl> @ver BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi orcl> create table t  ( id number,c1 v

asp.net实现从Txt文件读取数据到数据视图的方法_实用技巧

本文实例讲述了asp.net实现从Txt文件读取数据到数据视图的方法.分享给大家供大家参考,具体如下: #region 从Txt文件读取数据到数据视图 /// 从Txt文件读取数据到数据视图 /// </summary> /// <param name="strExcelPath">文件路径</param> /// <returns>返回一个数据视图</returns> public static DataView GetDa

[20171127]dual.txt

[20171127]dual.txt --//我曾经提到如果在nomount,mount阶段,desc dual,启动到open阶段时,数据库会直接崩溃. --//链接:http://blog.itpub.net/267265/viewspace-1246984/ SYS@test> desc dual ERROR: ORA-04043: object dual does not exist SYS@test> alter database open; alter database open

[20170302]fuzzy保存在那里.txt

[20170302]fuzzy保存在那里.txt --参考链接:http://blog.itpub.net/267265/viewspace-2134551/ --提到fuzzy表示某种状态,正常关闭是NO. --从访问的视图看v$datafile_header,应该这个信息保存在数据文件头,找找具体的位置在那里. 1.环境: SYS@book> @ &r/ver BANNER ---------------------------------------------------------

[20160513]重温11g DRCP.txt

[20160513]重温11g DRCP.txt --以前做过一次测试,再也没有使用过. [20130730]11G的DRCP特性.txt => http://blog.itpub.net/267265/viewspace-767493/ http://www.oracle-base.com/articles/11g/DatabaseResidentConnectionPool_11gR1.php Database Resident Connection Pool (DRCP) in Oracl