2.

MySQL ALTER USER 完全ガイド(パスワード変更 / 認証方式 / 期限 / アカウントロック / リソース制限)

編集
この記事の要点
  • 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 5.7.6 以降はパスワード変更も ALTER USER が公式推奨で、古い SET PASSWORDUPDATE mysql.user は非推奨です。

基本構文

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

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

-- 別ユーザーのパスワードを変更 (要権限)
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 が必要な場合があります。

-- 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_password5.7 互換。古いクライアント向け。MySQL 8.4 で削除予定
sha256_passwordSHA-256 だがキャッシュなし。実用上 caching_sha2 推奨
auth_socketOS のソケット認証。Linux ローカル運用に便利

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

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

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

削除(DROP USER)すると即座に消えますが、ロックなら履歴と権限は残ったままログインだけ無効化できます。一時退職、長期休暇、調査中の措置などに有用。

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

-- 即時期限切れにする (次回ログイン時に変更必須)
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+)

-- 過去 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 の強制

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

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

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

7. リソース制限

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+) のデフォルト指定

-- ログイン時に自動的にアクティブになるロール
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 PASSWORDALTER USER どちらを使う?
A: MySQL 5.7.6 以降は必ず ALTER USER。SET PASSWORD は非推奨。

Q: 自分のパスワードを変えたい
A: ALTER USER USER() IDENTIFIED BY '新パス';。USER() は今ログイン中のユーザー。

Q: パスワードを忘れた
A: --skip-grant-tables で起動 → SQL でリセット → 通常モードで再起動。本番では危険なので慎重に。

Q: Oracle の ALTER USER と違う点
A: 構文は似ているが、MySQL はホスト指定が必須 ('user'@'host')、Oracle はユーザー名のみ。デフォルトテーブルスペースなど Oracle 固有項目はない。

編集
Post Share
子ページ

子ページはありません

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

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