◀ 2.

MySQL ALTER USER の使い方|パスワード変更・アカウントロック

▶

ALTER USERは、選択した既存アカウントの認証・期限・ロック・接続要件などを変更します。パスワード変更、権限の付与、接続の強制終了は同じ操作ではありません。User/Hostと変更前の条件、利用中のアプリを確認してから計画してください。

対象アカウント・変更する属性・新規接続と既存接続への影響を分ける図

何を変え、何を変えない操作か

指定変更と限界
IDENTIFIED BY / WITH資格情報/認証方式を変更。アプリ側の保管値やドライバが自動更新されるわけではない
ACCOUNT LOCK新規ログインを拒否。既存セッションの強制終了ではない
PASSWORD EXPIRE系今の失効と将来の期限を区別。NEVERだけで手動失効は解除されない
REQUIRE SSL / X509アカウント側の接続要件。クライアント側のサーバー検証は別途設定する
DEFAULT ROLE付与済みロールの有効化。権限を新たに付与するGRANTとは別

変更前に対象アカウントを読み取り確認する

次はMySQL 8.0で、既に許可された管理接続がある場合の読み取り例です。認証に失敗した接続からは実行できません。接続先とCURRENT_USER()、rootのHost/認証方式/ロック/期限を照合します。アカウント情報をそのまま公開せず、authentication_stringやパスワードを出力しません。

SELECT VERSION() AS server_version, CURRENT_USER() AS authenticated_account;

-- Authorized administrator only. Do not publish account information.
SELECT User, Host, plugin, account_locked, password_expired, password_lifetime
FROM mysql.user
WHERE User = 'root'
ORDER BY Host;

接続できることと必要な管理権限があることは別です。管理者用とアプリ実行用を分け、情報確認のためにGRANT ALLや外部接続範囲の拡大を行わないでください。

変更後は新規接続と既存接続を分けて確認し、必要な権限/アプリ処理を検証します。接続拒否の原因と関係ない属性をまとめて変えないでください。

一次資料: MySQL 8.0の公式復旧手順、8.4の公式復旧手順、ALTER USERの対象と要件、現在も有効なSET PASSWORD構文、mysql_native_passwordの状態、検証コンポーネントの導入条件。

ロックの範囲は公式アカウントロック説明も参照してください。

この記事の要点
  • ALTER USER は MySQL でユーザー定義を変更する SQL。パスワード、認証方式、期限、ロック状態などを変えられる
  • パスワード変更: ALTER USER 'user'@'host' IDENTIFIED BY 'newpw'; — 5.7.6 以降の推奨方式
  • 認証プラグイン変更: IDENTIFIED WITH caching_sha2_password 等で方式を切り替え
  • アカウントロック: ACCOUNT LOCK / ACCOUNT UNLOCK で新規ログインの拒否・許可。既存セッションの強制終了とは別
  • パスワード期限: PASSWORD EXPIRE INTERVAL 90 DAY で 90 日ごとに変更を強制
  • リソース制限: WITH MAX_QUERIES_PER_HOUR / MAX_CONNECTIONS_PER_HOUR で過剰利用を抑制

ALTER USER とは

ALTER USER は MySQL で既存ユーザーの属性を変更する SQL 文です。パスワード、認証方式、アカウントロック、パスワード期限ポリシー、接続制限など、ユーザーに関するほぼ全ての設定を変更できます。

MySQL 8.0ではALTER USERとSET PASSWORDが有効です。SET PASSWORD全体を非推奨とは扱わず、旧PASSWORD()関数の構文と区別します。mysql.userの直接UPDATEはアカウント管理手順にしません。

基本構文

下は属性の概略で、角括弧や日本語を含む実行用SQLではありません。各オプションをすべて使う意味でもありません。以下の全変更例も架空のアカウント/秘密値で、まとめて実行しないでください。

ALTER USER 'ユーザー名'@'ホスト'
    [IDENTIFIED [WITH 認証プラグイン] BY 'パスワード']
    [REQUIRE 接続要件]
    [WITH リソース制限]
    [PASSWORD EXPIRE 期限指定]
    [ACCOUNT LOCK | ACCOUNT UNLOCK];

