Згідно з документацією на 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 |
+------------------+-----------+-------------------------------------------+
Я видалив усі анонімні облікові записи, так що таблиця користувачів тепер виглядає так. (Я використовую лялечку для управління користувачами, але лялька ефективно виконує 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, не вводячи пароль.
Update2 : Я знайшов це питання, яке містить хорошу інформацію, але не вирішує проблему.
Анонімних користувачів немає.
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 :
Я спробував виконати ці кроки з лялькою (яка повинна виконувати привілеї флеш автоматично). Я також вручну очистив привілеї, а також спробував перезапустити mysql.
Update4 :
Я також спробував змінити пароль root mysql та розмитився привілеями. Не щастить, я все одно можу ввійти як будь-який користувач без пароля.