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


29

私は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'

%使用してhostを表すことを理解していますが、ステータスは明らかに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での認証を許可された方法を報告します

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からこの効率的な方法を学びました

試してみる !!!


10

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

これを行う:

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`;

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


また、セキュリティ上の理由から、新しいdbaを作成した後は常にrootユーザーを削除する必要があります。彼らがGRANT ALL PRIVILEGESであることを確認し、最後にWITH GRANT OPTION ..が重要です。
ケビンフロリダ州14年

これは、(私の場合は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;

これは私が「ルート」のためのショーの助成金の後に取得されるものです@「localhost」のコマンド:ERROR 1141(42000):ホスト上のユーザのルート'「localhost」のために定義されたそのような助成金はありません

2番目のコマンドの出力は何ですか?

2
Debianでこれを行うには「より良い」方法があり、サーバーを再起動する必要はありません。のようにroot接続しdebian-sys-maint@localhostて、パスワードを使用します/etc/mysql/debian.cnf。そのユーザーはMySQLですべての特権を持っています。良いことは、サーバーを再起動する必要がないことです。
アンデルス

これを試して。sudo mysql --defaults-file = / etc / mysql / debian.cnf
アンデルス

0

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

また、ルート権限で別のアカウントを作成しようとすることもできます。

そして、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(完全なルート権限を持つ新規ユーザーを作成するクエリを持つファイルを作成します)

クエリ:(ルートユーザーの作成)

  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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.