条SQL语句的迷惑。

探讨了不同SQL查询语句在相同数据库环境下执行效率的巨大差异,尤其是表连接顺序对性能的影响。

SELECT *
FROM
"dbo"."DIM_BZ",
"dbo"."DIM_PZLX",
"dbo"."DIM_SLLX",
"dbo"."DIM_ZT",
"dbo"."DIM_DATE",
"dbo"."DIM_PZ",
"dbo"."DIM_KM",
"dbo"."DIM_KMTX",
"dbo"."FT_PZFL"
WHERE
("dbo"."FT_PZFL"."KMID"="dbo"."DIM_KM"."KMID") AND
("dbo"."DIM_KM"."BZID"="dbo"."DIM_BZ"."BZID") AND
("dbo"."DIM_KMTX"."KMID"="dbo"."DIM_KM"."KMID") AND
("dbo"."FT_PZFL"."PZID"="dbo"."DIM_PZ"."PZID") AND
("dbo"."DIM_PZ"."PZLX"="dbo"."DIM_PZLX"."LXID") AND
("dbo"."FT_PZFL"."DATEID"="dbo"."DIM_DATE"."DATEID") AND
("dbo"."DIM_KM"."SLID"="dbo"."DIM_SLLX"."SLID") AND
("dbo"."FT_PZFL"."ZTID"="dbo"."DIM_KM"."ZTID") AND
("dbo"."FT_PZFL"."ZTID"="dbo"."DIM_PZ"."ZTID") AND  
("dbo"."FT_PZFL"."ZTID"="dbo"."DIM_ZT"."ZTID")

这条语句200389条记录,执行49妙。

SELECT  "dbo"."FT_PZFL"."KMID",
"dbo"."DIM_KMTX"."KMID",
"dbo"."FT_PZFL"."PZID",
"dbo"."DIM_PZLX"."LXID",
"dbo"."DIM_DATE"."YEARID",
"dbo"."DIM_DATE"."QUARTERID",
"dbo"."DIM_DATE"."MONTHID",
"dbo"."FT_PZFL"."DATEID",
"dbo"."DIM_SLLX"."SLID",
"dbo"."FT_PZFL"."ZTID",
"dbo"."FT_PZFL"."SLDJ",
"dbo"."FT_PZFL"."WBHL",
"dbo"."FT_PZFL"."PZJFJE",
"dbo"."FT_PZFL"."PZDFJE",
"dbo"."FT_PZFL"."PZJFSL",
"dbo"."FT_PZFL"."PZDFSL",
"dbo"."FT_PZFL"."WBJFJE",
"dbo"."FT_PZFL"."WBDFJE"
FROM
"dbo"."DIM_BZ",
"dbo"."DIM_PZLX",
"dbo"."DIM_SLLX",
"dbo"."DIM_ZT",
"dbo"."DIM_DATE",
"dbo"."DIM_PZ",
"dbo"."DIM_KM",
"dbo"."DIM_KMTX",
"dbo"."FT_PZFL"
WHERE
("dbo"."FT_PZFL"."KMID"="dbo"."DIM_KM"."KMID") AND
("dbo"."DIM_KM"."BZID"="dbo"."DIM_BZ"."BZID") AND
("dbo"."DIM_KMTX"."KMID"="dbo"."DIM_KM"."KMID") AND
("dbo"."FT_PZFL"."PZID"="dbo"."DIM_PZ"."PZID") AND
("dbo"."DIM_PZ"."PZLX"="dbo"."DIM_PZLX"."LXID") AND
("dbo"."FT_PZFL"."DATEID"="dbo"."DIM_DATE"."DATEID") AND
("dbo"."DIM_KM"."SLID"="dbo"."DIM_SLLX"."SLID") AND
("dbo"."FT_PZFL"."ZTID"="dbo"."DIM_KM"."ZTID") AND
("dbo"."FT_PZFL"."ZTID"="dbo"."DIM_PZ"."ZTID") AND  
("dbo"."FT_PZFL"."ZTID"="dbo"."DIM_ZT"."ZTID")

这条语句15妙,和上一条的区别在Select 后的字段列表。

