Убедитесь, что SQL-запрос доступен только для чтения - PullRequest
0 голосов
/ 09 января 2012

Как лучше всего обеспечить, чтобы SQL-запрос не изменил данные базы данных?

В моем сценарии у вас нет доступа к уровню базы данных, и вы можете выполнять эту логику только на прикладном уровне.

Вы бы порекомендовали использовать гем, скрипт ruby?

Ответы [ 4 ]

3 голосов
/ 09 января 2012

Вы можете управлять разрешениями пользователей, чтобы у них был доступ к чтению базы данных, но у них нет доступа к изменению базы данных (то есть невозможно вставлять, обновлять и удалять). Например, если вы используете mysql, вы можете легко сделать это в phpmyadmin или аналогичном инструменте.

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

2 голосов
/ 09 января 2012

Простой, но далеко не надежный метод состоит в использовании черного списка слов, которые не могут быть в запросе, таких как вставка, обновление и т. Д. В качестве альтернативы вы можете использовать синтаксический анализатор в запросе sql, который предоставит вам необходимую информацию, чтобы определить, следует ли разрешить запрос. Я бы выбрал вариант 1 только в качестве крайней меры или если ваши потребности в проверке относительно просты.

1 голос
/ 09 января 2012

На уровне базы данных убедитесь, что пользователь приложения Rails обращается к базе данных, поскольку имеет только тот доступ, который вам нужен, возможно, только SELECT.

0 голосов
/ 17 июля 2013

Продолжение поддерживает ведомые базы данных только для чтения с доступной для записи основной базой данных. Ведомые только для чтения обрабатывают SELECT запросов, другие запросы выполняются базой данных master.

Может быть, вы можете просто установить основную базу данных как ноль?

Другим подходом может быть использование hooks (before_save) для предотвращения записи в базу данных.

...