Як я можу змусити клієнт 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 Server - 5.6.22, на Oracle Linux 6. Клієнт і сервер знаходяться на різних хостах.

Дякую

Відповіді:


2

У будь-якому випадку ви це зробите, певно, десь збережете пароль. Навіть шлях входу в MySQL 5.6 легко розшифрується будь-ким, хто має мотивацію. Це попередження сказало, що це було б простим рішенням.

У своєму сценарії оточення (наприклад, ~/.profileабо ~/.bashrc) встановіть

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

(звичайно, додавши бажаного користувача, Passwd та ім'я хосту.)

Після релогіну оболонки ви зможете просто зробити це

mysql

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

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


Це вирішення актуальної проблеми, але я в цьому добре. Я приймаю цю відповідь з відмовою від майбутніх читачів, що правильний спосіб зробити це відповідь Наваза, але це не працює в моєму середовищі з невідомих причин. Дякую!
Лефтерис Куцолукас

1
-1 це не відповідає на запит ОП, а також не дозволяє зберігати пароль у файлі. тепер пароль зберігається в .profile замість .mylogin.cnf. Але тепер пароль відображається командою ps.
чудо173

@miracle, будь ласка, підтвердіть свою заяву, що ps відкриє пароль. У моїх системах пароль відображається замасковано як xxxxxxx у виході ps. Якщо ваш клієнт MySQL не працює як мій, будь ласка, опублікуйте, яку версію та дистрибутив mysql ви використовуєте. А у вас є краща відповідь на власне питання ОП?
Джошуа Хубер

2
@joshua: Керівництво для кінцевого користувача Паролювання : «Використовувати -pyour_passабо --password=your_passопцію в командному рядку (...) Це дуже зручно , але небезпечно
чудо173

10

використовуйте наступну команду, щоб спочатку встановити шлях входу

набір mysql_config_editor --loglogin-path = lgpath --user = root -p
пароль

а потім використовуйте команду нижче для входу в mysql

mysql --login-path = lgpath

Довідку про параметри шляху входу в mysql можна побачити

набір mysql_config_editor - допомогти


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

3

У мене було те саме питання, що і в ОП, але відповіді в цій темі мене бентежили. Посилання Віна Мандали насправді працювало на мене. Повідомлення тут для наочності.

Мій випуск:

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.
Лефтерис Куцолукас

Ви впевнені, що користувач, який mysqlвиконує команду mysql? Якщо ні, поміняйте власника mylogin.cnfі це повинно працювати :)
Iazel

0

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

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


У мене було те саме питання. Як зазначив Плазгот , у мене був спеціальний символ пароля, і він не працював. Що для мене спрацювало, це пропозиція користувача bglad щодо цієї публікації
Vinay Mandala

0

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


0

ПРИМІТКА, якщо ви намагаєтеся запустити pathпід користувачем linux root - не можна просто використовувати sudo. Ви повинні увійти як кореневий 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.