web-dev-qa-db-ja.com

ユーザー 'root' @ '%'のアクセスが拒否されました

私はMySQLでrootユーザーにうまくアクセスしていました。しかし、最近、私はもうできなくなっています。

私はうまくログインできます:

 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を示しています。誰かが何が起こっているのかを知っていますか?

29
jules testard

匿名ユーザーがいると思います

これを実行してみてください:

_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での認証を許可された方法を報告します

2番目の関数CURRENT_USER()は、どの匿名ユーザーがログインに使用されたかを明らかにします。

ログインしたときにどのような特権がありましたか?

実行してください

_SHOW GRANTS;
_

これにより、ログイン時の特権が明らかになります。データベースの作成がブロックされたという事実は、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からの効率的な方法

試してみる !!!

18
RolandoMySQLDBA

私はあなたが何をしたか知っています。

これを行う:

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

Grant_privに対して「N」を返すことに気付くでしょう。これを行います:

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

そしてワラ!お役に立てば幸いです。

10
Kevin Florida

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;
4
Atropo

あなたの特権が減る可能性がありますか?

また、root権限で別のアカウントを作成することもできます。

そしてrootユーザーを削除し、指定された権限で再作成します。

これは役に立ちます: http://dev.mysql.com/doc/refman/5.5/en/resetting-permissions.html

C.5.4.1.2-LINUX(作成したクエリを持つファイルを作成し、完全なルート権限を持つ新しいユーザー)

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/en/adding-users.html

0
Jan Czarny