Доступ заборонено користувачеві 'root' @ '%'


29

Я просто чудово отримував доступ до root-користувача в MySQL. Але останнім часом я вже не в змозі.

Я можу ввійти в систему:

 mysql -u root -p

Ось стан mysql після входу:

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (i686) using readline 6.2

Connection id:      37
Current database:   
Current user:       root@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server version:     5.5.28-0ubuntu0.12.04.3 (Ubuntu)
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:         4 min 16 sec

Threads: 1  Questions: 112  Slow queries: 0  Opens: 191  
Flush tables: 1  Open tables:  6  Queries per second avg: 0.437
--------------

Але коли я хочу зробити будь-які дії, такі як:

mysql> CREATE DATABASE moyennegenerale;
ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'moyennegenerale'

Я розумію, %він використовується для позначення будь-якого хоста, але мій статус чітко визначає localhost. Хтось має уявлення про те, що може відбуватися?

Відповіді:


17

Я думаю, у вас є анонімні користувачі

Спробуйте виконати це:

SELECT user,host,password FROM mysql.user WHERE user='';

Це покаже, які анонімні користувачі існують. Швидше за все, ви побачите рядок із порожнім користувачем, хостом %та порожнім паролем, як показано нижче:

mysql> select user,host,password from mysql.user;
+-----------+-------------+-------------------------------------------+
| user      | host        | password                                  |
+-----------+-------------+-------------------------------------------+
| lwdba     | 127.0.0.1   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba     | localhost   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba     | %           | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root      | localhost   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root      | 127.0.0.1   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| vanilla   | localhost   |                                           |
| mywife    | %           |                                           |
|           | %           |                                           | <<<--- LOOK !!!
| replicant | 10.64.113.% | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| kumar     | %           |                                           |
+-----------+-------------+-------------------------------------------+

Отже, як ви увійшли? Запустіть цей запит:

SELECT USER(),CURRENT_USER();

Що це вам говорить?

  • USER () повідомляє, як ви намагалися пройти автентифікацію в MySQL
  • CURRENT_USER () повідомляє про те, як вам було дозволено автентифікуватись у MySQL

Друга функція CURRENT_USER()розкриває, яким чином анонімний користувач використовувався для входу.

Які привілеї ви мали під час входу?

Будь ласка, біжи

SHOW GRANTS;

Це дозволить розкрити, які привілеї ви мали під час входу. Факт, що вам було заблоковано створення бази даних, свідчить, що ви не root, а користувач із нижчими привілеями.

Очистіть свої грантові користувачі.

Що стосується скидання пароля root, будь ласка, виконайте наступне:

echo "SET PASSWORD FOR root@localhost=PASSWORD('password');" > /var/lib/mysql/rootpwd.sql
service mysql restart
rm -f /var/lib/mysql/rootpwd.sql

Я дізнався цей ефективний метод від @ShlomiNoach .

Спробувати !!!


10

Я знаю, що ти зробив.

Зробити це:

SELECT `User`, `Grant_priv` FROM `mysql`.`user` WHERE `User` = 'root';

Ви, мабуть, помітите, що він повертає «N» для Grant_priv. Тож зробіть це:

UPDATE `mysql`.`user` SET `Grant_priv` = 'Y' WHERE `User` = 'root';
FLUSH PRIVILEGES;
SELECT `User`, `Grant_priv` FROM `mysql`.`user`;

І валла! Сподіваюся, що це допомагає.


Також, з міркувань безпеки, ви завжди повинні видалити root-користувача після створення нового dba .. просто переконайтеся, що вони ВІДПОВІДНІ ВСІ ПРИВІЛЕГІЇ, а наприкінці З РЕШИМОЮ ОПЦІЇ .. цей біт важливий.
Кевін Флорида

Це в поєднанні із закриттям та повторним відкриттям з'єднання (у моєму випадку від HeidiSQL) зробило трюк!
xorinzor

4

Після введення як rootкористувач перевіряє свої привілеї:

 mysql> show grants for 'root'@'localhost';

Після перевірки ваших привілеїв ви можете спробувати надати іншому користувачеві всі привілеї, або ви можете спробувати надати rootкористувачеві всі привілеї знову:

 mysql> grant all privileges on *.* to 'root'@'localhost';

Якщо у вашого rootкористувача немає привілеїв, ви можете спробувати відновити їх.

Зупинити mysqldсервер

Перезавантажте сервер таким чином mysqld_safe --skip-grant-table

Відновити rootпривілеї за допомогою:

 mysql> flush privileges;
 mysql> grant all privileges on *.* to 'root'@'localhost' with grant option;

Це те, що я отримую після показу грантів для команди "root" @ "localhost": ПОМИЛКА 1141 (42000): Немає такого гранту для користувача "root" на хості "localhost"

Який вихід другої команди?

2
Існує "кращий" спосіб зробити це в Debian, де вам не потрібно перезапускати сервер. Так само rootпідключіться як debian-sys-maint@localhostі використовуйте пароль в /etc/mysql/debian.cnf. Цей користувач має ВСІ привілеї в MySQL. Хороша річ, що вам не потрібно перезавантажувати сервер.
Андерс

Спробуйте це. sudo mysql --defaults-file = / etc / mysql / debian.cnf
Андерс

0

Можливо, ваші пільги будуть зменшені?

Також ви можете спробувати створити інший обліковий запис з привілеями root.

І видалити root користувача, і створити його заново із заданими привілеями.

Це може бути корисно: http://dev.mysql.com/doc/refman/5.5/uk/resetting-permissions.html

C.5.4.1.2 - LINUX (Створіть файл із запитом, хто створює, новий користувач із повною привілеєм root)

C.5.4.1.1 - Windows (Створіть файл із запитом, хто створює, новий користувач із повними кореневими привілегами)

Запит: (Створити root користувача)

  CREATE USER 'new_root'@'%' IDENTIFIED BY '***';
  GRANT ALL PRIVILEGES ON *.* TO 'new_root'@'%' IDENTIFIED BY '***' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

Посібник по створенню користувача MySQL: http://dev.mysql.com/doc/refman/5.5/uk/adding-users.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.