Выполнение корневых операций mysql в скриптах bash

Что является хорошей практикой для выполнения корневых операций над базами данных mysql в скриптах bash?

Например, я хочу создать новую базу данных и предоставить привилегии, я должен использовать:

mysql -u $ROOT -p"$ROOTPASS" -e "create database $DBNAME; GRANT ALL PRIVILEGES ON $DBNAME.* T $DBUSER@localhost IDENTIFIED BY $DBPASS";

Но для этого необходимо сохранить пароль mysql для пользователя root в самом скрипте. Есть ли более безопасный способ?
Должен ли я создать отдельного пользователя для этого? Как настроить разрешения?

Отдельная вещь состоит в том, как проверить, была ли операция успешной, и если нет, отменить назад изменения, которые были успешными (транзакция?)

1 ответ

Решение

Как и многие программы, MySQL (клиент) может и будет считывать учетные данные из файла, а не полагаться на параметры командной строки или считывать учетные данные из STDIN.

Рекомендуемый способ - хранить ваши учетные данные в зашифрованном виде с помощью редактора конфигурации MySQL в ~/.mylogin.cnf

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

Проверьте руководство для точного местоположения, но вы также можете настроить файл ~/.my.cnf который может быть прочитан только вашим пользователем и хранит ваши пароли в открытом виде:

 [client]
 # The following password will be sent to all standard MySQL clients
 password="my_password"

Дополнительно смотрите раздел руководства по безопасности пароля

Другие вопросы по тегам