У нас есть скрипт командной строки PHP для создания версии базы данных. Мы запускаем этот скрипт всякий раз, когда разработчик добавляет новый патч базы данных.
Скрипт запускает патч с командной строкой MySQL:
system('mysql --user=xxx --password=xxx < patch.sql');
Однако MySQL 5.6 теперь выдает следующее предупреждение:
Предупреждение: использование пароля в интерфейсе командной строки может быть небезопасным
Что, очевидно, верно, но может или не может быть проблемой для пользователя.
- Какая безопасная альтернатива тогда?
- Или же можно отключить это предупреждение?
Обратите внимание, что я не хочу полагаться на внешний файл паролей.
mysql
php
command-line-interface
Вениамин
источник
источник
Ответы:
В последней версии GA MySQL, т.е. версии 5.6 , вы можете сделать это с помощью команды mysql_config_editor, как описано в http://dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html.
В основном это то, что он делает: шифрует ваши учетные данные пользователя / пароля с помощью псевдонима хоста, а затем вы используете псевдоним хоста, помещаете эту информацию в файл конфигурации в вашем домашнем каталоге, а затем, когда вам это нужно, вместо того, чтобы делать что-то вроде :
вы вместо этого пишете:
тем самым избегая помещения вашего пароля в какой-либо скрипт в открытом виде.
Чтобы это работало, вы должны сначала (только один раз) определить
myhostalias
как:Вы можете использовать разные пути входа в систему для разных учетных записей и / или хостов, как вам нравится. Довольно хорошая идея, если вы спросите меня.
Как примечание, я считаю, эта функция действительно НЕ существует в любой версии ниже 5.6.
источник
mysql_config_editor
, так что, к сожалению, это не приносит гораздо большей пользы. Я также пытаюсь избежать того, чтобы разработчик делал это вручную, поэтому мне приходится поддерживать как конфигурационный файл PHP, так и конфигурацию mysql.Используйте опцию
--defaults-file
или--defaults-extra-file
. Вы можете указать в нем идентификатор пользователя и пароль. Он имеет тот же формат, что и/etc/my.cnf
.Читая дальше, вы говорите, что не хотите полагаться на внешний файл паролей, но это единственный действительно безопасный способ. Все остальное оставит следы в таблице процессов или что-то в этом роде. Вы даже можете поместить файл паролей в систему контроля версий, если вы действительно этого хотите. Сделайте его 600 (или 400) доступным для чтения только mysql или пользователем, под которым он работает.
источник
mysql --defaults-file c:\some\dirs\my.cnf
mysql
консольный клиент?У вас есть 4 варианта на http://dev.mysql.com/doc/refman/5.1/ru/password-security-user.html
-pyour_pass
или--password=your_pass
в командной строке-p
или--password
в командной строке без указания пароля. В этом случае клиентская программа запрашивает пароль в интерактивном режиме:MYSQL_PWD
переменной средыДля ваших нужд
MYSQL_PWD
может быть вариант, но это не более безопасно. На самом деле вы должны создать интерактивный процесс--password
и отправить пароль в интерактивном режиме, но это довольно сложное решение этой проблемы.источник
man ps
has-E Display the environment as well.
From url, с которым я связан: Этот метод указания вашего пароля MySQL должен считаться крайне небезопасным и не должен использоваться. Некоторые версии ps включают опцию для отображения среды запущенных процессов. В некоторых системах, если вы установите MYSQL_PWD, ваш пароль будет доступен любому другому пользователю, который запускает ps. Даже в системах без такой версии ps неразумно предполагать, что нет других методов, с помощью которых пользователи могут исследовать среды процессов.ps
видеть и видеть аргумент командной строки для каждого процесса каждого пользователя. Ноps e
отображает только среду для ваших собственных процессов (если, конечно, вы не root). Это лишь немного более безопасно, но все же более безопасно.Если у вашего PHP-скрипта уже есть открытое соединение с базой данных, почему бы вам просто не использовать
mysqli_multi_query()
для импорта файл .sql? Если синтаксис файла .sql действителен, конечно ...источник