ほとんどの場合において、ユーザとパスワードの設定には
GRANT
を使用します。以下の方法は上級ユーザ対象です。
See 項4.4.1. 「GRANT
および REVOKE
の構文」。
前のセクションでは、例を用いて重要な原則を示しました。INSERT
または UPDATE
ステートメントを使用して空白でないパスワードを保存する際には、PASSWORD()
関数を使用して暗号化しなければならないということです。これは、user
テーブルがパスワードを平文テキストではなく、暗号化された形式で保存するためです。たとえば、この原則を忘れて、以下のようにパスワードを設定してしまったとします。
shell>mysql -u root mysql
mysql>INSERT INTO user (Host,User,Password)
->VALUES('%','jeffrey','biscuit');
mysql>FLUSH PRIVILEGES;
この場合、平文テキストの
'biscuit'
が、パスワードとして
user
テーブルに保存されます。ユーザ
jeffrey
がこのパスワードを使用してサーバに接続しようとすると、mysql
クライアントは PASSWORD()
でそれを暗号化し、暗号化されたパスワードと、サーバから取得したランダム番号に基づいて認証ベクトルを生成し、それをサーバに送信します。
サーバは user
テーブルの
password
値(この場合、暗号化されていない
'biscuit'
)を使用して同じ計算を実行し、結果を比較します。
比較は失敗し、サーバは接続を拒否します。
shell> mysql -u jeffrey -pbiscuit test
Access denied
user
テーブルにパスワードを挿入するとき、パスワードは暗号化しておく必要があります。したがって、INSERT
ステートメントを以下のように指定します。
mysql>INSERT INTO user (Host,User,Password)
->VALUES('%','jeffrey',PASSWORD('biscuit'));
SET PASSWORD
ステートメントを使用するときも、PASSWORD()
関数を使用する必要があります。
mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');
GRANT ... IDENTIFIED BY
ステートメントまたは mysqladmin
password
コマンドを使用してパスワードを設定する場合、PASSWORD()
関数は必要ありません。両方ともパスワードを暗号化するので、以下のようにパスワードを
'biscuit'
と指定します。
mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';
または
shell> mysqladmin -u jeffrey password biscuit
注意:
PASSWORD()
は、Unix
のパスワード暗号化とは異なります。 See
項4.4.2. 「MySQL のユーザ名とパスワード」。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.