在存储过程中调 用truncate,截取其它方案的表,如何授权?

请看下面的实验

os:linux   red hat 企业5

oracle version:10g

过程在test2中建立t2表,在test用户中建立procedure p_trun_t2处理test2中的t2表;

———————————

SQL> conn test2/test2;

Connected.

SQL> select * from session_roles;

ROLE

————————————————————

CONNECT

RESOURCE

SQL> create table t2(id int);

Table created.

SQL> insert into t2 values(1);

1 row created.

SQL> commit;

Commit complete.

SQL> conn test/test

Connected.

SQL> show user

USER is “TEST”

SQL> select * from test2.t2;

select * from test2.t2

*

ERROR at line 1:

ORA-00942: table or view does not exist

SQL> conn system/oracle

Connected.

SQL> grant dba to test;

Grant succeeded.

SQL> conn test/test;

Connected.

SQL> select * from test2.t2;

ID

———-

1

SQL> truncate table test2.t2;

Table truncated.

SQL> create or replace procedure p_trun_t2

2  is

3  v_sql varchar2(1000);

4  begin

5  v_sql := ‘truncate table test2.t2’;

6  execute immediate v_sql;

7  end;

8  /

Procedure created.

SQL> exec p_trun_t2;

BEGIN p_trun_t2; END;

*

ERROR at line 1:

ORA-00942: table or view does not exist

ORA-06512: at “TEST.P_TRUN_T2”, line 6

ORA-06512: at line 1

SQL> show user

USER is “TEST”

SQL> create or replace procedure p_trun_t2

2  is

3  v_sql varchar2(1000);

4  begin

5  v_sql := ‘delete test2.t2′;

6  execute immediate v_sql;

7  end;

8  /

Procedure created.

SQL> exec p_trun_t2;

BEGIN p_trun_t2; END;

*

ERROR at line 1:

ORA-00942: table or view does not exist

ORA-06512: at “TEST.P_TRUN_T2”, line 6

ORA-06512: at line 1

SQL> delete test2.t2;

0 rows deleted.

SQL> conn system/oracle

Connected.

SQL> grant drop any table to test;

Grant succeeded.

SQL> conn test/test;

Connected.

SQL> exec p_trun_t2;

BEGIN p_trun_t2; END;

*

ERROR at line 1:

ORA-01031: insufficient privileges

ORA-06512: at “TEST.P_TRUN_T2”, line 6

ORA-06512: at line 1

SQL> conn system/oracle

Connected.

SQL> grant delete any table to test;

Grant succeeded.

SQL> conn test/test;

Connected.

SQL> exec p_trun_t2;

PL/SQL procedure successfully completed.

SQL> conn test2/test2

Connected.

SQL> insert into t2 values(2);

1 row created.

SQL> commit;

Commit complete.

SQL> conn test/test;

Connected.

SQL> exec p_trun_t2;

PL/SQL procedure successfully completed.

SQL> select * from test2.t2;

no rows selected

SQL> conn system/oracle

Connected.

SQL> revoke drop any table from test;

Revoke succeeded.

SQL> conn test/test;

Connected.

SQL> exec p_trun_t2;

PL/SQL procedure successfully completed.

SQL> conn system/oracle

Connected.

SQL> revoke dba from test;

Revoke succeeded.

SQL> conn test/test;

Connected.

SQL> exec p_trun_t2;

PL/SQL procedure successfully completed.

SQL> revoke delete any table  from test;

Revoke succeeded.

SQL> conn test/test;

Connected.

SQL> exec p_trun_t2;

BEGIN p_trun_t2; END;

*

ERROR at line 1:

ORA-00942: table or view does not exist

ORA-06512: at “TEST.P_TRUN_T2”, line 6

ORA-06512: at line 1

–上面是在procedure 中用的delete test2.t2;

SQL> l

1   create or replace procedure p_trun_t2

2      is

3      v_sql varchar2(1000);

4      begin

5      v_sql := ‘truncate table test2.t2‘;

6      execute immediate v_sql;

7*     end;

SQL> conn system/oracle

Connected.

SQL> grant drop any table to test;

Grant succeeded.

SQL> conn test/test;

Connected.

SQL> select * from session_roles;

ROLE

————————————————————

CONNECT

RESOURCE

SQL> select * from session_privs;

PRIVILEGE

——————————————————————————–

CREATE SESSION

CREATE TABLE

DROP ANY TABLE

CREATE CLUSTER

CREATE SEQUENCE

CREATE PROCEDURE

CREATE TRIGGER

CREATE TYPE

CREATE OPERATOR

CREATE INDEXTYPE

10 rows selected.

SQL> truncate table test2.t2;

Table truncated.

SQL> exec p_trun_t2;

PL/SQL procedure successfully completed.

SQL>

ps:delete 别人的table,只需显示授予delete any table权限,而truncate 别人的 table 需要 drop any table,这个权限很危险,最好方案是在test2中建立一个procedure进行 truncate,给test 执行procedure 的权限!

