it-swarm-eu.dev

Přístup odepřen uživateli root '@'% '

Použil jsem přístup k rootovi v MySQL v pohodě. Ale v poslední době už nejsem schopen.

Mohu se přihlásit v pořádku:

 mysql -u root -p

Zde je stav mysql po přihlášení:

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:       [email protected]
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
--------------

Ale když chci udělat nějakou akci, jako například:

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

Rozumím % se používá k označení jakéhokoli hostitele, ale můj stav jasně uvádí localhost. Má někdo představu o tom, co by se mohlo stát?

29
jules testard

Myslím, že máte anonymní uživatele

Zkuste to spustit:

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

Ukáže to, co anonymní uživatelé existují. S největší pravděpodobností uvidíte řádek s prázdným uživatelem, hostitelem % A prázdným heslem, jak je uvedeno níže:

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     | %           |                                           |
+-----------+-------------+-------------------------------------------+

Jak jste se tedy přihlásili? Spustit tento dotaz:

SELECT USER(),CURRENT_USER();

Co ti to říká?

  • USER () hlásí, jak jste se pokusili ověřit v MySQL
  • CURRENT_USER () hlásí, jak vám bylo povoleno ověření v MySQL

Druhá funkce CURRENT_USER() ukazuje, jakého anonymního uživatele byl použit k přihlášení.

Jaká oprávnění jste měli, když jste se přihlásili?

Prosím běžte

SHOW GRANTS;

Tím odhalíte, jaká oprávnění jste měli v době, kdy jste se přihlásili. Skutečnost, že vám bylo zablokováno vytváření databáze, ukazuje, že nejste root, ale nějaký uživatel s nižším oprávněním.

Vyčistěte své uživatelské granty.

Pokud jde o resetování rootovského hesla, proveďte následující:

echo "SET PASSWORD FOR [email protected]=PASSWORD('password');" > /var/lib/mysql/rootpwd.sql
service mysql restart
rm -f /var/lib/mysql/rootpwd.sql

Naučil jsem se tuto efektivní metodu od @ShlomiNoach .

Pokusit se !!!

18
RolandoMySQLDBA

Vím, co jsi udělal.

Udělej tohle:

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

Pravděpodobně si všimnete, že vrátí 'N' pro Grant_priv. Tak to udělej:

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

A walla! Doufám, že to pomůže.

10
Kevin Florida

Po zadání uživatele root zkontrolujte svá oprávnění:

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

Po kontrole vašich oprávnění můžete zkusit udělit jinému uživateli všechna oprávnění, nebo můžete zkusit udělit uživateli root všechna oprávnění znovu:

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

Pokud váš uživatel root nemá oprávnění, můžete je zkusit obnovit, takže:

Zastavte server mysqld

Restartujte server tímto způsobem mysqld_safe --skip-grant-table

Obnovte oprávnění root pomocí:

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

Vaše oprávnění mohou být snížena?

Můžete také zkusit vytvořit jiný účet s oprávněními root.

Odstranit uživatele root a znovu vytvořit se zadanými oprávněními.

To může být užitečné: http://dev.mysql.com/doc/refman/5.5/en/resetting-permissions.html

C.5.4.1.2 - LINUX (Vytvořte soubor s dotazem, kdo vytvoří, nový uživatel s úplnými oprávněními root)

C.5.4.1.1 - Windows (Vytvořte soubor s dotazem, kdo vytvoří, nový uživatel s úplnými oprávněními root)

Dotaz: (Vytvořit uživatele 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 Manual Create User: http://dev.mysql.com/doc/refman/5.5/en/adding-users.html

0
Jan Czarny