Оболочка / клиент MySQL: доступ только для чтения или опция «безопасной истории»? - PullRequest
5 голосов
/ 07 октября 2009

Вчера я работал над сценарием оболочки для выполнения некоторых довольно сложных операций вставки таблиц в базу данных MySQL. Естественно, я оставлял окно mysql клиентской оболочки открытым для запуска describe команд, примеров запросов и удаления строк теста между циклами тестирования.

Да, это было в рабочей производственной базе данных.

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

Затем я вернулся к своей живой оболочке, вытащил строку из истории, изменил предложение where, чтобы посмотреть на полученные вставки, и нажал [Enter] ...

... к сожалению, я не посмотрел всю команду, которую редактировал! Это было delete утверждение, а не select.

по электронной почте Ой.

Хорошо, я знаю, что мог бы установить другой сервер СУБД, восстановить для него дамп этой БД и провести на нем все свои испытания. Все мы знаем, что это было бы безопаснее и дисциплинированнее. Мы также все знаем, что иногда целесообразнее работать в реальном магазине. (В этом случае риски несколько ниже, чем вы могли бы ожидать ... рассматриваемая БД используется для пакетной обработки, и мы смогли восстановить из резервной копии, которая была всего лишь 20 минут, в течение 10 минут после delete).

Однако возникает вопрос: есть ли какая-либо опция (или какой-либо патч) для клиентской оболочки mysql, которая будет доступна только для чтения? Есть ли возможность изменить то, что он хранит в своей интерактивной истории? (Что-то, что помечало бы delete и drop table и аналогично «опасные» операторы как «запрашивать подтверждение перед повторным выполнением?». Имеет ли клиент mysql нечто похожее на функцию bash HISTIGNORE?

Что является более безопасным способом выполнить такую ​​работу (если не работать над совершенно отдельной пробной копией БД)?

Ответы [ 2 ]

5 голосов
/ 07 октября 2009

Если вы хотите полностью доступ только для чтения, создайте учетную запись пользователя без каких-либо прав на запись.

Или просто привыкните к работе в транзакции. :) Введите BEGIN при открытии оболочки и только COMMIT, если / когда вы действительно хотите.

4 голосов
/ 07 октября 2009

Опция - safe-updates позволяет вам частично пройти туда.

Лучший способ - создать нового пользователя только для чтения и разрешить только SELECT. Например:

<code>
    <code>GRANT SELECT ON *.* TO readonly@'%' IDENTIFIED BY 'password';</code>
    FLUSH PRIVILEGES;
...