SELECT  "dbo"."FT_PZFL"."KMID",
"dbo"."DIM_KMTX"."KMID",
"dbo"."FT_PZFL"."PZID",
"dbo"."DIM_PZLX"."LXID",
"dbo"."DIM_DATE"."YEARID",
"dbo"."DIM_DATE"."QUARTERID",
"dbo"."DIM_DATE"."MONTHID",
"dbo"."FT_PZFL"."DATEID",
"dbo"."DIM_SLLX"."SLID",
"dbo"."FT_PZFL"."ZTID",
"dbo"."FT_PZFL"."SLDJ",
"dbo"."FT_PZFL"."WBHL",
"dbo"."FT_PZFL"."PZJFJE",
"dbo"."FT_PZFL"."PZDFJE",
"dbo"."FT_PZFL"."PZJFSL",
"dbo"."FT_PZFL"."PZDFSL",
"dbo"."FT_PZFL"."WBJFJE",
"dbo"."FT_PZFL"."WBDFJE"
FROM
"dbo"."FT_PZFL",
"dbo"."DIM_KM",
"dbo"."DIM_BZ",
"dbo"."DIM_KMTX",
"dbo"."DIM_PZ",
"dbo"."DIM_PZLX",
"dbo"."DIM_DATE",
"dbo"."DIM_SLLX",
"dbo"."DIM_ZT"
WHERE
("dbo"."FT_PZFL"."KMID"="dbo"."DIM_KM"."KMID") AND
("dbo"."DIM_KM"."BZID"="dbo"."DIM_BZ"."BZID") AND
("dbo"."DIM_KMTX"."KMID"="dbo"."DIM_KM"."KMID") AND
("dbo"."FT_PZFL"."PZID"="dbo"."DIM_PZ"."PZID") AND
("dbo"."DIM_PZ"."PZLX"="dbo"."DIM_PZLX"."LXID") AND
("dbo"."FT_PZFL"."DATEID"="dbo"."DIM_DATE"."DATEID") AND
("dbo"."DIM_KM"."SLID"="dbo"."DIM_SLLX"."SLID") AND
("dbo"."FT_PZFL"."ZTID"="dbo"."DIM_KM"."ZTID") AND
("dbo"."FT_PZFL"."ZTID"="dbo"."DIM_PZ"."ZTID") AND  
("dbo"."FT_PZFL"."ZTID"="dbo"."DIM_ZT"."ZTID")

这一句发生了质的变化,运行N久,吃掉15G硬盘空间,并最终由于缓存不足而出不了结果。仔细看他与上一语句的区别。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
仅仅在于FROM后TABLE的顺序!!!把数据量大的表放在后面
但是如果换成Select * 又和第一条没有区别。

ORCLE怎么写都没有问题。

所以结论是:千万别相信MS$的所谓SQL优化。别以为只有索引的好坏才能影响SQL性能。

 
### SQL 注入绕过 WAF 的技术总结 #### 一、基础原理 SQL 注入攻击的核心在于将恶意的 SQL 语句嵌入到应用程序的输入字段中,从而使数据库执行未授权的操作。Web 应用防火墙 (WAF) 是一种用于检测和阻止此类攻击的安全工具。然而,由于 WAF 的规则集可能存在局限性或可预测的行为模式,攻击者可以通过多种手段绕过其防护机制。 #### 二、常见绕过技术 1. **替代逻辑运算符** 攻击者可以使用编程语言中的等价表达式来规避 WAF 对特定关键词的过滤。例如: - 将 `and` 替换为 `&&` - 将 `or` 替换为 `||` - 将 `not` 替换为 `!` - 将 `xor` 替换为 `|` 此外,还可以通过数学计算的方式实现件判断,比如 `id=1 && 2=1+1` 可以用来代替传统的布尔型注入语句[^1]。 2. **URL 编码与双编码** 特殊字符(如单引号 `'` 或分号 `;`)可能会被 WAF 拦截。为了避开这种限制,可以采用 URL 编码的形式隐藏这些字符。例如: - 单引号 `%27` - 分号 `%3b` 如果简单的 URL 编码无法奏效,则可以尝试双重编码或多层编码进一步混淆 WAF 的识别能力[^2]。 3. **多语句查询拆解** 当 WAF 防护针对完整的多命令时,可以考虑将其分解成多个部分逐步提交。例如,原本可能触发报警的 `SELECT * FROM users WHERE id='1'; DROP TABLE users;` 被分割为两次独立请求完成相同效果。 4. **替换标准函数调用** 数据库管理系统提供了丰富的内置功能名称集合,在某些情况下可以直接选用那些较少见却具备相似作用的功能作为变体形式逃避扫描器注意。像下面这样把常用的版本信息读取改为更隐蔽写法: ```sql SELECT version(); -- 常规做法容易被捕获 SELECT @@version; -- 更加隐秘的一种表示方法 ``` 5. **引入冗余语法结构** 利用合法但不影响最终解析结果的额外成分填充原始指令串达到迷惑目的。具体措施包括但不限于增加空白间隔、插入注释标记以及混合大小写字母排列等方式制造视觉干扰项。 ```sql /*--*/UNION/* */ALL/* */SELECT/* */NULL,USER(),DATABASE()/**/FROM/**/dual; ``` 6. **时间延迟盲注测试** 在面对完全屏蔽回显反馈环境下的场景下,可通过测量服务器响应耗时时长间接推测后台是否存在漏洞点位置及其特性描述情况。典型例子有 SLEEP 函数应用实例展示如下所示: ```sql IF(SUBSTRING((SELECT database()),1,1)='t',SLEEP(5),null); ``` 以上列举了几种主要方向上的应对策略供参考学习之用,请务必遵循法律法规合理运用相关技能! --- ### 示例代码片段 以下是几种典型的绕过 WAF 的 SQL 注入示例: ```sql -- 使用逻辑运算符替代 SELECT * FROM users WHERE id = '1' && 'a'='a'; -- URL 编码后的单引号 SELECT * FROM users WHERE name LIKE '%john%27%'; -- 多语句拆分 Step 1: SELECT COUNT(*) INTO @cnt FROM information_schema.tables LIMIT 1; Step 2: IF(@cnt>0,DROP DATABASE testdb,null); -- 替代函数名 SHOW VARIABLES LIKE '%versio%'; ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值