Что является хорошей практикой для выполнения операций root в базах данных mysql в сценариях bash?
Например, я хочу создать новую базу данных и предоставить привилегии, я должен использовать:
mysql -u $ROOT -p"$ROOTPASS" -e "create database $DBNAME; GRANT ALL PRIVILEGES ON $DBNAME.* T $DBUSER@localhost IDENTIFIED BY $DBPASS";
Но для этого требуется сохранить пароль mysql для пользователя root в самом скрипте. Есть ли более безопасный способ?
Должен ли я создать для этого отдельного пользователя? Как настроить разрешения?
Отдельное дело - как проверить, была ли операция успешной, а если нет, вернуть назад те изменения, которые были успешными (транзакция?)
Как и многие программы, 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"
Дополнительно см. Раздел руководства по безопасность паролей