Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  最初の MySQL アカウントのセキュリティー設定

2.10.2 最初の MySQL アカウントのセキュリティー設定

MySQL インストールプロセスの一環として、付与テーブルを含む mysql データベースを設定します。

  • Windows 配布は事前に初期化された付与テーブルを含みます。

  • Unix では、mysql_install_db プログラムが付与テーブルに移入します。一部のインストール方法ではこのプログラムは自動的に実行されます。その他では、手動でそれを実行する必要があります。詳細については、セクション2.10.1「Unix 類似システムでのインストール後の手順」を参照してください。

mysql.user 付与テーブルは、初期 MySQL ユーザーアカウントとそのアクセス権限を定義します。

  • いくつかのアカウントはユーザー名が root です。これらは、すべての権限を持ち、どのようなことも可能なスーパーユーザーアカウントです。root アカウントの初期パスワードは空です。そのため、だれでもパスワードなしで root として MySQL Server に接続して、すべての権限を付与されることができます。

    • Windows では、ローカルホストからの接続のみを許可する root アカウントが作成されます。ホスト名 localhost、IP アドレス 127.0.0.1、または IPv6 アドレス ::1 を指定することで接続できます。ユーザーが、インストール中に「Enable root access from remote machines」オプションを選択した場合は、Windows インストーラは、に荷のホストからの接続を許可する別の root アカウントを作成します。

    • Unix では、各 root アカウントはローカルホストからの接続を許可します。ホスト名 localhost、IP アドレス 127.0.0.1、または IPv6 アドレス ::1、あるいは実際のホスト名または IP アドレスを指定することで接続できます。

    ホスト 127.0.0.1 への接続を試みると、通常 localhost アカウントに解決します。ただし、サーバーが --skip-name-resolve オプションを使用して稼働されている場合は、これは失敗します。そのため、その場合には 127.0.0.1 アカウントが便利です。::1 アカウントは IPv6 接続に使用されます。

  • 一部のアカウントは匿名ユーザー用です。これらは空のユーザー名を持ちます。匿名のアカウントにはパスワードがないため、だれでもそのアカウントを使用して MySQL サーバーに接続できます。

    • Windows では、ローカルホストからの接続を許可する匿名アカウントが 1 つあります。localhost のホスト名を指定することで接続できます。

    • Unix では、各匿名アカウントはローカルホストからの接続を許可します。アカウントの 1 つのホスト名 localhost を指定するか、その他のアカウントの実際のホスト名または IP アドレスを指定することで接続できます。

mysql.user テーブルにどのアカウントが存在するか、それらのパスワードが空かどうかを表示するには、次のステートメントを使用します。

mysql> SELECT User, Host, Password FROM mysql.user;
+------+--------------------+----------+
| User | Host               | Password |
+------+--------------------+----------+
| root | localhost          |          |
| root | myhost.example.com |          |
| root | 127.0.0.1          |          |
| root | ::1                |          |
|      | localhost          |          |
|      | myhost.example.com |          |
+------+--------------------+----------+

この出力は、いくつかの root アカウントと匿名ユーザーアカウントがあり、いずれにもパスワードがないことを示しています。使用しているシステムでは出力が異なる場合がありますが、空のパスワードのアカウントが存在するということは、何らかの対処をするまで MySQL インストールが保護されていないということを意味します。

  • それぞれの MySQL root アカウントにパスワードを割り当てるべきです。

  • クライアントが匿名ユーザーとしてパスワードなしで接続することを防ぐには、それぞれの匿名のアカウントにパスワードを割り当てるか、あるいはそれらのアカウントを削除するとよいでしょう。

さらに、mysql.db テーブルにはすべてのアカウントが test データベースおよび test_ で始まる名前を持つその他のデータベースにアクセスすることを許可する行が含まれます。これは、デフォルトの匿名アカウントのように、そうでなければ特別な権限を持たないアカウントにも当てはまります。これはテスト用には便利ですが、本番サーバーでは推奨されません。データベースへのアクセスを、その目的のために明示的に許可を付与されたアカウントのみに制限する場合は、管理者は mysql.db テーブルのこれらの行を削除するとよいでしょう。

次の手順では、初期 MySQL アカウントにパスワードを設定する方法を、最初に root アカウント、次に匿名アカウントの順で説明します。この手順では、匿名アクセスをまったく許可しない場合に、匿名アカウントを削除する方法にも触れ、データベースをテストするための寛容なアクセスを削除する方法も説明します。例の中の newpwd は使用するパスワードに置き換えてください。host_name はサーバーのホスト名に置き換えます。この名前は、前述の SELECT ステートメントの出力から判断できます。示された出力では、host_namemyhost.example.com です。

注記

パスワード設定の詳細は、セクション6.3.5「アカウントパスワードの割り当て」を参照してください。root パスワードを設定したあとでそれを忘れた場合は、セクションB.5.4.1「root のパスワードをリセットする方法」を参照してください。

追加のセットアップやテストを実行する間、パスワードを指定する必要を避けるために、パスワードの設定を遅らせたい場合があります。しかし、インストールを本番用に使用する前にはそれらを忘れずに設定してください。

追加のアカウントをセットアップするには、セクション6.3.2「ユーザーアカウントの追加」を参照してください。

root アカウントのパスワードの割り当て

root アカウントのパスワードは、いくつかの方法でセットできます。次の説明では 3 種類の方法を示します。

  • SET PASSWORD ステートメントを使用する

  • UPDATE ステートメントを使用する

  • mysqladmin コマンド行のクライアントプログラムを使用する

