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

Подключиться к MySQL через командную строку без использования пароля root?

Я создаю сценарий 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.

И для MySQL, и для PostgreSQL вы можете указать своего пользователя и пароль в локальном файле конфигурации. .my.cnf для MySQL и .pgpass для PostgreSQL. Эти файлы должны находиться в вашем домашнем каталоге (т.е. ~ / .my.cnf).

.my.cnf:

[mysql]
user=user
password=password

.pgpass:

host:port:database:user:password

Здесь вы можете использовать подстановочный знак, заменяя любое поле на *******.

PS: НИКОГДА НЕ УКАЗЫВАЙТЕ ПАРОЛЬ В КОМАНДНОЙ СТРОКЕ! Это хорошо видно с пс если ваша система не настроена так, чтобы не отображать процессы, принадлежащие другим пользователям.

@thinice: Если вы хотите, чтобы эти файлы были действительно безопасными, вам следует сделать:

umask 077
touch .my.new.config
umask 022 # or whatever was your default

Таким образом, файл будет создаваться с безопасными разрешениями с самого начала, и ни один перехватчик не сможет украсть ваш пароль.

PostgreSQL в любом случае откажется использовать файл с разрешениями выше 0600.

mysql_config_editor set --login-path=storedPasswordKey --host=localhost --user=root --password

Как мне выполнить командную строку с безопасным паролем? используйте редактор конфига !!!

Начиная с mysql 5.6.6, вы можете сохранить пароль в файле конфигурации, а затем выполнять такие команды cli ....

mysql --login-path=storedPasswordKey ....

--login-path заменяет переменные ... хост, пользователь И пароль. отличное право!

MYSQL_USER="root"
MYSQL_PASSWORD="PASSWORD"
DBNAME="DB_NAME"

mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "CREATE DATABASE $DBNAME;" 2> /tmp/error1

STATUS=$? 
if [ $STATUS -eq 0 ];
then 
    echo -e "Database '$DBNAME' is created"
elif (grep -i "^ERROR 1007" /tmp/error1 > /dev/null);
then
    echo -e "Database '$DBNAME' already exists"
else
    echo -e "Failed to create database '$DBNAME'"
fi

rm -r /tmp/error1 

Это поможет, спасибо

Не заключайте пароль в кавычки, потому что в этом случае кавычки считаются частью пароля.

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

будьте уверены, как вы пишете свой пропуск, и он не ускользнет

--defaults-extra-file = это хорошо (tm) (c)

Аналогичный вопрос существует на StackOverflow.

Подвести итоги мой ответ оттуда.

Ты можешь export MYSQL_PWD=yourverysecretpassword.

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

Там есть нет недостатка к этому методу.

Пароль не видимый для других пользователей системы (он был бы видим, если бы он был в командной строке). Переменные среды видны только пользователю, выполняющему команду mysql, и пользователю root.

Пароль также будет виден всем, кто может прочитать сам скрипт, поэтому убедитесь, что сам скрипт защищен. Это ничем не отличается от защиты файла конфигурации. Вы по-прежнему можете получить пароль из отдельного файла, если хотите, чтобы сценарий был общедоступным (export MYSQL_PWD=$(cat /root/mysql_password) например). По-прежнему проще экспортировать переменную, чем создавать файл конфигурации.

Например.,

$ export MYSQL_PWD=xoF3mafn5Batxasdfuo
$ mysqldump -u root mysql | head
-- MySQL dump 10.13  Distrib 5.6.23, for Linux (x86_64)
--
-- Host: localhost    Database: mysql
-- ------------------------------------------------------
-- Server version   5.6.23
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;