У меня есть собственный механизм сценариев, который позволяет пользователю выполнять запросы в наборе данных TSQL. Запрос является бесплатной формой и сопоставляется непосредственно с вызовом «System.Data.Linq.DataContext.ExecuteQuery»Как предотвратить Linq DataContext.ExecuteQuery от изменения данных
Я хочу, чтобы пользователь мог запрашивать данные и возвращать результаты, но НЕ изменять данные, поскольку это быть проблемой безопасности.
В настоящее время я проверяю строку для следующих ключевых слов: вставка, обновление, изменение, создание, удаление, удаление, обрезание, слияние и exec.
Однако, я подозреваю, что это лучший способ, как установка контекста только для чтения или какой-либо другой метод, который не зависит от моего вспоминания или разбора всех возможных операторов SQL, и т.д ..
Всегда выполняйте транзакцию и всегда откатывайте после выполнения. – Crowcoder
Теперь это вне коробки мышления. :) Конечно, похоже, что это сработает. – NebulaSleuth
Врожденная проблема заключается в том, что DataContext заменен и ExecuteQuery выполняется непосредственно из базы данных. Любой флаг Handy-dandy DataContext.ObjectTrackingEnabled будет игнорироваться, поскольку DataContext.SubmitChanges() не нужно вызывать для выполнения запроса. Таким образом, вы ограничены откатом транзакций, добавлением новых пользователей или ручным анализом ваших заявлений Sql для непослушных ключевых слов. –