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

在SQL查询中筛选帐户id或用户id的安全方法,sql,clickhouse,Sql,Clickhouse,我想允许我们的用户通过我们的API来归档数据。我们希望在where条件下应用accountId以及所有过滤器(由用户提供)。我不希望我们的用户操纵帐户ID。在帐户ID的同时应用过滤器的安全性是什么 我们希望避免任何sql注入,并为所有accountid获取结果。 我们正在考虑编写子查询。我们真的怀疑这些表演 普通查询: select any(accountId), appName, avg(duration) from performance_table where accountId = '5

我想允许我们的用户通过我们的API来归档数据。我们希望在where条件下应用
accountId
以及所有过滤器(由用户提供)。我不希望我们的用户操纵帐户ID。在帐户ID的同时应用过滤器的安全性是什么

我们希望避免任何
sql注入
,并为所有
accountid
获取结果。 我们正在考虑编写子查询。我们真的怀疑这些表演

普通查询:

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
使用子查询:

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:

子问题2:


你能建议一种安全的方法吗?

如果我理解正确,你可以通过在where子句前面加上
accountId='500'
并生成类似

....   where accountId = '500'  and ( <user predicates> ) 
。。。。其中accountId='500'和()

子查询在这里有什么帮助?您使用哪种语言/框架实现API?Node.js和Go。到目前为止,我们是在Node.js中完成的。@sskoko我认为子查询将被父查询过滤。我不确定。
选择accountId、appName、avg(duration)…按appName分组在我看来似乎是一个错误的查询。。误用MySQL
分组依据
“功能”
....   where accountId = '500'  and ( <user predicates> )