Выполнение корневых операций 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"
Дополнительно смотрите раздел руководства по безопасности пароля