Безопасный способ фильтрации, включая идентификатор учетной записи или идентификатор пользователя в запросе SQL - PullRequest
0 голосов
/ 04 сентября 2018

Я бы хотел, чтобы наши пользователи могли обрабатывать данные с помощью нашего API. Мы хотим применить accountId вместе со всеми фильтрами (предоставленными пользователем) в условии where. Я не наших пользователей манипулировать идентификатором учетной записи. Как безопасно применять фильтры вместе с идентификатором учетной записи?

Мы хотим избежать любых 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 голосов
/ 05 сентября 2018

Если я правильно понимаю, вы можете добиться этого, добавив accountId = '500' к предложению where и сгенерировав что-то вроде

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