2014-01-07 3 views
0

Я использую клиент Oracle 11.2.0 Dll версию 4.112.3.0OracleDatareader кажется, выполнить обновление заявления

У нас есть страница в нашем приложении, где люди могут дать SQL заявление и извлечь результаты. в основном делать oracle command.executereader

Недавно один из моих членов команды дал инструкцию по обновлению в качестве теста, и он фактически выполнил обновление записи!

Любой, кто столкнулся с этим?

С уважением Sid.

ответ

1

Это нормальное (хотя и немного неудобное) поведение. Ожидается, что ExecuteReader выполнит команду sql, предоставленную в виде CommandText, и построит DbDataReader, который вы используете для обработки результатов.
Если команда не возвращает ни одну строку для чтения, это не то, что читатель должен предотвратить в любом случае. И поэтому не ожидается, что он проверяет, действительно ли ваша команда является оператором SELECT.
Подумайте, например, если вы передадите имя хранимой процедуры или если у вас есть несколько пакетов sql для выполнения. (INSERT, а затем SELECT)

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

0

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

Чтобы запретить кому-либо изменять что-либо, создайте нового пользователя, выделите его (не обновляйте, не удаляйте, не вставляйте) в свои таблицы этому пользователю (grant select on tablename to seconduser). Затем войдите в систему как seconduser и создайте синонимы для своих таблиц (create synonym tablename for realowner.tablename). При подключении к БД ваше приложение будет использовать второй пользователь. Это должно помешать людям «взломать» ваш сайт. Если вы хотите быть в безопасности, не предоставляйте разрешениям, кроме create session, второму пользователю, чтобы он не создавал таблицы, не бросая ваши взгляды и подобные вещи (я бы предположил, что ваш исполнитель не допустит DDL, но протестируйте его, чтобы сделать конечно).

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