1. パスワードを変更する

下は資格情報の変更です。公開例のパスワードを使用せず、User/Host・必要権限・認証方式・秘密情報保管先/アプリへの反映を確認します。通常変更ではFLUSH PRIVILEGESは不要です。USER()を使う自己更新は専用構文で、通常のUSER()の戻り値を無条件にアカウント名として流用する意味ではありません。

-- 別ユーザーのパスワードを変更 (要権限)
ALTER USER 'alice'@'localhost' IDENTIFIED BY 'NewP@ss1';

-- 現在ログイン中のユーザー自身のパスワード変更
ALTER USER USER() IDENTIFIED BY 'NewP@ss1';

-- 複数まとめて変更
ALTER USER
    'alice'@'localhost' IDENTIFIED BY 'newpw1',
    'bob'@'%'           IDENTIFIED BY 'newpw2';

2. 認証プラグインを変更する

MySQL 8.0の既定はcaching_sha2_passwordです。下のmysql_native_passwordへの変更と短いpwは旧例で、そのまま実行しません。古いドライバのために認証を弱めず、クライアント更新と対応認証/TLSを先に検証します。

-- caching_sha2_password に変更 (推奨)
ALTER USER 'alice'@'localhost'
    IDENTIFIED WITH caching_sha2_password BY 'StrongP@ss1';

-- 古いアプリ向けに mysql_native_password へ変更
ALTER USER 'legacy'@'localhost'
    IDENTIFIED WITH mysql_native_password BY 'pw';
プラグイン特徴
caching_sha2_passwordMySQL 8.0 既定。SHA-256 ベース。推奨
mysql_native_password8.0.34で非推奨、8.4で既定無効、9.0で削除。差し戻しを通常対処にしない
sha256_passwordSHA-256 だがキャッシュなし。実用上 caching_sha2 推奨
auth_socketOS のソケット認証。Linux ローカル運用に便利

3. アカウントのロック / アンロック

下は新規ログインの可否を変更します。既に接続済みのセッションは、この操作だけでは終了しません。ホストキャッシュによる1129やパスワード失効をACCOUNT UNLOCKですべて直せるわけでもありません。影響する既存接続の扱いは別に計画します。

-- ログイン不可にする (退職者対応など)
ALTER USER 'alice'@'localhost' ACCOUNT LOCK;

-- ロック解除
ALTER USER 'alice'@'localhost' ACCOUNT UNLOCK;

ロックはアカウント定義を残して新規ログインを拒否する操作で、監査履歴の自動保存や既存セッション停止まで保証するものではありません。DROP USERとの影響差を確認し、退職対応等も実際の権限/接続の失効計画に従います。

4. パスワード期限ポリシー

下は別々の方針の例で、順次実行すると後の設定が有効になります。NEVER/DEFAULT等の将来の自動期限と、手動の失効状態を区別し、エラー回避のための無期限化はしません。実際の復旧は期限切れの関連ページを参照します。

-- 即時期限切れにする (次回ログイン時に変更必須)
ALTER USER 'alice'@'localhost' PASSWORD EXPIRE;

-- 90 日ごとに変更を強制
ALTER USER 'alice'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;

-- 期限なし
ALTER USER 'alice'@'localhost' PASSWORD EXPIRE NEVER;

-- グローバル設定に従う
ALTER USER 'alice'@'localhost' PASSWORD EXPIRE DEFAULT;

5. パスワード履歴・再利用禁止 (MySQL 8.0+)

下の各条件は対象版と認証方式を確認し、ローテーション/秘密情報管理の手順へ組み込みます。PASSWORD REQUIRE CURRENT等の要件も実際の権限・更新構文で照合し、変更失敗を理由に弱めないでください。

-- 過去 5 件と同じパスワードは使えない
ALTER USER 'alice'@'localhost' PASSWORD HISTORY 5;

