Я создаю сценарий Bash для некоторых задач. Одной из таких задач является создание БД MySQL из одного скрипта bash. Сейчас я создаю две переменные: одну для имени пользователя магазина, а другую для пароля магазина. Это соответствующая часть моего сценария:
MYSQL_USER=root
MYSQL_PASS=mypass_goes_here
touch /tmp/$PROY.sql && echo "CREATE DATABASE $DB_NAME;" > /tmp/script.sql
mysql --user=$MYSQL_USER --password="$MYSQL_PASS" < /tmp/script.sql
rm -rf /tmp/script.sql
Но всегда получаю сообщение об ошибке, в котором запрещен доступ для пользователя root без пароля, что я делаю неправильно? Мне нужно сделать то же самое для PostgreSQL.
linux
mysql
bash
postgresql
shell-scripting
ReynierPM
источник
источник
echo "$MYSQL_PASS"
прежде чем передать его наmysql
линию. У него есть правильный пароль?ps wwaux
.Ответы:
Как для MySQL, так и для PostgreSQL вы можете указать своего пользователя и пароль в локальном конфигурационном файле. .my.cnf для MySQL и .pgpass для PostgreSQL. Эти файлы должны быть в вашем домашнем каталоге (т.е. ~ / .my.cnf).
.my.cnf:
.pgpass:
Здесь вы можете использовать шаблонную запись, заменяя любое поле на *******.
PS: НИКОГДА НЕ УКАЗЫВАЙТЕ ПАРОЛЬ НА КОМАНДНОЙ ЛИНИИ! Это может быть прекрасно видно с помощью ps, если ваша система не настроена так, чтобы не показывать процессы, принадлежащие другим пользователям.
@thinice: Если вы хотите создать эти файлы действительно безопасно, вы должны сделать:
Таким образом, файл будет создан с безопасными разрешениями с самого начала, и ни у одного перехватчика не будет возможности взломать ваш пароль.
PostgreSQL все равно откажется использовать файл с разрешениями выше 0600.
источник
--defaults-extra-file=filename
. Это может быть полезно, если вы хотите поместить его в нестандартное место или просто создать временный файл. Подозреваю, что это аналогичный вариант с PostgreSQL, но я не знаком с этим.0600
Это сделает свое дело Спасибо
источник
Как мне выполнить командную строку с безопасным паролем ?? используйте редактор настроек !!!
Начиная с mysql 5.6.6, вы можете сохранить пароль в конфигурационном файле, а затем выполнить команды cli следующим образом ...
--login-path заменяет переменные ... хост, пользователь и пароль. отлично верно!
источник
будь уверен, как ты пишешь свой пропуск, и он не уходит
--defaults-extra-file = это хорошая вещь (тм) (с)
источник
Не ставьте кавычки вокруг пароля, потому что если вы это сделаете, кавычки считаются частью пароля.
источник
Подобный вопрос существует на StackOverflow.
Подводя итог моего ответа оттуда.
Вы можете
export MYSQL_PWD=yourverysecretpassword
.Преимуществом этого метода по сравнению с использованием файла конфигурации является то, что вам не нужен отдельный файл конфигурации для синхронизации с вашим сценарием. У вас есть только сценарий для поддержки.
У этого метода нет недостатков .
Пароль не виден другим пользователям в системе (он будет виден, если он находится в командной строке). Переменные среды видны только пользователю, выполняющему команду mysql и root.
Пароль также будет виден любому, кто может прочитать сам скрипт, поэтому убедитесь, что сам скрипт защищен. Это ничем не отличается от защиты файла конфигурации. Вы все еще можете получить пароль из отдельного файла, если вы хотите, чтобы скрипт был общедоступным (
export MYSQL_PWD=$(cat /root/mysql_password)
например). Все еще проще экспортировать переменную, чем создавать файл конфигурации.Например,
источник