2013-07-23 17 views
40

これは重複した質問だと思う前に、私はそれがやや曖昧なケースであっても一意であると信じています。MySQLデータベースから特権を削除する

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

これを修正する方法に関するいくつかの質問から、私は固まってしまった。

  • 私はreconfigure phpMyAdminにしようとしましたが、成功しませんでした。
  • 私はuninstall phpMyadmin and reinstallにしようとしましたが、dbから権限を削除できず、失敗しました。
  • その後私はユーザーのmanually remove the privilegesにやってみた。少しばかげて、データベースから追​​加して、次にdbを落としてから、ユーザー(flush privileges)を追加した。
  • 私は、全体が(アプリケーションと/ etc/phpMyAdminのディレクトリを削除)と再インストール(apt-getを使用)完全にphpMyAdminののインストールを落としますが、phpMyAdminのユーザの権限がすでに存在していたと述べた:

granting access to database phpmyadmin for [email protected]: already exists

ここに私が残したものがあります。

mysql> show grants for 'phpmyadmin'@'localhost'; 
+-------------------------------------------------------------------------------------------------------------------+ 
| Grants for [email protected]                     | 
+-------------------------------------------------------------------------------------------------------------------+ 
| 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インストール用)。

これらの権限/特権を完全に削除するにはどうすればよいですか?私は必要があれば最初からやり直すことができてうれしいです(phpmyadmin、つまりdbではありません)。

答えて

82

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

だから、あなたは、次のすべての権限を削除し、完全にゼロからスタートしたい場合:

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

  • ドロップユーザー:

    • は、データベースレベルでのすべての権限を取り消しphpmyadmin '@' localhost '

      DROP USER 'phpmyadmin'@'localhost';

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

    上記の説明を少し参考にすると、ユーザーを作成するとすぐにmysql.userテーブルにデータが入力されます。レコードを見ると、ユーザーとすべての特権が'N'に設定されています。show grants for 'phpmyadmin'@'localhost';を実行すると、上記のすべてのfamilliar出力が表示されます。単に「ユーザーのグローバルレベルの特権なし」に変換されます。今度はデータベースレベルでALLをこのユーザーに付与すると、テーブルmysql.dbに保存されます。 SELECT * FROM mysql.db WHERE db = 'nameofdb';を実行すると、すべてのprivに'Y'が表示されます。

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

  • +2

    これに続いて「特権を取らなければなりませんか? –

    +0

    今日までこれを見ることができず、あなたの答えは特権問題を解決しました。ありがとうございました。しかし、私の 'あなたの設定で定義されたControluserのためのConnection failed 'エラーは残っていますが、これは別の問題です。 – Cyntech

    +1

    'DROP USER'は、mysql.userテーブルとmysql.dbテーブルからユーザアクセスを完全に削除するために必要なものです。 'REVOKE'は、指定されたパーミッションのためにこれらのテーブルの一方または両方のパーミッションフラグを 'N'にトグルするだけですが、ユーザはそのままです。そして、はい、あなたは 'REVOKE'ステートメントの後で' FLUSH PRIVILEGES'を必要としますが、 'DROP'オペレーションの後ではありません。 –

    12

    副題として、revoke usage on *.* from 'phpmyadmin'@'localhost';が機能しない理由は非常に簡単です。USAGEと呼ばれる許可はありません。

    The actual named grants are in the MySQL Documentation

    USAGE

    グラントは、論理グラントです。どうやって? 'phpmyadmin' @ 'localhost'のエントリはmysql.userです。ここでuser = '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.userからの行の除去はREVOKE USAGEは文字通り実行することができないにもかかわらず、REVOKE USAGEを実行している構成します。

    関連する問題