Я хотел бы знать, есть ли способ предотвратить выполнение SQL-запросами запросов, которые не содержат каких-либо агрегатных функций. Причина заключается в том, что пользователь не извлекает данные конкретной записи (например, личную информацию), а дает возможность запросить население (например, средний возраст). Я бы не хотел писать какой-либо wrapper/processor/parser, если есть какое-либо готовое решение.Ограничивающий тип запросов SELECT в выражении SQL
ответ
Нет реального (или хотя бы простого) способа сделать это.
Рекомендация будет заключаться в том, чтобы ограничить доступ к базовым контентам, но создать одно или несколько видов сверху, которые предоставляют агрегированные данные, а затем разрешить доступ к этому.
В качестве альтернативы, создавайте отображаемые изображения 1 к 1, которые просто выбирают только неличные данные из базового. Таким образом, вы можете позволить кому-либо использовать эти представления для запуска агрегатных функций, не опасаясь разоблачения личной или конфиденциальной информации.
The wiki page для представлений гласит:
Представления могут представлять собой подмножество данных, содержащихся в таблице. Следовательно, представление может ограничивать степень подверженности лежащих в основе таблиц внешнему миру: у данного пользователя может быть разрешение на запрос в представлении, тогда как ему отказано в доступе к остальной базовой таблице.
и
Представления могут выступать в качестве агрегированные таблицы, где данные агрегаты двигателя базы данных (сумма, среднее и т.д.) и представлены результаты расчета в качестве части данных.
- 1. Тип данных несоответствие в выражении критериев SQL Select In Access
- 2. Функция агрегирования SQL-запросов в выражении WHERE
- 3. Плохая производительность запросов с несколькими и в выражении select
- 4. в выражении select в sql server 2005
- 5. ИЛИ в выражении WHERE замедляется производительность SQL-запросов (sql-сервер)
- 6. SQL select query, не ограничивающий только один элемент в nodeJS
- 7. SQL ALIAS не работает в выражении select
- 8. Приращение псевдонима в динамическом выражении select sql
- 9. return table.column в выражении SQL select
- 10. Значение столбца SQL Increment в выражении select
- 11. Оператор SQL SELECT в выражении IF
- 12. Как выполнить умножение в выражении select sql
- 13. Предотвращение SQL-инъекции в выражении Select X
- 14. Ограничивающий объем SSRS 2008, основанный на выражении
- 15. Несколько запросов в выражении WHERE
- 16. Сборка нескольких запросов SELECT SQL
- 17. SQL Select Улучшение производительности запросов
- 18. Присоединение нескольких запросов select SQL
- 19. запросов (тип SQL) на JSON
- 20. Приращение в выражении select
- 21. Динамически ограничивающий набор запросов связанного поля
- 22. «Тип данных Несовпадение в выражении критериев» в MS-Access SQL
- 23. счетчик в выражении SQL SELECT на основе значений текущей строки
- 24. Вложенная инструкция SELECT в выражении CASE
- 25. Среднее число в выражении Select
- 26. Порядок запросов в регулярном выражении
- 27. несколько запросов в регулярном выражении
- 28. Как заменить значение столбца в выражении select в Sql?
- 29. Как использовать переменные в выражении select в Oracle PL-SQL
- 30. вызов функции в выражении select в PL/SQL
Для каких СУБД? –
Не предоставляйте доступ к таблице/столбцу. Создайте представление, выделите его. – jarlh
Не очень хорошая идея. Что делать, если я группирую первичный ключ и использую аналитические функции, такие как 'MAX',' MIN' для доступа к значению из единственной строки в каждой группе? Это удовлетворит ваши требования, но я все равно получаю эту личную информацию в своем наборе результатов. Если вы не хотите, чтобы кто-то обращался к конфиденциальной информации, не предоставляйте ему доступ вообще. Взгляды должны делать хорошо, как предложил @jarlh. –