Чтобы безопасно не интерактивно передавать пароль (а попутно и другие данные) в mysql, нужно поступить так.
- Создаём файл в недоступной по http директории; в примере назовём его
def.cnf
- Добавляем в него такие строки:
[client]
user = имя_пользователя
password = пароль
host = хост_бд
[mysql]
database = имя_бд(Можно дополнить файл и другими директивами.)
- Даём файлу минимальные права, например
400
или600
. - Используем вместо такой записи
mysql --host=хост_бд \
--user=имя_пользователя \
--password=пароль имя_бд \
--execute="SELECT NOW();"такую:
mysql --defaults-extra-file="/path/def.cnf" \
--execute="SELECT NOW();"Важно:
--defaults-extra-file
должен быть первым ключом. - Хинт. Добавляем путь к файлу
def.cnf
в переменную окружения, и нам больше не нужно вводить его при наборе команды, например:mysql --defaults-extra-file=$DEF \
--execute="SELECT NOW();"
По материалам man mysqld_safe
и http://www.opennet.ru/tips/info/1313.shtml