66

これが重複した質問であると考える前に、たとえそれが多少ぼんやりしていたとしても、私はユニークなケースを持っていると信じています.

数日前、Ubuntu 10.04 サーバーの MySQL のバージョンを 5.3.3 にアップグレードしました (これは 10.04 の Ubuntu リリースよりも進んでいます)。今日、何かのために phpMyAdmin にログインしようとしたところ、やや恐ろしいConnection for controluser as defined in your configuration failedエラーが発生しました。

これを修正する方法に関するいくつかの SO の質問からの説明に従った後、私は動けなくなりました。

  • phpMyAdmin を再構成しようとしましたが、成功しませんでした。
  • phpMyAdmin をアンインストールして再インストールしようとしましたが、DB から権限を削除できず、失敗しました。
  • 次に、DBからユーザーの権限を手動で削除しようとしました-ややばかげているかもしれませんが、追加するかもしれません-、次にdbを削除し、次にユーザーを削除しました( with flush privileges)。
  • phpMyAdmin のインストール全体を完全に削除し (アプリケーションと /etc/phpmyadmin ディレクトリを削除)、再インストールしました (apt-get を使用) が、phpmyadmin ユーザーのアクセス許可が既に存在すると言われました。

granting access to database phpmyadmin for phpmyadmin@localhost: already exists

だから、ここに私が残っているものがあります。変更も取り消しもできない助成金を持っています:

mysql> show grants for 'phpmyadmin'@'localhost';
+-------------------------------------------------------------------------------------------------------------------+
| Grants for phpmyadmin@localhost                                                                                   |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'phpmyadmin'@'localhost' IDENTIFIED BY PASSWORD '*46CFC7938B60837F46B610A2D10C248874555C14' |
| GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO 'phpmyadmin'@'localhost'                                                |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.26 sec)

mysql> revoke usage on *.* from 'phpmyadmin'@'localhost';
ERROR 1141 (42000): There is no such grant defined for user 'phpmyadmin' on host 'localhost'

mysql> revoke usage on *.* from 'phpmyadmin'@'localhost' identified by 'trustno1';
ERROR 1141 (42000): There is no such grant defined for user 'phpmyadmin' on host 'localhost'

(心配しないでください。このパスワードはもう使用しませんが、以前に使用したパスワードであり、新しい phpmyadmin インストール用に選択したパスワードではありません)。

これらの許可/特権を完全に削除するにはどうすればよいですか? 必要に応じて、ゼロからやり直します (DB ではなく phpmyadmin)。

4

2 に答える 2

123

mysql の USAGE 権限は、グローバル レベルで定義されたユーザー 'phpadmin'@'localhost' に対する権限がないことを意味します*.*。さらに、同じユーザーがデータベース phpmyadmin に対してすべての権限を持っていますphpadmin.*

したがって、すべての特権を削除して完全に最初からやり直したい場合は、次の手順を実行します。

  • データベース レベルのすべての権限を取り消します。

    REVOKE ALL PRIVILEGES ON phpmyadmin.* FROM 'phpmyadmin'@'localhost';

  • ユーザー「phpmyadmin」@「localhost」を削除します

    DROP USER 'phpmyadmin'@'localhost';

上記の手順により、インスタンスからユーザーが完全に削除されます。これは、ユーザーを最初から再作成できることを意味します。

上記の説明の背景を少し説明すると、ユーザーを作成するとすぐにmysql.userテーブルにデータが入力されます。その中のレコードを見ると、ユーザーとすべての権限が に設定されていることがわかります'N'。を実行するshow grants for 'phpmyadmin'@'localhost';と、すでにおなじみの上記の出力が表示されます。単純に「ユーザーのグローバルレベルでの権限なし」に翻訳されます。ALLデータベースレベルでこのユーザーに付与すると、これはテーブルに保存されますmysql.db。a を実行すると、すべての priv にSELECT * FROM mysql.db WHERE db = 'nameofdb';a が表示されます。'Y'

上記は、現在データベースにあるシナリオを示しています。したがって、特権のみを持つユーザーを持つUSAGEことは、このユーザーが接続できることを意味しますが、SHOW GLOBAL VARIABLES; SHOW GLOBAL STATUS;他の特権はありません。

于 2013-07-25T08:37:24.983 に答える
15

補足として、revoke usage on *.* from 'phpmyadmin'@'localhost';機能しない理由は非常に単純です: というグラントがありませんUSAGE

実際の名前付き許可は、MySQL のドキュメントにあります。

グラントUSAGEは論理グラントです。どのように?'phpmyadmin'@'localhost' には、mysql.useruser='phpmyadmin' および host='localhost' のエントリがあります。mysql.user の行は意味的にUSAGE. 実行DROP USER 'phpmyadmin'@'localhost';は問題なく動作するはずです。内部では、実際にこれを行っています。

DELETE FROM mysql.user WHERE user='phpmyadmin' and host='localhost';
DELETE FROM mysql.db   WHERE user='phpmyadmin' and host='localhost';
FLUSH PRIVILEGES;

したがって、文字通り実行できない場合でも、からの行の削除はmysql.userrunning を構成します。REVOKE USAGEREVOKE USAGE

于 2013-07-26T22:16:07.097 に答える