SET PASSWORD を使用してパスワードを割り当てるには、サーバーに root として接続し、SET PASSWORD ステートメントを、mysql.user テーブルにリストされている各 root アカウントに対して発行します。PASSWORD() 関数を使用してパスワードを忘れずに暗号化します。

Windows では、次のようにします。

shell> mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'::1' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd');

mysql.user テーブルに、ホスト値が % である root アカウントがない場合は、最後のステートメントは不要です。

Unix では、次のようにします。

shell> mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'::1' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'host_name' = PASSWORD('newpwd');

UPDATE を使用して mysql.user テーブルを直接変更することで、すべての root アカウントにパスワードを割り当てる単独のステートメントを使用することもできます。この方法はどのプラットフォームでも機能します。

shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd')
    ->     WHERE User = 'root';
mysql> FLUSH PRIVILEGES;

FLUSH ステートメントにより、サーバーが付与テーブルを再度読み取ります。それがないと、パスワードの変更はサーバーを再起動するまでサーバーには認識されません。

パスワードを root アカウントに mysqladmin を使用して割り当てるには、次のコマンドを実行します。

shell> mysqladmin -u root password "newpwd"
shell> mysqladmin -u root -h host_name password "newpwd"

これらのコマンドは Windows および Unix の両方に該当します。パスワードを囲む二重引用符は必ずしも常に必要なわけではありませんが、パスワードにスペースその他のコマンドインタプリタにとって特殊な文字が含まれる場合は使用するべきです。

mysqladmin を使用して root アカウントのパスワードを設定する方法は、'root'@'127.0.0.1' or 'root'@'::1' アカウントでは機能しません。前述の SET PASSWORD の方法を使用します。

root の設定後は、root としてサーバーに接続するたびに適切なパスワードを提供する必要があります。たとえば、mysqladmin でサーバーをシャットダウンするには、次のコマンドを使用します。

shell> mysqladmin -u root -p shutdown
Enter password: (enter root password here)

匿名アカウントのパスワードの割り当て

次の手順の mysql コマンドは、前述の手順を使用して root のパスワードを設定し、サーバーへの接続時にそのパスワードを指定しなければならないことを前提として、-p オプションを含んでいます。

匿名アカウントにパスワードを割り当てるには、サーバーに root として接続してから、SET PASSWORD または UPDATE を使用します。PASSWORD() 関数を使用してパスワードを忘れずに暗号化します。

Windows で SET PASSWORD を使用するには、次のようにします。

shell> mysql -u root -p
Enter password: (enter root password here)
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');

Unix で SET PASSWORD を使用するには、次のようにします。

shell> mysql -u root -p
Enter password: (enter root password here)
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR ''@'host_name' = PASSWORD('newpwd');

単独の UPDATE ステートメントで匿名ユーザーアカウントのパスワードを設定するには、次のようにします (任意のプラットフォームで)。

shell> mysql -u root -p
Enter password: (enter root password here)
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd')
    ->     WHERE User = '';
mysql> FLUSH PRIVILEGES;

FLUSH ステートメントにより、サーバーが付与テーブルを再度読み取ります。それがないと、パスワードの変更はサーバーを再起動するまでサーバーには認識されません。

匿名アカウントの削除

匿名アカウントにパスワードを割り当てるのではなく、削除する場合は、Windows では次のようにします。

shell> mysql -u root -p
Enter password: (enter root password here)
mysql> DROP USER ''@'localhost';

Unix では、次のように匿名アカウントを削除します。

shell> mysql -u root -p
Enter password: (enter root password here)
mysql> DROP USER ''@'localhost';
mysql> DROP USER ''@'host_name';

テストデータベースのセキュリティー設定

デフォルトでは、mysql.db テーブルには任意のユーザーによる test データベースおよび test_ で始まる名前を持つその他のデータベースへのアクセスを許可する行が含まれます。(これらの行は空の User カラム値を持ち、アクセスチェックのために任意のユーザー名に一致します。)これは、そうでなければ何の権限も持たないアカウントでさえも、このようなデータベースを使用できることを意味します。テストデータベースへの任意のユーザーによるアクセスを削除する場合は、次のようにします。

shell> mysql -u root -p
Enter password: (enter root password here)
mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%';
mysql> FLUSH PRIVILEGES;

FLUSH ステートメントにより、サーバーが付与テーブルを再度読み取ります。それがないと、権限の変更はサーバーを再起動するまでサーバーには認識されません。

前述の変更により、グローバルデータベース権限、または test データベース用に明示的に付与された権限を持つユーザーのみがそれを使用できます。ただし、データベースがまったく不要である場合は、ドロップします。

mysql> DROP DATABASE test;
注記

Windows では、MySQL Installer (セクション2.3.3「MySQL Installer を使用した MySQL の Microsoft Windows へのインストール」を参照してください) でのインストール中に、このセクションで説明した手順を実行することもできます。すべてのプラットフォームで、MySQL 配布には、MySQL インストールをセキュアにするプロセスの大部分を自動化するコマンド行ユーティリティー mysql_secure_installation が含まれます。また、MySQL Workbench はすべてのプラットフォームで使用可能で、ユーザーアカウントの管理機能も提供します (第26章「MySQL Workbenchを参照してください)。


User Comments
  Posted by Brian Pete on July 2, 2014
Checkout http://howtolamp.com/lamp/mysql/5.6/securing/ for securing MySQL accounts
Sign Up Login You must be logged in to post a comment.