Я настраиваю сервер 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.