使用remove_constants工具查看Oracle是否使用绑定变量
发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,这个也是Tom大神写的工具。https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1163635055580下面模拟没
千家信息网最后更新 2024年11月18日使用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安全错误
数据库的锁怎样保障安全
特朗普宣布将组建网络安全企业家
上海奥瑞格软件开发
服务器虚拟化产品对比
查看服务器关闭的端口
dw远程连接云服务器
成都养老院软件开发
软件开发专业毕设开题报告
怎么下载炉石传说卡牌数据库原画
病历资料收集数据库
开封翰源网络技术有限公司
数据库服务器相关技术
网络安全从我做起主题征文
东莞手机软件开发编程
网络安全的架构有哪些
上位机软件开发能力
虹口区什么是网络技术成本价
一流网络安全学院建设高校
南川租房软件开发
福建手机软件开发有哪些
数据库管理师基础
网络安全说明文
方舟服务器龙会不会饿死
南宁一伙人网络技术支持
碧蓝航线 有哪些服务器
阴阳师服务器人数查询
java即时通讯服务器
数据库防火墙安恒2500
手机网游服务器端
武装突袭3服务器不显示
服务器附魔我的世界