パスワードの設定には、コマンドラインで mysqladmin を使用します。
shell> mysqladmin -u user_name
-h host_name
password "newpwd
"
このコマンドでリセットするパスワードのアカウントは、user
テーブル
エントリにあるアカウントのことです。これは、User
カラムの user_name
と、Host
カラムにある接続クライアント
ホストとに一致します。
SET PASSWORD
ステートメントを発行して、アカウントにパスワードを設定する方法もあります。
mysql> SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('biscuit');
root
など、mysql
データベースへのアクセス権限があるユーザだけが、別のユーザのパスワードを変更することができます。匿名ユーザでなければ、自分のパスワードを
FOR
節を省略することでパスワードの変更ができます。
mysql> SET PASSWORD = PASSWORD('biscuit');
アカウントにある現在の権限に影響を与えることなく、アカウントのパスワードを設定するには、GRANT
USAGE
ステートメントをグローバル
レベル (ON *.*
) で使用します。
mysql> GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'biscuit';
ここに前述した方法が、パスワードを設定するときの推奨のやり方ですが、user
テーブルを直接に変更する方法を取ることも可能です。
新規アカウント作成のパスワード指定方法
(Password
カラムに値を指定)
shell>mysql -u root mysql
mysql>INSERT INTO user (Host,User,Password)
->VALUES('%','jeffrey',PASSWORD('biscuit'));
mysql>FLUSH PRIVILEGES;
既存アカウントのパスワード変更方法
(UPDATE
で Password
カラム値のセット)
shell>mysql -u root mysql
mysql>UPDATE user SET Password = PASSWORD('bagel')
->WHERE Host = '%' AND User = 'francis';
mysql>FLUSH PRIVILEGES;
SET
PASSWORD
、INSERT
、UPDATE
などで、空白ではないパスワードのアカウントに設定する場合は、PASSWORD()
関数で暗号化します。user
テーブルは、平分テキストではなく、暗号化形式でパスワードを保存するため、PASSWORD()
の使用は不可欠です。これを忘れた場合には、パスワードを次のように設定します。
shell>mysql -u root mysql
mysql>INSERT INTO user (Host,User,Password)
->VALUES('%','jeffrey','biscuit');
mysql>FLUSH PRIVILEGES;
ここでは、'biscuit'
というリテラルの値 を user
テーブルにパスワードとして保存するという結果になっています。暗号化した値ではありません。ここで肝心なことは、jeffrey
がそのパスワードでサーバ接続を試行したときに、そのパスワードの値が暗号化されるということです。つまり、user
テーブルにある値とは異なった文字列で照会されるということです。'biscuit'
というリテラルの文字列で保存しているところへ、暗号化された別の文字列で入ってくるため、サーバは接続を拒否します。
shell> mysql -u jeffrey -pbiscuit test
Access denied
パスワード設定を GRANT ... IDENTIFIED
BY
ステートメントまたは mysqladmin
password
コマンドで行なうときは、どちらのスクリプトでもパスワードの暗号化が自動的に行なわれます。そのため、この場合には、PASSWORD()
関数は不要です。
注意:PASSWORD()
の暗号化は、Unix
のパスワード暗号化とは別物です。項4.8.1. 「MySQL ユーザ名とパスワード」
を参照してください。.