無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 4 データベース管理 :: 4.8 MySQL ユーザ アカウント管理 :: 4.8.5 パスワードの設定
« 4.8.4 ユーザ リソースの制限

4.8.6 パスワードのセキュリティ »
Section Navigation      [Toggle]
  • 4.8 MySQL ユーザ アカウント管理
  • 4.8.1 MySQL ユーザ名とパスワード
  • 4.8.2 MySQL への新規ユーザの追加
  • 4.8.3 MySQL ユーザの削除
  • 4.8.4 ユーザ リソースの制限
  • 4.8.5 パスワードの設定
  • 4.8.6 パスワードのセキュリティ
  • 4.8.7 接続安全

4.8.5. パスワードの設定

パスワードの設定には、コマンドラインで 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 ユーザ名とパスワード」 を参照してください。.

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.