打赏

微信扫一扫,打赏作者吧~

oracle 存储过程中 truncate,procedure中truncate other schema’s table相关推荐

  1. sqlplus查oracle存储过程,在SQL PLUS中调试Oracle存储过程

    我们在通常情况下,开发和调试Oracle存储过程都是用可视化工具,如PL SQL DEVELOPER,TOAD等等.不会有人傻到要用 vim 去开发,再用 sql plus 去调试的存储过程的.但在有 ...

  2. pl sql如何调试oracle存储过程,PL/SQL Developer中调试oracle的存储过程

    作者:iamlaosong 唉,真土,之前用Toad,1直用dbms_output.put_line调试存储进程,只觉得不方便,用上PL/SQL Developer后,习惯性的还是用这个方法,人都是有 ...

  3. oracle存储过程无效字符_Oracle中无效存储过程的重新编译方法

    在SQL_PLUS中: spool ExecCompProc.sql select 'alter procedure '||object_name||' compile;' From all_obje ...

  4. Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset

    原文 Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset DataSet相当你用的数据库: DataTable相当于你的表.一个 DataSet 可以包含多个 DataTab ...

  5. Oracle存储过程中如何根据指定的参数判断该参数的值否存在数据表中:

    摘要:最近项目中用到了Oracle存储过程,所以就自己尝试着写了下,下面我把我遇到的问题描述一下:就是在我处理解析Clob字段中的xml字符串的时候,有个需求就是根据指定的主键参数,来判断该参数的值是 ...

  6. mysql与oracle存储过程_MySQL与Oracle差异比较之五存储过程Function

    存储过程&Function 编号 类别 oracle Mysql 注释 1 创建存储过程语句不同 create or replace procedure P_ADD_FAC( id_fac_c ...

  7. mysql与oracle存储过程_mysql与oracle存储过程对比

    一.创建存储过程语句不同 mysql DROP PROCEDURE IF EXISTS `SD_USER_P_ADD_USR`; create procedure P_ADD_FAC(id_fac_c ...

  8. MySQL与ORACLE 存储过程的区别

    存储过程&Function 编号 类别 ORACLE MYSQL 注释 1 创建存储过程语句不同 create or replace procedure P_ADD_FAC(    id_fa ...

  9. oracle存储过程ddl,Oracle 存储过程中的DDL语句

    Oracle的存储过程,是我们使用数据库应用开发的重要工具手段.在存储过程中,我们大部分应用场景都是使用DML语句进行数据增删改操作.本篇中,我们一起探讨一下数据定义语句DDL在存储过程中使用的细节和 ...

最新文章

  1. 【LeetCode OJ】Same Tree
  2. RDKit | PD/PD-L1抑制活性 化合物指标分析
  3. RxJava 将一组数据每隔一定时间发送出来
  4. 向流程组的所有成员发送信号的最佳方法是什么?
  5. 第一课 计算机网络的分类,第一课-计算机网络基本组成
  6. CentOS7.9关闭SELinux
  7. webpack之proxyTable配置
  8. springcloud实践之断路器:Hystrix原理和解构
  9. 为什么1000 == 1000返回为False,而100 == 100会返回为True?
  10. VC中使用ADO的方法
  11. 小青蛙oracle跟踪,Oracle 存储过程:游标
  12. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 网格系统实例:响应式的列重置
  13. 排队8小时,火遍上海!美国最会装X的网红咖啡,又把中国人拿捏了
  14. 【Linux开发】Linux启动脚本设置
  15. Codeforces Round #147 (Div. 2) E. Build String 最小费用最大流
  16. java final 变量 大小写_java – 为什么“final static int”可以用作开关的大小写常量但不是“final static”...
  17. EasyDarwin开源云平台接入海康威视EasyCamera摄像机之快照获取与上传
  18. esp32 红外接收
  19. CH6803 导弹防御塔
  20. 人教版三年级计算机教学计划,2017人教版三年级信息技术教学计划范文

热门文章

  1. Win10 远程连接共享打印机出现0x0000011b错误
  2. 直流电能表DJSF1352-RN在意大利光伏电池项目中的应用
  3. 1.2新版本AION第一手破解版外挂,保证安全
  4. 中国美酷国际集团《创囧》逐梦很难但坚持很燃
  5. 基于MT7688 原厂SDK 使用SPI控制器驱动TFT屏幕ILI9225驱动器(spi接口)
  6. Java全栈体系路线(总结不易,持续更新中)
  7. 安装my sql数据库安装详细教程
  8. 实名推荐熊节《敏捷中国史》,IT 历史不止有趣的故事
  9. 雷达导论PART-III.9 测量距离与距离分辨
  10. 这剧尺度大,小姐姐、女王、已婚男士、隐孩族、地铁狗、中年危机、职场潜规则、黑点全都有...