MySQL アカウントをサーバ接続が可能なユーザからのユーザ名とクライアント ホスト、またはホスト、と定義します。アカウントにはパスワードがあります。MySQL で使用するユーザ名とパスワードは、オペレーティング システムで使用するものとは特徴的な違いがあります。
MySQL
で認証目的に使用するユーザ名は、Windows や
Unix などで使用しているユーザ名
(ログイン名) とは関係がありません。Unix
の場合は、MySQL
クライアントがデフォルトで、現在使用している
Unix のユーザ名を MySQL
のユーザ名としてログインを行なうことがありますが、これは利便性との兼ね合わせです。クライアント
プログラムで -u
または
--user
のオプションでユーザ名を指定することができるため、デフォルト値は簡単に書き換えることができます。しかし、これは、誰でも適当なユーザ名を使用してサーバ接続を試行できるという意味でもあるため、すべての
MySQL
アカウントにパスワードをつけることで、データベースの安全を確保します。つまり、パスワードなしのアカウントのユーザ名を指定できる者であれば、サーバへの接続に成功します。
MySQL ユーザ名には、最大 16
文字まで使用できます。これは、MySQL
のサーバとクライアントでハードコード
(決め打ち) しています。mysql
データベースのテーブル定義を変更するなどして、この文字制限を回避しないでください。
注意:mysql
データベースのテーブルは、MySQL AB
による指示がない限り、絶対に改造しないでください。(項4.5.4. 「mysql_upgrade — MySQL アップグレードのテーブル チェック」
を参照のこと。) MySQL のシステム
テーブルの再定義を試行すると、予期しない結果を招く恐れがあります。
オペレーティング システムのユーザ名は、MySQL ユーザ名とは完全に無関係です。最大文字数も異なります。たとえば、 Unix ユーザ名の最大文字数は、8 文字です。
MySQL パスワードは、オペレーティング システムのログイン パスワードとは別物です。Windows や Unix のマシンにログインするパスワード、およびそのマシンにある MySQL サーバへのアクセスに使用するパスワードとは一切無関係です。
MySQL では、Unix
ログインプロセスのアルゴリズムとは別のアルゴリズムで、パスワードを暗号化する。MySQL
のパスワード暗号化には、PASSWORD()
SQL 関数、Unix
のパスワード暗号化には、ENCRYPT()
SQL 関数です。 PASSWORD()
関数と ENCRYPT()
関数の詳細については、項11.10.2. 「暗号化関数と圧縮関数」
を参照してください。注意: バージョン 4.1
以降のMySQL
は、接続時のパスワード保護に、より高度な認証方式を採用しています。これは、TCP/IP
パケットの盗聴や、mysql
データベースのキャプチャが行なわれた場合でも、セキュリティを保持できるようになっています。初期バージョンでは、パスワードは
user
テーブルに暗号化して保存していますが、暗号化パスワード値に関する知識は
MySQL サーバ接続に通用します。
MySQL
をインストールするとき用に、権限テーブルには初期設定のアカウント
セットを投入しています。そのアカウントには名前とアクセス権限があります。パスワードの割り与て方法に関しては、項2.10.3. 「最初の MySQL アカウントの確保」
を参照してください。その後、セットアップを行い、GRANT
や REVOKE
などのステートメントで
MySQL
アカウントの変更や削除などを行ないます。詳細は、項12.5.1. 「アカウント管理ステートメント」
を参照してください。
コマンドライン クライアントで MySQL サーバに接続するときは、ユーザ名とパスワードを使用するアカウントに指定します。
shell> mysql --user=monty --password=guess
db_name
短文のオプションを使用すると、コマンドは次のようになります。
shell> mysql -u monty -pguess
db_name
-p
オプションと後続のパスワード値の間には、空白はありません。項4.7.4. 「MySQL サーバへの接続」
を参照してください。
前述のコマンドには、コマンドラインでパスワードを入れています。これは、セキュリティ面でのリスクを伴います。詳細は
項4.8.6. 「パスワードのセキュリティ」
を参照してください。この問題を解決するには、パスワード値を入れずに、--password
または -p
オプションを指定します。
shell>mysql --user=monty --password
shell>db_name
mysql -u monty -p
db_name
オプションにパスワード値がない場合、クライアント
プログラムがプロンプトを出力し、パスワードの入力を待機します。ここの例示では、パスワード
オプションに空白 (スペース)
を入れて区切っているため、db_name
はパスワードとは解釈しません。
オペレーティング システムによっては、MySQL がパスワードを呼び出すときに使用するライブラリ ルーチンで、入力するパスワードは最大 8 文字であることを自動的に制限します。これは、システム ライブラリでの問題で、MySQL とは関係ありません。MySQL では内部的にパスワードの文字数を制限することはありません。この問題を回避するには、MySQL パスワードを変更しますが、そのときは、8 文字よりも少ない文字数にするか、またはオプション ファイルにパスワードを入力します。