使用remove_constants工具查看Oracle是否使用绑定变量
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这个也是Tom大神写的工具。https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1163635055580下面模拟没
千家信息网最后更新 2025年01月31日使用remove_constants工具查看Oracle是否使用绑定变量这个也是Tom大神写的工具。
https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1163635055580
下面模拟没有绑定变量的环境,然后使用该工具查看
创建实验帐号
conn / as sysdba
create user edmond identified by edmond;
grant connect,resource,dba to edmond;
create table t(x int);
insert into t select rownum from dual connect by level<=10000;
create or replace procedure p1
as
l_cnt number;
begin
for i in 1 .. 10000
loop
execute immediate 'select count(*) from t where x=' || i into l_cnt;
end loop;
end;
/
在一个终端执行p1过程,开启另一个终端执行如下脚本:
set linesize 200;
col sql_text_wo_constants format a100;
可以看到结果如下,已经找到了没有绑定变量的语句。
https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1163635055580
下面模拟没有绑定变量的环境,然后使用该工具查看
创建实验帐号
conn / as sysdba
create user edmond identified by edmond;
grant connect,resource,dba to edmond;
create table t(x int);
insert into t select rownum from dual connect by level<=10000;
create or replace procedure p1
as
l_cnt number;
begin
for i in 1 .. 10000
loop
execute immediate 'select count(*) from t where x=' || i into l_cnt;
end loop;
end;
/
在一个终端执行p1过程,开启另一个终端执行如下脚本:
- create table t1 as select sql_text from v$sqlarea;
- alter table t1 add sql_text_wo_constants varchar2(1000);
- create or replace function
- remove_constants( p_query in varchar2 ) return varchar2
- as
- l_query long;
- l_char varchar2(1);
- l_in_quotes boolean default FALSE;
- begin
- for i in 1 .. length( p_query )
- loop
- l_char := substr(p_query,i,1);
- if ( l_char = '''' and l_in_quotes )
- then
- l_in_quotes := FALSE;
- elsif ( l_char = '''' and NOT l_in_quotes )
- then
- l_in_quotes := TRUE;
- l_query := l_query || '''#';
- end if;
- if ( NOT l_in_quotes ) then
- l_query := l_query || l_char;
- end if;
- end loop;
- l_query := translate( l_query, '0123456789', '@@@@@@@@@@' );
- for i in 0 .. 8 loop
- l_query := replace( l_query, lpad('@',10-i,'@'), '@' );
- l_query := replace( l_query, lpad(' ',10-i,' '), ' ' );
- end loop;
- return upper(l_query);
- end;
- /
- update t1 set sql_text_wo_constants = remove_constants(sql_text);
set linesize 200;
col sql_text_wo_constants format a100;
- select sql_text_wo_constants, count(*)
- from t1
- group by sql_text_wo_constants
- having count(*) > 100
- order by 2
- /
可以看到结果如下,已经找到了没有绑定变量的语句。
变量
工具
终端
大神
环境
结果
脚本
语句
过程
帐号
实验
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
华为服务器远程默认密码
服务器能上网但是连不上系统
网络安全知识答题的答案是什么
软件开发 linux版本
网络技术有哪些就业方向
腾果网络技术有限公司怎么样
华为网络安全认证考试好考吗
防火墙对校园网络安全
忘忧网络技术公司
1核2g云服务器挖矿
金属服务器和数据中心
易语言多线程访问数据库6
服务器阵列卡缓存查看
数据库无限分类
结构化软件开发摘要
兴通科技互联网公司怎么样
潍坊办公管理软件开发公司
长三角规划软件开发
我的世界存档服务器网易手机
服务器数据读取不正常是因为什么
两个数据库合并查询
嵌入式软件开发客户执行
2016年网络安全法是哪个国家
智能互联网时代科技产业
汽车车载网络技术与检修
计算机网络技术应用浅议论文
数据库软件排行磅
数据库系统的安全控制方法
首届国家网络安全宣传周主题
保险软件开发实际案例