これはMySQL特権の通常のセットですか?


9

ローカルのテストワンプセットアップでphpmyadminを使用すると、タイトルのほとんどの状態と同様に、user = ANY、password = NOのようにマークされた3人のユーザーがいます。

USER | HOST    | Password | Global Priv | Grant
-----+---------+----------+-------------+------
Any  | %       | No       | USAGE       | No
Any  | Local   | No       | USAGE       | No
Any  | Domain  | No       | USAGE       | No
-----+---------+----------+-------------+------

3人のどのユーザーも、どのテーブルに対しても特定の特権を持っているわけではないため、ユーザーは多くのことを実行できないようです。これは、他のユーザーグループに属さない「すべての」ユーザーには特権がないことを明示的に述べるための、ある種の一般的なセキュリティ対策ですか?


mysqlには公開されていないデフォルトの権限が付属しているため、これは実際には非常に良い質問です。+1 !!!
RolandoMySQLDBA 2009

回答:


6

実際には、これら3つのユーザーアカウントは実際には非常に危険です。それらはデータベースのテストに非常に大きな脅威をもたらします。

残念ながら、mysqlにはテストデータベースへのフルアクセスが付属しています。どうすればそれらを見つけることができますか?

このクエリを実行します。

 SELECT user,host,db from mysql.db;

mysqlをインストールすると、「test」という名前のデータベース、または最初の5文字が「test_」のデータベースへのフルアクセスを提供する2つの行が表示されます。

なぜこれが問題なのですか?

次のコマンドを実行してみてください:

$ mysql -u'' -Dtest

パスワードなしでテストデータベースに接続します。

次に、テーブルを作成して行をロードします。

CREATE TABLE mytable (a int);
INSERT INTO mytable VALUES (1);

はい、大したことです。このテーブルのサイズを30倍にしていただけませんか???

INSERT INTO mytable SELECT * FROM mytable;
INSERT INTO mytable SELECT * FROM mytable;
... (30 times)
INSERT INTO mytable SELECT * FROM mytable;

あなたは何を手に入れますか?1,073,741,824行のテーブル。簡単に、4GB +。

任意のサイズの任意のテーブルを作成することを想像してください。テストデータベースに一連のテーブルを作成し、自由に自由にアクセスしてみませんか?

このような状況で実行できる最善のことは、次のクエリを実行することです。

DELETE FROM mysql.db;

mysqlを再起動します。その後、これらの3つのアカウントは適切に機能しなくなります。

試してみる !!!

UPDATE 2011-09-12 10:00 EDT

この削除:

DELETE FROM mysql.db;
FLUSH PRIVILEGES;

初期インストールに必要なものです。ただし、ユーザーがすでに確立されている場合は、代わりにこれを実行できます。

DELETE FROM mysql.db WHERE db IN ('test','test_%');
FLUSH PRIVILEGES;

これにより、特定の2つのDB権限が削除されます。

回答で述べたように、3つの権限はテストデータベースにとって非常に危険です。このDELETEを実行すると、データベースをテストするための完全な権限を持つアカウントが無効になります。


説明ありがとうございます。DELETEFROM mysql.dbは、これら3人のユーザーから他の一部を削除しますか?これら以外のデータ/権限を削除したくない3
Chris

@Chris-コメントに対処するために3時間前に回答を更新しました。
RolandoMySQLDBA 2009

-1

これらの匿名アカウントを保持することの危険性については、すでに十分に説明されています。

このマニュアルには、「最初のMySQLアカウントを保護する」ために実行する手順の包括的なチェックリストが記載されています。

特に、「匿名アカウントのパスワードの割り当て」セクションでは、これらのアカウントを削除することを推奨しています。

また、「テストデータベースの保護」の章では、次のことをアドバイスしています。

デフォルトでは、mysql.dbテーブルには、任意のユーザーがtestデータベースおよび名前がで始まる他のデータベースへのアクセスを許可する行が含まれていますtest_。(...)これは、そのようなデータベースは、特権を持たないアカウントでも使用できることを意味します。テストデータベースへのユーザーアクセスを削除する場合は、次のようにします。

mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%';
mysql> FLUSH PRIVILEGES;

(...)上記の変更により、グローバルデータベース権限、またはテストデータベースに対して明示的に付与された権限を持つユーザーのみがそれを使用できます。

特に、Windows以外のシステムでは、mysql_secure_installationスクリプトを実行することをお勧めします。私が信じているWindowsインストーラーはいくつかのインストールプロファイルを提供します。それらのいくつかは、安全でない設定を自動的に無効にします。そうでない場合は、チェックリストを手動で実行する必要があります。

WAMPなどのサードパーティのインストーラには注意が必要です。MySQLの公式マニュアルに示されているデフォルトの権限は、これらのカスタム(「マニュアルの範囲外」など)のインストールに常に適用されるとは限りません。もちろん、本番サーバーでは、WAMPのインストールなどは絶対に避けてください。 。


なぜこの回答への反対票か。
user12345
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.