Как я могу заставить клиента MySQL читать пароль из mylogin.cnf?


11

Я пытаюсь подключить клиент mysql к серверу mysql без необходимости интерактивного ввода пароля. Предпринятые шаги:

1) Сначала создайте файл mylogin.cnf

$ mysql_config_editor set --user=<user> --password --host=<host>
Enter password:

2) Файл успешно создан:

$ ls -la .mylogin.cnf
-rw-------. 1 urmt urmt  136 Dec 19 11:01 .mylogin.cnf
$ mysql_config_editor print --all
[client]
user = <user>
password = *****
host = <host>

3) Подключиться с помощью клиента mysql

$ mysql <dbname>
ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

Есть ли значение / конфигурация по умолчанию где-то, что заставляет клиента игнорировать пароль в mylogin.cnf? Свойства пользователя и хоста были правильно прочитаны из файла.

Я могу просто подключиться, если я укажу пароль в командной строке:

$ mysql -p <dbname>
Enter password: 
Reading table information...
...
mysql> 

Версия клиента MySQL - 5.6.22, версия сервера MySQL - 5.6.22, как в Oracle Linux 6. Клиент, так и сервер находятся на разных хостах.

Спасибо

Ответы:


2

В любом случае, вы, вероятно, где-нибудь сохраните пароль. Даже MySQL 5.6 login-path легко расшифровывается любым, кто имеет мотивацию. В этом предупреждении сказано, что это будет легким решением.

В вашем сценарии среды (например, ~/.profileили ~/.bashrc), установите

alias mysql='mysql -uUser -pPasswd -hHostname'

(вводя желаемого пользователя, Passwd и Hostname, конечно.)

После повторного входа в оболочку вы можете просто

mysql

... который будет использовать ваш псевдоним и подключаться к БД и игнорировать любые пароли в .my.cnfфайлах.

Примечание по безопасности: Если на вашем сервере есть другие пользователи, вы можете захотеть изменить свой профиль профиля на chmod 700, чтобы другие не так легко получили доступ к паролю. Любой админ с root или sudo сможет увидеть его еще; никак не обойтись.


Это обходной путь к актуальной проблеме, но я в порядке. Я принимаю этот ответ с оговоркой будущим читателям, что правильный способ сделать это - ответ Наваза, но он не работает в моей среде по неизвестной причине. Спасибо!
Лефтерис Куцолукас

1
-1 это не отвечает на запрос OP и не позволяет сохранить пароль в файле. пароль теперь хранится в .profile вместо .mylogin.cnf. Но теперь пароль отображается командой ps.
чудо173

@miracle, пожалуйста, подтвердите свое утверждение, что PS откроет пароль. В моих системах пароль отображается как xxxxxxx в выводе ps. Если ваш клиент MySQL не работает как мой, пожалуйста, опишите, какая версия mysql и дистрибутив у вас запущены. И у вас есть лучший ответ на актуальный вопрос ОП?
Джошуа Хубер

2
@joshua: Руководство для конечных пользователей по безопасности паролей : «Используйте параметр -pyour_passили --password=your_passв командной строке (...) Это удобно, но небезопасно ».
чудо173

10

используйте следующую команду, чтобы сначала установить путь входа

mysql_config_editor set --login-path = lgpath --user = root -p
пароль

и затем используйте команду ниже, чтобы войти в MySQL

mysql --login-path = lgpath

Справку о параметрах пути входа в MySQL можно увидеть

mysql_config_editor set --help


Я попытался установить путь входа в систему явно, как вы предложили, но, к сожалению, он ведет себя так же: $ mysql_config_editor print --all [lgpath] user = <user> password = ***** host = <host> $ mysql --login -path = lgpath ОШИБКА 1045 (28000): доступ запрещен для пользователя '<user>' @ '<host>' (с использованием пароля: НЕТ)
Lefteris Koutsoloukas

3

У меня была та же проблема, что и у OP, но ответы в этой теме меня смутили. Ссылка Vinay Mandala на самом деле работает для меня. Перемещено сюда для наглядности.

Моя проблема:

ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

Это доказывает, что mysql_config_editorне обрабатывает специальные символы в пароле должным образом.

Решение:

Когда mysql_config_editorвас попросят ввести пароль, убедитесь, что вы заключили пароль в двойные кавычки (") . После этого вы можете войти в систему просто отлично.


1

Я получаю эту ошибку, за исключением того, что он сказал (используя пароль: ДА)

Причина, о которой говорил Джованни, была из-за "#" в пароле. Я обнаружил, что обходной путь - вставлять кавычки вокруг вашего пароля при появлении запроса. Такое же ограничение существует для паролей с открытым текстом, использующих .my.cnf.


0

Наваз ответ правильный. Я мало что могу добавить. Я предлагаю вам сделать несколько попыток с переменной среды MYSQL_TEST_LOGIN_FILE, чтобы создать новый файл конфигурации, на случай, если файл по умолчанию поврежден. Используйте также, --no-defaultsчтобы пропустить .cnfфайлы. Если пароль содержит символ #, mysql login-pathне работает.

$ export MYSQL_TEST_LOGIN_FILE=$HOME/mylogin.cnf

$ mysql_config_editor set --login-path=mytest --host=127.0.0.1 --port=5622 --user=mytest --password
Enter password:

$ ls -l $MYSQL_TEST_LOGIN_FILE
-rw------- 1 mysql mysql 288 Feb 27 14:25 mylogin.cnf

$ mysql --no-defaults --login-path=mytest test

Эта переменная среды не была установлена. Я установил это, но у меня было точно такое же поведение. Он игнорировал пароль в mylogin.cnf.
Лефтерис Куцолукас

Вы уверены, что пользователь exec mysqlкоманда mysql? Если нет, смените владельца, mylogin.cnfи он должен работать :)
Iazel

0

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

Для подтверждения попробуйте изменить пароль на что-то простое и посмотреть, исчезнет ли эта проблема.


Я была такая же проблема. Как указал Плазгот , у меня был специальный символ в пароле, и он не работал. Что сработало для меня, так это предложение пользователя bglad на этот пост
Vinay Mandala,

0

У меня была эта проблема со скриптом оболочки. Мой скрипт менял значение $ HOME, и это приводило к тому, что --login-path = ***, казалось, игнорировался. Когда я перестал изменять значение $ HOME, оно начало работать.


0

ПРИМЕЧАНИЕ, если вы пытаетесь запустить pathпод пользователем Linux root - вы не можете просто использовать sudo. Вы должны войти в систему как root IE

user@server:$ sudo su
user@server:$ Enter Password
root@server:$ mysql_config_editor set --login-path=data-main --user=<user> --password --host=<host>
root@server:$ Enter Password
root@server:$ exit
user@server:$ ...

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.