Как отключить анонимный вход?

9

Согласно документации MySQL , вы можете укрепить сервер MySQL, добавив пароли или удалив анонимные учетные записи.

Если вы хотите запретить клиентам подключаться как анонимные пользователи без пароля, вам следует либо назначить пароль каждой анонимной учетной записи, либо удалить учетные записи.

До отверждения моя таблица пользователей выглядела так.

mysql> select user,host,password from mysql.user;
+------------------+-----------+-------------------------------------------+
| user             | host      | password                                  |
+------------------+-----------+-------------------------------------------+
| root             | localhost | *F3A2A51A9B0F2BE246XXXXXXXXXXXXXXXXXXXXXX |
| root             | gitlab    |                                           |
| root             | 127.0.0.1 |                                           |
| root             | ::1       |                                           |
|                  | localhost |                                           |
|                  | gitlab    |                                           |
| debian-sys-maint | localhost | *95C1BF709B26A5BAXXXXXXXXXXXXXXXXXXXXXXXX |
| myuser           | localhost | *6C8989366EAF75BB6XXXXXXXXXXXXXXXXXXXXXXX |
+------------------+-----------+-------------------------------------------+

Я удалил все анонимные учетные записи, так что таблица пользователей теперь выглядит следующим образом. (Я использую Puppet для управления пользователями, но Puppet эффективно выполняет DROP USERкоманду).

mysql> select user,host,password from mysql.user;
+------------------+-----------+-------------------------------------------+
| user             | host      | password                                  |
+------------------+-----------+-------------------------------------------+
| root             | localhost | *F3A2A51A9B0F2BE246XXXXXXXXXXXXXXXXXXXXXX |
| debian-sys-maint | localhost | *95C1BF709B26A5BAXXXXXXXXXXXXXXXXXXXXXXXX |
| myuser           | localhost | *6C8989366EAF75BB6XXXXXXXXXXXXXXXXXXXXXXX |
+------------------+-----------+-------------------------------------------+

Почему я все еще могу войти в свою тестовую систему без имени пользователя или пароля?
Что мне нужно сделать, чтобы нежелательные пользователи не могли войти в систему?

root@gitlab:~# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 98
Server version: 5.5.32-0ubuntu0.12.04.1 (Ubuntu)
....
mysql> 

Обновление : я также только что обнаружил, что могу войти в систему как root, не вводя пароль.

Обновление 2 : я нашел этот вопрос, который имеет некоторую полезную информацию, но не решает проблему.

Анонимных пользователей нет.

mysql> select user,host,password from mysql.user where user='';
Empty set (0.00 sec)

Я вхожу как root@localhost.

mysql> select USER(),CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+ 

У меня нет пароля по умолчанию или таблиц пропущенных грантов, определенных в my.cnf

root@gitlab:~# cat /etc/mysql/my.cnf |grep -i 'skip-grant-tables'|wc -l
0
root@gitlab:~# cat /etc/mysql/my.cnf |grep -i 'pass'|wc -l
0

Обновление 3 :

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

Update4 :
я также попытался изменить пароль root mysql и сбросил привилегии. Не повезло, я все еще могу войти как любой пользователь без пароля.

spuder
источник
Также см stackoverflow.com/q/7179894/632951
Pacerier

Ответы:

6

Я понял. Хотя в /etc/mysql/my.cnf не сохранялась пара ключей паролей, в /root/.my.cnf сохранялся пароль.

Как только я закомментировал пароль в /root/.my.cnf, мне не разрешили войти без пароля (что я и ожидал).

spuder
источник