在SQL查询中筛选包括帐户ID或用户ID的安全方法

时间:2018-09-04 10:38:12

标签: sql clickhouse

我想允许我们的用户通过我们的API提交数据。我们要在where条件中将accountId与所有过滤器(由用户提供)一起应用。我不是我们的用户来操纵帐户ID。与帐户ID一起应用过滤器的安全性是什么?

我们希望避免使用任何sql injection并获得所有accountIds的结果。 我们正在考虑编写子查询。我们真的怀疑表演。

常规查询:

select any(accountId), appName, avg(duration) from performance_table where
accountId = '500' and  eventDateTime >= now() - 30 * 60 and env = "production"
group by appName order by appName limit 10

使用子查询:

子查询1:

select any(accountId), appName, avg(duration) from (select * from  
performance_table where
accountId = '500' and  eventDateTime >= now() - 30 * 60) where env = "production"
group by appName order by appName limit 10

子查询2:

select * from (select any(accountId), appName, avg(duration) from performance_table 
where accountId = '500' and eventDateTime >= now() - 30 * 60
where env = "production" group by appName order by appName limit 10) where accountId = '500'

能否请您提出安全的做法?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,则可以通过在accountId = '500'之前加上where子句并生成类似的内容来实现该目标

....   where accountId = '500'  and ( <user predicates> )