Возможно, прочитайте статью здесь , в которой обсуждается, как SQL-инъекция (которая, я полагаю, должна быть здесь главной проблемой безопасности) обрабатывается в сценариях LINQ.
Есть также хорошая статья здесь , касающаяся соображений безопасности Microsoft для EF. Это стоит прочитать любому, кто разрабатывает эти инструменты!
[Изменить] Что касается вашего последнего комментария, вы можете использовать запросы, аналогичные тем, которые уже есть на этой странице. Для краткости: если ваша база данных нормализована, в той степени, в которой RecordId является уникальным первичным ключом, вы можете обойти объединения, чтобы сделать запрос, который выглядит немного лучше:
var targetRecords =
from userRecords in MyDC.UserRecords
where userRecords.UserTable.UserID == TheUserID
&& userRecords.RecordsTable.RecordID == TheRecord.RecordID
select userRecords;
var targetRecordsResult = targetRecords.SingleOrDefault();
Я отделил запрос от его результата 'var', чтобы указать, что 'targetRecords' НЕ будет оценен, пока вы не вызовете для него SingleOrDefault, чтобы назначить объект targetRecordsResult. Вы можете, конечно, обернуть это в одно утверждение, если хотите.
Если, как уже упоминалось, ваш RecordID является уникальным первичным ключом, вы получите либо обратно соответствующую запись, либо ноль. Обратите внимание, что если это не так, то есть больше, чем в записи, может иметь один и тот же идентификатор, то вызов SingleOrDefault может завершиться ошибкой. Если ваша база данных разработана таким образом, вам придется использовать запрос, более похожий на тот, который задал Ананд. Это немного более многословно, но вернет вам ЛЮБУЮ запись с соответствующим идентификатором для этого конкретного пользователя.
С точки зрения безопасности, обратите внимание, что ваш оператор SQL будет скомпилирован с идентификатором пользователя, что очень затруднит его вмешательство. Отсюда моя точка зрения, что в этом случае сфера действия и раскрытие идентификатора пользователя является вашей главной задачей. Если, как вы заявили, пользователь (и любой потенциальный злонамеренный пользователь) не имеет доступа к переменной (через раскрытие свойств и т. Д.), То это должно быть более чем подходящим для ваших нужд.