oracle 存储过程中 truncate,procedure中truncate other schema’s table
在存储过程中调 用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相关推荐
- sqlplus查oracle存储过程,在SQL PLUS中调试Oracle存储过程
我们在通常情况下,开发和调试Oracle存储过程都是用可视化工具,如PL SQL DEVELOPER,TOAD等等.不会有人傻到要用 vim 去开发,再用 sql plus 去调试的存储过程的.但在有 ...
- pl sql如何调试oracle存储过程,PL/SQL Developer中调试oracle的存储过程
作者:iamlaosong 唉,真土,之前用Toad,1直用dbms_output.put_line调试存储进程,只觉得不方便,用上PL/SQL Developer后,习惯性的还是用这个方法,人都是有 ...
- oracle存储过程无效字符_Oracle中无效存储过程的重新编译方法
在SQL_PLUS中: spool ExecCompProc.sql select 'alter procedure '||object_name||' compile;' From all_obje ...
- Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset
原文 Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset DataSet相当你用的数据库: DataTable相当于你的表.一个 DataSet 可以包含多个 DataTab ...
- Oracle存储过程中如何根据指定的参数判断该参数的值否存在数据表中:
摘要:最近项目中用到了Oracle存储过程,所以就自己尝试着写了下,下面我把我遇到的问题描述一下:就是在我处理解析Clob字段中的xml字符串的时候,有个需求就是根据指定的主键参数,来判断该参数的值是 ...
- mysql与oracle存储过程_MySQL与Oracle差异比较之五存储过程Function
存储过程&Function 编号 类别 oracle Mysql 注释 1 创建存储过程语句不同 create or replace procedure P_ADD_FAC( id_fac_c ...
- mysql与oracle存储过程_mysql与oracle存储过程对比
一.创建存储过程语句不同 mysql DROP PROCEDURE IF EXISTS `SD_USER_P_ADD_USR`; create procedure P_ADD_FAC(id_fac_c ...
- MySQL与ORACLE 存储过程的区别
存储过程&Function 编号 类别 ORACLE MYSQL 注释 1 创建存储过程语句不同 create or replace procedure P_ADD_FAC( id_fa ...
- oracle存储过程ddl,Oracle 存储过程中的DDL语句
Oracle的存储过程,是我们使用数据库应用开发的重要工具手段.在存储过程中,我们大部分应用场景都是使用DML语句进行数据增删改操作.本篇中,我们一起探讨一下数据定义语句DDL在存储过程中使用的细节和 ...
最新文章
- 第四代自动泊车从APA到AVP技术
- 论文翻译 | LS-Net:单目双目视觉的非线性最小二乘学习算法
- Mockito:一个强大的用于Java开发的模拟测试框架
- Get Cache Info in Linux on ARMv8 64-bit Platform
- 如何在.NET上处理二维码
- linux vim 插件管理,linux: vim插件管理
- autovalue_AutoValue:生成的不可变值类
- 爬虫 404 try_Python爬虫MOOC笔记
- 快速向服务器传文件格式,客户端如何向服务器传文件格式
- 二级c语言程序设计翻译,C语言程序设计报错英文翻译
- js 解析url中search时存在中文乱码问题解决方案
- Jenkins插件开发(四)-- 插件发布
- 马未都说收藏:陶瓷篇(2)三国两晋南北朝唐代时期的瓷器
- 《世界500强企业员工的50条生存法则》(Yanlz+Unity+SteamVR+5G+AI+VR云游戏+生存法则+潜规则+提升竞争力+术业有专攻+卓越理念+立钻哥哥+==)
- Android 数据存储(四)-Room
- android 虚拟按键自定义,Android手机底部栏虚拟按键的操作
- 一些常用的免费接口,再也不怕找不到免费API了
- 如何打造3D立体世界?跟随图片一同探寻
- mcnpf5输出结果_MCNP使用说明解读.ppt
- 《EfficativeSTL》