Назад | Перейти на главную страницу

Какая безопасная альтернатива использованию пароля MySQL в командной строке?

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

Сценарий запускает патч из командной строки MySQL:

system('mysql --user=xxx --password=xxx < patch.sql');

Однако MySQL 5.6 теперь выдает следующее предупреждение:

Предупреждение: использование пароля в интерфейсе командной строки может быть небезопасным.

Что, очевидно, верно, но может или не может быть проблемой для пользователя.

Обратите внимание, что я не хочу полагаться на внешний файл паролей.

В последней версии MySQL GA, т. Е. версия 5,6, вы можете сделать это с помощью команды mysql_config_editor, как описано в http://dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html

В основном, что он делает: зашифровывает ваши учетные данные пользователя / пароля псевдонимом хоста, а затем вы используете псевдоним хоста, помещаете эту информацию в файл конфигурации в своем домашнем каталоге, а затем, когда вам это нужно, вместо того, чтобы делать что-то вроде :

mysqldump -uroot --password=mycleartextpass mydatabase > dumpfile.sql

вместо этого вы пишете:

mysqldump --login-path=myhostalias mydatabase > dumpfile.sql

тем самым избегая ввода пароля в какой-либо скрипт в открытом виде.

Чтобы это сработало, вы сначала должны (только один раз) определить myhostalias так как:

mysql_config_editor set --login-path=myhostalias --host=mysqlhost.localnet.com --user=root --password

Вы можете использовать разные пути входа для разных учетных записей и / или хостов по своему усмотрению. Хорошая идея, если вы спросите меня.

В качестве примечания, я считаю, что эта функция НЕ существуют в любой версии ниже 5.6.

Использовать --defaults-file или --defaults-extra-file вариант. В нем вы можете указать идентификатор пользователя и пароль. Он имеет тот же формат, что и /etc/my.cnf.

Читая дальше, вы говорите, что не хотите полагаться на внешний файл паролей, но это единственный действительно безопасный способ. Все остальное оставит следы в таблице процессов или что-то в этом роде. Вы даже можете поместить файл паролей в систему контроля версий, если действительно хотите. Сделайте его 600 (или 400) и доступным для чтения только mysql или пользователю, под которым он работает.

У вас есть 4 варианта на http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html

  • Использовать -pyour_pass или --password=your_pass опция в командной строке
  • Использовать -p или --password в командной строке без указания пароля. В этом случае клиентская программа запрашивает пароль интерактивно:
  • Сохраните свой пароль в файле опций.
  • Сохраните свой пароль в MYSQL_PWD переменная окружения

Для ваших нужд, MYSQL_PWD может быть вариантом, но он не более безопасен. На самом деле вы должны запустить интерактивный процесс с --password и отправить пароль в интерактивном режиме, но это довольно сложное решение этой проблемы.

Если ваш PHP-скрипт уже имеет открытое соединение с базой данных, почему бы вам просто не использовать mysqli_multi_query() импортировать файл .sql? Если синтаксис файла .sql верен, конечно ...