MySQL サーバーに接続するクライアントに必要な証明書には、パスワードを含めることができます。 このセクションでは、MySQL アカウントにパスワードを割り当てる方法について説明します。
MySQL は、mysql
システムデータベースの user
テーブルに資格証明を格納します。 パスワードを割り当てたり変更したりする操作は、CREATE USER
権限を持つユーザー、または mysql
データベースに対する権限 (新しいアカウントを作成するための INSERT
権限、既存のアカウントを変更するための UPDATE
権限) にのみ許可されます。 read_only
システム変数が有効になっている場合、CREATE USER
や ALTER USER
などのアカウント変更ステートメントを使用するには、CONNECTION_ADMIN
権限 (または非推奨の SUPER
権限) も必要です。
ここでは、最も一般的なパスワード割当てステートメントの構文のみをまとめています。 その他の可能性の詳細は、セクション13.7.1.3「CREATE USER ステートメント」、セクション13.7.1.1「ALTER USER ステートメント」 および セクション13.7.1.10「SET PASSWORD ステートメント」 を参照してください。
MySQL は、プラグインを使用してクライアント認証を実行します。セクション6.2.17「プラガブル認証」 を参照してください。 パスワード割当てステートメントでは、アカウントに関連付けられた認証プラグインは、指定されたクリアテキストパスワードに必要なハッシュを実行します。 これにより、MySQL では、パスワードを mysql.user
システムテーブルに格納する前に不明瞭化できます。 ここで説明するステートメントでは、MySQL は指定されたパスワードを自動的にハッシュします。 CREATE USER
および ALTER USER
には、ハッシュ値を文字どおりに指定できる構文もあります。 詳細は、これらのステートメントの説明を参照してください。
新しいアカウントの作成時にパスワードを割り当てるには、CREATE USER
を使用して IDENTIFIED BY
句を含めます:
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
CREATE USER
は、アカウント認証プラグインを指定するための構文もサポートしています。 セクション13.7.1.3「CREATE USER ステートメント」を参照してください。
既存のアカウントのパスワードを割り当てたり変更したりするには、IDENTIFIED BY
句を含む ALTER USER
ステートメントを使用します:
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
匿名ユーザーとして接続していない場合は、自分のアカウントに文字どおりに名前を付けずに自分のパスワードを変更できます:
ALTER USER USER() IDENTIFIED BY 'password';
コマンドラインからアカウントパスワードを変更するには、mysqladmin コマンドを使用します:
mysqladmin -u user_name -h host_name password "password"
このコマンドでパスワードを設定するアカウントは、User
カラムに user_name
が、Host
カラムにクライアントホスト接続元が一致する mysql.user
システムテーブルの行を持つアカウントです。
mysqladmin を使用してパスワードを設定する場合は、セキュアでないとみなす必要があります。 一部のシステムでは、使用しているパスワードが、コマンド行を表示するためにほかのユーザーによって起動できる ps などのシステムステータスプログラムによって表示可能になります。 MySQL クライアントは通常、クライアントの初期化シーケンス中にコマンド行パスワード引数をゼロで上書きします。 ただし、まだ値が表示可能な短い期間があります。 また、一部のシステムではこの上書きの方法には効果がなく、パスワードは ps から表示可能になったままになります。 (SystemV Unix システムおよびおそらくほかのシステムでもこの問題の影響があります。)
MySQL レプリケーションを使用している場合は、現在、CHANGE REPLICATION SOURCE TO
ステートメント (MySQL 8.0.23 の場合) または CHANGE MASTER TO
ステートメント (MySQL 8.0.23 の場合) の一部としてレプリカによって使用されるパスワードの長さが事実上 32 文字に制限されていることに注意してください。パスワードが長い場合は、余分な文字が切り捨てられます。 これは通常、MySQL Server によって課される制限によるものではなく、MySQL レプリケーションに固有の問題です。