Я всегда использовал Navicat в Windows для управления экземплярами MySQL/Percona.
Несколько дней назад я купил новый сервер и установил MariaDB 10.3.9.
Я могу нормально подключиться к нему, когда нахожусь в сеансе Putty, подключаюсь по SSH к коробке. mysql -u root -p
Все отлично работает.
Но по какой-то причине Navicat выдает ошибкуaccess denied for user 'root'@'::1' (using password: YES)
Настройки Navicat те же, что я всегда использовал раньше:
Имя хоста: localhost Порт: 3306 Имя пользователя Mysql: root Пароль Mysql: [пароль root в mysql]
Использовать SSH-туннель: да IP-адрес: [IP моего сервера] Имя пользователя SSH: [мое имя] Пароль SSH: [мой пароль SSH]
Я не уверен, почему это работает через SSH, когда я делаю это вручную, но не работает, когда это делает Navicat, хотя он, по-видимому, делает в основном то же самое. В чем тут дело '::1'
, это указывает на проблему?
Спасибо!
решение1
На самом деле естьтринемного отличающиеся пользователи root в MySQL. (Что действительно неприятно, но так было всегда и, вероятно, не изменится...)
MariaDB [(none)]> select Host, User from mysql.user where User = 'root';
+-----------+------+
| Host | User |
+-----------+------+
| 127.0.0.1 | root |
| ::1 | root |
| localhost | root |
+-----------+------+
3 rows in set (0.06 sec)
Пользователь root
с host localhost
используется только при подключении через сокет UNIX. Остальные пользователи используются при подключении через сокет TCP, через IPv4 или IPv6 соответственно.
Когда вы делаете переадресацию порта ssh с помощью Navicat, используется сокет TCP, а именно сокет TCP IPv6 (поскольку IPv6 предпочтительнее IPv4). Таким образом, именно этот пользователь проходит аутентификацию.
Большинство из нас решает эту проблему, устанавливая одинаковый пароль для всех трех строк.