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?
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();
Druhá funkce CURRENT_USER()
ukazuje, jakého anonymního uživatele byl použit k přihlášení.
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.
Feb 17, 2012
: MySQL: Proč existují v mysql.db "testovací" položky?Feb 17, 2012
: K čemu se používá tabulka mysql.db?Jan 18, 2012
: MySQL chyba: Uživateli byl odepřen přístup '@' localhost '(pomocí hesla: ANO)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 !!!
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.
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;
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