1. ホーム
  2. mysql

[解決済み] エラー1044 (42000)。すべての権限を持つ'root'のためのアクセスが拒否されました。

2022-02-14 07:55:40

質問

おかしなエラーが発生します。コマンドラインからローカルのMysqlにrootとしてログインしています。データベースを作成した後

create database some_db;

次に、あるユーザーに特権を与える。

grant all privileges on some_db.* to some_user@'localhost' identified by 'password';

これはエラーになります。

ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'some_db'

root(show grants;)のパーミッションが表示されます。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*8919C53DC7A4DFBF3F8584382E96463583EB7FDA' 

また、rootでログインしていることを確認しています。

select current_user();

そして、これは私が'root'@'localhost'としてログインしていることを確認するものです。

これまで何度もデータベースを作成し、ユーザーを割り当ててきましたが、問題はありませんでした。なぜ、rootでログインしているときに、rootで作成したデータベースにユーザーを割り当てることができないのでしょうか?

p.s. 他の投稿から、私はこの問題はいくつかの奇妙なユーザーによって引き起こされるかもしれないと考えています。

select host, user from mysql.user;

追加していないのに表示されるユーザーがいます。

 MY_COMPuTER_name.local |       ''
 MY_COMPuTER_name.local |     root

これらのユーザーを削除しようとしました。

drop user 'root'@'MY_COMPuTER_name.local';
drop user ''@'MY_COMPuTER_name.local';

しかし、クエリの実行は成功したと表示されますが、権限をフラッシュしてもユーザーは削除されません。なぜユーザーを削除できないのでしょうか?どのようなヘルプも非常に高く評価されます

解決方法を教えてください。

まず、ログインしているユーザーを確認します。

 select user();
 select current_user();

最初のコマンドの結果は、あなたがログインしようとしたもので、2番目のコマンドは、あなたが実際に接続したものです。次のようにログインしていることを確認します。 root@localhost をmysqlで実行します。

Grant_priv から root@localhost . 以下はその確認方法です。

mysql> SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user;
+-----------+------------------+-------------------------------------------+------------+------------+
| host      | user             | password                                  | Grant_priv | Super_priv |
+-----------+------------------+-------------------------------------------+------------+------------+
| localhost | root             | ***************************************** | N          | Y          |
| localhost | debian-sys-maint | ***************************************** | Y          | Y          |
| localhost | staging          | ***************************************** | N          | N          |
+-----------+------------------+-------------------------------------------+------------+------------+

root@localhost の Grant_priv が N になっているのがわかります。これはYにする必要があります。以下は、これを修正する方法です。

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'root'@'localhost';

再ログインしたら大丈夫でした。