-- 過去 365 日以内に使ったパスワードは使えない
ALTER USER 'alice'@'localhost' PASSWORD REUSE INTERVAL 365 DAY;

-- パスワード変更時に現行パスワードを必須にする
ALTER USER 'alice'@'localhost' PASSWORD REQUIRE CURRENT;

6. SSL / TLS の強制

下のREQUIRE NONEは接続保護を外す旧変更例で、トラブル対処として実行しません。 REQUIRE SSLは暗号化、X509はクライアント証明書の要件です。これだけでクライアント側のサーバー証明書/ホスト名検証が設定されたことにはなりません。接続元と証明書管理も別途確認します。

-- SSL 接続を必須にする
ALTER USER 'alice'@'%' REQUIRE SSL;

-- 認証局つき SSL
ALTER USER 'alice'@'%' REQUIRE X509;

-- 暗号化要件をリセット
ALTER USER 'alice'@'%' REQUIRE NONE;

7. リソース制限

下の数値は設計済みの推奨値ではありません。対象アカウントの実利用・既存の上限・必要な接続数を測定して計画します。接続制限の変更をSQL高速化や障害原因の修正と同一視しません。

ALTER USER 'alice'@'%'
    WITH
        MAX_QUERIES_PER_HOUR     1000
        MAX_UPDATES_PER_HOUR     100
        MAX_CONNECTIONS_PER_HOUR 50
        MAX_USER_CONNECTIONS     5;
項目意味
MAX_QUERIES_PER_HOUR1 時間あたり実行可能なクエリ総数
MAX_UPDATES_PER_HOUR1 時間あたり実行可能な更新クエリ数
MAX_CONNECTIONS_PER_HOUR1 時間あたり可能な接続回数
MAX_USER_CONNECTIONS同時接続数の上限

8. ロール (MySQL 8.0+) のデフォルト指定

DEFAULT ROLEは既に付与されたロールの既定有効化を指定するもので、GRANTの代わりではありません。下のapp_read/app_writeは事前の存在と付与が前提です。ALLも存在する全ロールの一括付与ではなく、そのアカウントへ付与済みのロールが対象です。

-- ログイン時に自動的にアクティブになるロール
ALTER USER 'alice'@'localhost' DEFAULT ROLE 'app_read', 'app_write';

-- 全ロールをデフォルト
ALTER USER 'alice'@'localhost' DEFAULT ROLE ALL;

変更内容の確認

-- ユーザー一覧
SELECT user, host, account_locked, password_expired, password_lifetime
FROM mysql.user;

-- GRANT 状態(権限つき)
SHOW GRANTS FOR 'alice'@'localhost';

-- 自分自身
SHOW GRANTS;

FAQ

Q: SET PASSWORD と ALTER USER どちらを使う?
A: MySQL 8.0ではどちらも対応構文です。認証方式と要件に合わせて選び、SET PASSWORD全体と廃止されたPASSWORD()関数の旧例を混同しません。

Q: 自分のパスワードを変えたい
A: 自分の更新用にALTER USER USER() IDENTIFIED BYという専用構文があります。実際の認証アカウントと権限/ポリシーを確認し、公開例の秘密値は使いません。

Q: パスワードを忘れた
A: 承認済みの管理/回復経路を先に確認します。権限チェック無効化は全権限のローカル接続を許し得る危険な別作業で、一律の通常手順にはしません。

Q: Oracle の ALTER USER と違う点
A: MySQLのアカウントはUser/Hostの組です。Hostを省略すると%になり得るため「必須で省略不可」とは違いますが、対象の取り違えや接続範囲の誤解を避けるため明示して照合します。Oracleの構文/属性をそのまま流用しません。

関連手順を選ぶ

rootパスワードの通常変更と復旧、初期資格情報の確認から目的に合うものを選べます。エラーはMySQLエラー一覧の子ページから選んでください。

子ページ

子ページはありません

同階層のページ
  1. ユーザー作成
  2. ユーザー定義変更
  3. ユーザー削除

最近更新/作成されたページ