25

奇妙なエラーがあります。コマンドライン経由でルートとしてローカル Mysql にログインしています。データベースの作成後:

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'

ルートのアクセス許可 (show grants;) は次を示します。

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

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

select current_user();

そして、これは私が「root」@「localhost」としてログインしていることを確認します

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

ps 他の投稿から、奇妙なユーザーが原因で問題が発生した可能性があると考えています

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

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

4

4 に答える 4

50

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

 select user();
 select current_user();

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

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

ログインし直しました、大丈夫でした。

于 2014-02-13T04:01:14.693 に答える