MySQL インストール プロセスの一環でグラント
テーブルを含む mysql
データベースを設定します。
Windows のディストリビューションには自動的にインストールされる初期化されたグラント テーブルが含まれています。
Unix では、グラント テーブルは mysql_install_db プログラムで設定されます。インストール メソッドがお客様に代わってこのプログラムを実行します。その他は手動でそれを実行します。詳細に関しては 項2.10.2. 「Unix のインストール後のプロシージャ」 を参照して下さい。
グラント テーブルは最初の MySQL ユーザーアカウントおよびそれらのアクセス権限を定義します。これらのアカウントは以下のように設定されます。
ユーザー名 root
を持つアカウントが作成されます。通常とな異なる機能を持つスーパーユーザーのアカウントがあります。最初の
root
アカウントパスワードは空ですので、誰でも
MySQL サーバに root
として —
パスワードなし —
で接続できすべての権限を使用できます。
Windows では、一つの root
アカウントが作成されます。このアカウントではローカル
ホストのみから接続できます。Windows
のインストーラではオプションでアカウントを作成してインストール中にユーザーが
Enable root access from remote
machines
オプションを選択したときのみどのホストからでも接続できます。
Unix では、両方の root
アカウントはローカル
ホストの接続用です。接続はローカルホストから
localhost
のホスト名をアカウントの一つに指定するか、あるいは実際のホスト名または他への
IP 番号を指定する必要があります。
2 つの匿名アカウントをそれぞれユーザー名なして作成できます。匿名のアカウントにはパスワードがないため、誰でもそのアカウントを使用して MySQL サーバに接続できます。
Windows
では、一つの匿名アカウントはローカル
ホストの接続用です。そのアカウントにはすべての権限が
root
アカウントと同様にあります。もう一つのアカウントはすべてのホストの接続用で
test
データベースおよび
test
で始まる名前の他のデータベースに対してすべての権限を持っています。
Unix
では、両方の匿名アカウントはローカル
ホストの接続用です。接続はローカル
ホストから localhost
のホスト名をアカウントの一つあるいは実際のホスト名または他への
IP
番号を指定する必要があります。これらのアカウントは
test
データベースおよび
test_
で始まる名前のすべてのデータベースに対してすべての権限を持っています。.
上述のごとく、最初のアカウントにはどれもパスワードがありません。このことは MySQL のインストールはそれらを設定するまでは保護されていないということを意味します。
クライアントが匿名ユーザーでパスワードなしで接続しないようにするには、それぞれの匿名のアカウントにパスワードを割り当てるか、あるいはそれらのアカウントを削除する必要があります。
それぞれの MySQL root
アカウントにパスワードを割り当てる必要があります。
以下の手順では最初の MySQL
アカウントのパスワードの設定方法、最初に匿名のアカウント、次に
root
アカウントへの設定方法を説明します。例の「newpwd
」
を実際に使用するパスワードに置き換えます。以下の説明では匿名のアクセスを希望しない場合の匿名のアカウントの削除の仕方についても説明します。
パスワードを新たな設定やテストをしている間に指定する必要がないようにそれらの作業が終わるまでパスワードの設定を望まない場合もあります。しかし、量産用(実稼動)のインストールを使用する前にはそれらを忘れずに設定してください。
匿名アカウントのパスワードの割り当て
匿名アカウントにパスワードを割り当てるには、サーバに
root
として接続して SET
PASSWORD
あるいは UPDATE
のいずれかを使用します。どちらの場合も、PASSWORD()
機能を使用してパスワードを暗号化します。
Windows の SET PASSWORD
を使用するには、以下のようにします。
shell>mysql -u root
mysql>SET PASSWORD FOR ''@'localhost' = PASSWORD('
mysql>newpwd
');SET PASSWORD FOR ''@'%' = PASSWORD('
newpwd
');
Unix で SET PASSWORD
を使用するには、以下のようにします。
shell>mysql -u root
mysql>SET PASSWORD FOR ''@'localhost' = PASSWORD('
mysql>newpwd
');SET PASSWORD FOR ''@'
host_name
' = PASSWORD('newpwd
');
2 番目の SET PASSWORD
ステートメントでは、host_name
をサーバのホスト名で置き換えます。これは
user
テーブルの root
に非-localhost
レコードの
Host
カラムで指定された名前です。ホスト名が分からない場合には、SET
PASSWORD
を使用する前に以下のステートメントを発行します。
mysql> SELECT Host, User FROM mysql.user;
User
カラムで root
を持つレコードおよび Host
カラムで localhost
以外の何かを探します。次にその
Host
値を 2 番目の SET
PASSWORD
ステートメントで使用します。
匿名のアカウントにパスワードを割り当てる別の方法は
UPDATE
を使用して
user
テーブルを直接変更することです。サーバに
root
として接続して値を適切な
user
のテーブル レコードの
Password
カラムに割り当てる
UPDATE
ステートメントを発行します。その手順は
Windows も Unix も同じです。以下の
UPDATE
ステートメントは両方の匿名アカウントに同時にパスワードを割り当てます。
shell>mysql -u root
mysql>UPDATE mysql.user SET Password = PASSWORD('
->newpwd
')WHERE User = '';
mysql>FLUSH PRIVILEGES;
UPDATE
を使用して
user
テーブルのパスワードを直接更新したら、サーバに
FLUSH PRIVILEGES
でグラント
テーブルを再度読み込むようにサーバに指定する必要があります。さもなければ、その変更はサーバを再起動するまで認識されません。
匿名アカウントの削除
匿名のアカウントを削除するには、以下のようにします。
shell>mysql -u root
mysql>DELETE FROM mysql.user WHERE User = '';
mysql>FLUSH PRIVILEGES;
DELETE
ステートメントは Windows
および Unix 双方に適用されます。Windows で
root
と同じ権限を持つ匿名のアカウントのみを削除するには、以下のようにします。
shell>mysql -u root
mysql>DELETE FROM mysql.user WHERE Host='localhost' AND User='';
mysql>FLUSH PRIVILEGES;
そのアカウントは匿名のアクセスが可能ですべての権限を持っているので、それを削除するとセキュリティが改善されます。
root
アカウントのパスワードの割り当て
root
アカウントへのパスワードの割り当てには幾つかの方法があります。以下の説明では
3 種類の方法を示します。
SET PASSWORD
ステートメントを使用する
mysqladmin コマンドラインのクライアント プログラムを使用する
UPDATE
ステートメントを使用する
SET PASSWORD
を使用してパスワードを割り当てるには、サーバに
root
として接続して 2 つの
SET PASSWORD
ステートメントを発行します。PASSWORD()
機能を使用してパスワードを忘れずに暗号化します。
Windows では、以下のようにします。
shell>mysql -u root
mysql>SET PASSWORD FOR 'root'@'localhost' = PASSWORD('
mysql>newpwd
');SET PASSWORD FOR 'root'@'%' = PASSWORD('
newpwd
');
Unix では、以下のようにします。
shell>mysql -u root
mysql>SET PASSWORD FOR 'root'@'localhost' = PASSWORD('
mysql>newpwd
');SET PASSWORD FOR 'root'@'
host_name
' = PASSWORD('newpwd
');
2 番目の SET PASSWORD
ステートメントでは、host_name
をサーバのホスト名で置き換えます。これは匿名アカウントのパスワードを割り当てた時に使用したホスト名と同じものです。
パスワードを root
アカウントに
mysqladmin
を使用して割り当てるには、以下のコマンドを実行します。
shell>mysqladmin -u root password "
shell>newpwd
"mysqladmin -u root -h
host_name
password "newpwd
"
これらのコマンドは Windows および Unix
の両方に適用されます。.2
番目のコマンドで、host_name
をサーバのホスト名で置き換えます。パスワードの二重引用符は常に必要とは限りません、パスワードにスペースあるいは使用しているコマンド
インタープリタに特殊な他の文字を使用している場合には使用する必要があります。
UPDATE
を使用して
user
テーブルを直接変更することもできます。以下の
UPDATE
ステートメントは両方の
root
アカウントに同時にパスワードを割り当てます。
shell>mysql -u root
mysql>UPDATE mysql.user SET Password = PASSWORD('
->newpwd
')WHERE User = 'root';
mysql>FLUSH PRIVILEGES;
UPDATE
ステートメントは Windows
および Unix の両方に適用されます。
パスワードを設定すると、サーバに接続するたびに適切なパスワードを入力する必要があります。例えば、mysqladmin を使用してサーバをシャットダウンするには以下のコマンドを使用します。
shell>mysqladmin -u root -p shutdown
Enter password:(enter root password here)
注:パスワード設定後に
root
パスワードを忘れた場合には、項B.1.4.1. 「How to Reset the Root Password」、がその再設定を行います。
新たにアカウントを追加するには、GRANT
ステートメントを使用します。その手順は、項4.8.2. 「MySQL への新規ユーザの追加」
を参照してください。