web-dev-qa-db-ja.com

エラー1044(42000):すべての特権で 'root'のアクセスが拒否されました

奇妙なエラーがあります。コマンドライン経由でローカルの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' 

また、ルートとしてログインしていることを確認しています:

select current_user();

これにより、「root」@「localhost」としてログインしていることが確認されます

データベースを作成し、ユーザーを複数回割り当てましたが、問題はありませんでした。ルートとしてログインしているときに、ルートによって作成されたデータベースにユーザーを割り当てることができないのはなぜですか?

追伸他の投稿から、私は問題がいくつかの奇妙なユーザーに起因する可能性があると考えています

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

ただし、クエリの実行が成功したことを示す間、ユーザーはフラッシュ特権の後でも削除されません。ユーザーを削除できないのはなぜですか?どんな助けも大いに歓迎されます

21
latvian

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

 select user();
 select current_user();

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

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

再度ログインしましたが、大丈夫でした。

MySQL(XAMPPサーバーにインストールされている)cmd PromptでSQLコマンドを実行しようとするとエラー1044(42000)が発生する場合、解決策は次のとおりです。

  1. MySQLコマンドプロンプトを閉じます。

  2. C:\ Users\User> _と表示されるcmdプロンプト([スタート]メニュー-> [実行]-> [cmd]から)を開きます。

  3. 次のコマンドを入力して、MySQL.exeに移動します。

C:\Users\User>cd\ C:\>cd xampp C:\xampp>cd mysql C:\xxampp\mysql>cd bin C:\xampp\mysql\bin>mysql -u root

  1. 次のように入力して、新しいデータベースを作成してみてください。

    mysql> create database employee;
    

    それが示す場合:

    Query OK, 1 row affected (0.00 sec)
    mysql>
    

    それではおめでとうございます!準備できた...

2
Ashwin

「ドロップ」ステートメントを介して一部のユーザーを削除できなかった理由は、Mysqlにバグがあるためです http://bugs.mysql.com/bug.php?id=62255 ホスト名を含む大文字。ソリューションは次のクエリを実行していました。

DELETE FROM mysql.user where Host='Some_Host_With_UpperCase_Letters';

私はまだ、すべての権限を持つルートユーザーが特定のデータベースの新しいユーザーに特権を付与できないという他の問題を考えています

1
latvian