パスワードの設定には、コマンドラインで 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 mysqlmysql>INSERT INTO user (Host,User,Password)->VALUES('%','jeffrey',PASSWORD('biscuit'));mysql>FLUSH PRIVILEGES;
既存アカウントのパスワード変更方法
(UPDATE で Password
カラム値のセット)
shell>mysql -u root mysqlmysql>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 mysqlmysql>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 ユーザ名とパスワード」
を参照してください。.
