У нас есть сценарий командной строки 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 верен, конечно ...