В компании, с которой я работаю, нам часто приходится интегрироваться с инфраструктурой клиента.
Недавно, услышав, что мы используем Hibernate, у одного клиента возникло следующее беспокойство: так как пользователь, под которым Hibernate подключается к базе данных, имеет прямой доступ к таблицам, а Hibernate генерирует SQL динамически, то такой пользователь может делать что угодно в базе данных.
Если бы у пользователя было только разрешение на выполнение хранимых процедур, то SP могли бы ограничивать данные, но, что более важно, типы запросов, которые он может выдавать в базу данных: в основном, нет динамического и внедренного SQL. Таким образом, если существует хранимая процедура, которая удаляет строку, злоумышленник, получивший учетные данные пользователя, сможет удалить одну строку за один раз, но не сможет выдать DELETE *. Я знаю, что Hibernate также может отображать представления, но опять-таки это ограничивает данные, а не операции, которые может выполнять пользователь. Hibernate также может выполнять SP, но это в значительной степени превосходит цель использования Hibernate и подразумевает полное переписывание приложения.
Хотя я не считаю это серьезной проблемой, поскольку серверы приложений также обеспечивают безопасность, у меня возникла проблема с убеждением клиента. Что вы думаете об этом? Действительно ли Hibernate менее безопасен, чем приложение, использующее хранимые процедуры? Какие дополнительные меры безопасности могут быть применены при работе с Hibernate?