MySQL
インストールプロセスの一環でグラントテーブルを含む
mysql
データベースを設定します。
Windows の配布には自動的にインストールされる初期化されたグラントテーブルが含まれています。
Unix では、グラントテーブルは mysql_install_db プログラムで設定されます。インストールメソッドがお客様に代わってこのプログラムを実行します。その他は手動でそれを実行します。詳細については、項2.11.2. 「Unix のインストール後のプロシージャー」をご参照ください。
グラントテーブルは最初の MySQL ユーザーアカウントおよびそれらのアクセス権限を定義します。これらのアカウントは以下のように設定されます。
ユーザー名 root
を持つアカウントが作成されます。通常とな異なる機能を持つスーパーユーザーのアカウントがあります。最初の
root
アカウントパスワードは空なので、だれでも
root
として
パスワードなし で MySQL
サーバーに接続することができ、すべての権限を付与されます。
Windows では、1 つの
root
アカウントが作成されます。このアカウントではローカルホストのみから接続できます。Windows
のインストーラではオプションでアカウントを作成してインストール中にユーザーが「Enable
root access from remote
machines」オプションを選択したときのみどのホストからでも接続できます。
Unix では、両方の
root
アカウントはローカルホストの接続用です。接続は、いずれかのアカウントの
localhost
のホスト名を指定するか、もう一方の実際のホスト名または
IP
番号を指定して、ローカルホストから行う必要があります。
2 つの匿名ユーザーアカウントが作成されます。各アカウントのユーザー名は空です。匿名のアカウントにはパスワードがないため、だれでもそのアカウントを使用して MySQL サーバーに接続できます。
Windows では、1
つの匿名アカウントはローカルホストの接続用です。そのアカウントにグローバル権限はありません。(MySQL
5.1.16 より前の場合は、ちょうど
root
アカウントと同じように、そのアカウントにはすべてのグローバル権限があります。)
もう 1
つのアカウントはすべてのホストの接続用で
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
ステートメントで使用します。
匿名アカウントの削除
匿名のアカウントを削除するには、以下のようにします。
shell>mysql -u root
mysql>DROP USER '';
DROP
ステートメントは
Windows および Unix の両方に適用されます。Windows
で root
と同じ権限を持つ匿名のアカウントのみを削除するには、以下のようにします。
shell>mysql -u root
mysql>DROP USER ''@'localhost';
そのアカウントは匿名のアクセスが可能ですべての権限を持っているので、それを削除するとセキュリティーが改善されます。
root
アカウントのパスワードの割り当て
root
アカウントへのパスワードの割り当てには幾つかの方法があります。以下の説明では
3 種類の方法を示します。
SET PASSWORD
ステートメントを使用する
mysqladmin コマンドラインのクライアントプログラムを使用する
UPDATE
ステートメントを使用する
SET PASSWORD
を使用してパスワードを割り当てるには、サーバーに
root
として接続して
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
をサーバーのホスト名で置き換えます。これは匿名アカウントのパスワードを割り当てたときに使用したホスト名と同じものです。
user
テーブルに
'root'
および
'127.0.0.1'
という
User
および
Host
値を持つアカウントが含まれる場合は、追加の
SET PASSWORD
ステートメントを使用してそのアカウントのパスワードを設定します。
mysql> SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('newpwd
');
パスワードを root
アカウントに mysqladmin
を使用して割り当てるには、以下のコマンドを実行します。
shell>mysqladmin -u root password "
shell>newpwd
"mysqladmin -u root -h
host_name
password "newpwd
"
これらのコマンドは Windows および Unix
の両方に適用されます。2
番目のコマンドで、host_name
をサーバーのホスト名で置き換えます。パスワードの二重引用符は常に必要とはかぎりません、パスワードにスペースあるいは使用しているコマンドインタープリタに特殊なほかの文字を使用している場合には使用する必要があります。
root
アカウントパスワードを設定する
mysqladmin
メソッドは、'root'@'127.0.0.1'
アカウントのパスワードを設定しません。これを行うには、前に示したように
SET PASSWORD
を使用します。
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
パスワードの設定後にそれを忘れた場合は、How to Reset the Root Password
にその再設定の手順が記載されています。
新たにアカウントを追加するには、GRANT
ステートメントを使用します。その手順は、Adding User Accounts
を参照してください。