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

Не удается войти в mysql с пользователем без полномочий root из командной строки

Я настраиваю сервер mysql и пытаюсь создать непривилегированного пользователя для входа в каждую создаваемую мной базу данных. Я могу успешно войти в систему как пользователь root с консоли, но когда я пытаюсь войти в систему как пользователь "rails", это не удается. Вот как выглядят мои пользователи:

mysql> select user,host,password from mysql.user;
+---------+-----------+-------------------------------------------+
| user    | host      | password                                  |
+---------+-----------+-------------------------------------------+
| root    | localhost | *9CAF1C22F1F66A8C47C74E7F6700391F0AB817F0 |
| root    | 127.0.0.1 | *C453FFD4FD2470D5CD56BB9A229BDC7388F3A170 |
| datadog | localhost | *AEB79FF15C0A9CA185F3768235927ADDD9667C85 |
| rails   | localhost | *9CAF1C22F1F66A8C47C74E7F6700391F0AB817F0 |
+---------+-----------+-------------------------------------------+

Гранты для пользователя рельсов выглядят так:

mysql> show grants for 'rails'@'localhost';                                                                                                                                          ';
+--------------------------------------------------------------------------------------------------------------------------+
| Grants for rails@localhost                                                                                               |
+--------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'rails'@'localhost' IDENTIFIED BY PASSWORD '*9CAF1C22F1F66A8C47C74E7F6700391F0AB817F0' REQUIRE SSL |
| GRANT ALL PRIVILEGES ON `resumecompanion_staging`.* TO 'rails'@'localhost'                                               |
+--------------------------------------------------------------------------------------------------------------------------+

Обратите внимание, что я установил одинаковый пароль пользователя root и пароль rails. Я сделал это, чтобы подтвердить, что ввожу правильный пароль, но он по-прежнему не работает.

Когда я пытаюсь войти в систему с пользователями rails, я вижу следующее:

mysql -u rails -h localhost -p --protocol=TCP resumecompanion_staging
Enter password:
ERROR 1045 (28000): Access denied for user 'rails'@'localhost' (using password: YES)

Есть ли у кого-нибудь идеи, что я делаю не так?

Спасибо,

Джош

GRANT ... TO 'rails'@'localhost' ... REQUIRE SSL

Для начала, требовать SSL для соединений с / с localhost совершенно бессмысленно. SSL или TLS обеспечивают транспортная безопасность которые вам не нужны для связи, которая не покинет реальную систему, не обеспечит никакой дополнительной безопасности, а только лишние накладные расходы.

Кроме того, официальные библиотеки MySQL в Linux / UNIX обрабатывают ключевое слово localhost отличается от того, что вы ожидаете, и будет использовать сокет Unix, а не TCP. из руководство:

В Unix программы MySQL обрабатывают имя хоста localhost особенно, способом, который, вероятно, отличается от того, что вы ожидаете, по сравнению с другими сетевыми программами. Для подключений к localhost программы MySQL пытаются подключиться к локальному серверу с помощью файла сокета Unix. Это происходит, даже если для указания номера порта задана опция --port или -P. ... Вы также можете явно указать протокол подключения, используя --protocol=TCP вариант.

Использование сокета дает вам гораздо большую производительность, чем использование TCP / IP и AFAIK, сокет не поддерживает SSL (и в этом нет необходимости).

Если вы принудительно устанавливаете TCP-соединение, вам также потребуется GRANT доступ через TCP, с GRANT ... TO 'rails'@'127.0.0.1' ... , потому что предоставление соединений от localhost подразумевает сокет Unix.

Особенно бесполезно то, что для сообщений об ошибках MySQL следует соглашению о выполнении обратного поиска в DNS для IP-адресов, которые преобразуют IP-адрес. 127.0.0.1 к localhost.