2015-02-13 6 views
1

У меня есть собственный механизм сценариев, который позволяет пользователю выполнять запросы в наборе данных TSQL. Запрос является бесплатной формой и сопоставляется непосредственно с вызовом «System.Data.Linq.DataContext.ExecuteQuery»Как предотвратить Linq DataContext.ExecuteQuery от изменения данных

Я хочу, чтобы пользователь мог запрашивать данные и возвращать результаты, но НЕ изменять данные, поскольку это быть проблемой безопасности.

В настоящее время я проверяю строку для следующих ключевых слов: вставка, обновление, изменение, создание, удаление, удаление, обрезание, слияние и exec.

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

+1

Всегда выполняйте транзакцию и всегда откатывайте после выполнения. – Crowcoder

+0

Теперь это вне коробки мышления. :) Конечно, похоже, что это сработает. – NebulaSleuth

+0

Врожденная проблема заключается в том, что DataContext заменен и ExecuteQuery выполняется непосредственно из базы данных. Любой флаг Handy-dandy DataContext.ObjectTrackingEnabled будет игнорироваться, поскольку DataContext.SubmitChanges() не нужно вызывать для выполнения запроса. Таким образом, вы ограничены откатом транзакций, добавлением новых пользователей или ручным анализом ваших заявлений Sql для непослушных ключевых слов. –

ответ

4

Как насчет подключения в базу данных, используя пользователя, у которого есть разрешение на чтение данных? Это полностью устранило бы проблему и обеспечило бы корректную отчетность об ошибках в готовом виде. Проверка строки SQL для слов кажется отрывочной в лучшем случае, например, пользователь может сделать SELECT ... INTO, который не обрабатывается ключевыми словами, о которых вы говорили до сих пор.

+0

Согласен, что метод ключевого слова «отрывочный». Использование другого пользователя, безусловно, будет работать с ним. Однако вы только что дали мне новую проблему. Теперь мне нужно будет изменить установщик, чтобы убедиться, что пользователь правильно создан. :) – NebulaSleuth

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