2016-03-17 2 views
1

Я хотел бы знать, есть ли способ предотвратить выполнение SQL-запросами запросов, которые не содержат каких-либо агрегатных функций. Причина заключается в том, что пользователь не извлекает данные конкретной записи (например, личную информацию), а дает возможность запросить население (например, средний возраст). Я бы не хотел писать какой-либо wrapper/processor/parser, если есть какое-либо готовое решение.Ограничивающий тип запросов SELECT в выражении SQL

+0

Для каких СУБД? –

+2

Не предоставляйте доступ к таблице/столбцу. Создайте представление, выделите его. – jarlh

+0

Не очень хорошая идея. Что делать, если я группирую первичный ключ и использую аналитические функции, такие как 'MAX',' MIN' для доступа к значению из единственной строки в каждой группе? Это удовлетворит ваши требования, но я все равно получаю эту личную информацию в своем наборе результатов. Если вы не хотите, чтобы кто-то обращался к конфиденциальной информации, не предоставляйте ему доступ вообще. Взгляды должны делать хорошо, как предложил @jarlh. –

ответ

1

Нет реального (или хотя бы простого) способа сделать это.

Рекомендация будет заключаться в том, чтобы ограничить доступ к базовым контентам, но создать одно или несколько видов сверху, которые предоставляют агрегированные данные, а затем разрешить доступ к этому.

В качестве альтернативы, создавайте отображаемые изображения 1 к 1, которые просто выбирают только неличные данные из базового. Таким образом, вы можете позволить кому-либо использовать эти представления для запуска агрегатных функций, не опасаясь разоблачения личной или конфиденциальной информации.

The wiki page для представлений гласит:

Представления могут представлять собой подмножество данных, содержащихся в таблице. Следовательно, представление может ограничивать степень подверженности лежащих в основе таблиц внешнему миру: у данного пользователя может быть разрешение на запрос в представлении, тогда как ему отказано в доступе к остальной базовой таблице.

и

Представления могут выступать в качестве агрегированные таблицы, где данные агрегаты двигателя базы данных (сумма, среднее и т.д.) и представлены результаты расчета в качестве части данных.

Смежные вопросы