2026年9月9日
2026年9月9日
mysql_secure_installationの使い方|MySQL初期設定の質問の意味と答え方
mysql_secure_installation は、MySQL をインストールした直後の状態を安全側に整えるための、MySQL に付属するプログラムです。対話形式でいくつかの質問に答えると、root アカウントのパスワード設定、外部から接続できる root アカウントの削除、匿名ユーザーの削除、test データベースの削除を行います。この記事の内容は、2026年11月時点で MySQL 8.4 のリファレンスマニュアルと Ubuntu の不具合報告(Launchpad)で確認したものです。
実行する前に
MySQL サーバーが起動していることを確認してから実行します。Ubuntu の場合のサービス名は mysql です(ディストリビューションによっては mysqld)。
sudo systemctl status mysql
sudo mysql_secure_installation
実行すると、手元のサーバー(localhost)に接続して質問が始まります。--host や --port、--socket で接続先を変えられます。--password(-p)を付けても無視され、パスワードは対話で入力します。
質問の意味と答え方
質問の文はバージョンやディストリビューションで少し違いますが、内容は次のとおりです。MySQL 8.0 以降では、「y」か「Y」以外のキーを押すと「いいえ」になります。
1. パスワード検証コンポーネント(VALIDATE PASSWORD)を使うか
パスワードの強さを検査する validate_password コンポーネントを有効にするかを聞かれます。有効にすると、このあと設定するパスワードと、以後 CREATE USER などで設定するパスワードが検査されます。
有効にすると、検査の強さ(ポリシー)を選びます。
| 番号 | ポリシー | 検査の内容 |
|---|---|---|
| 0 | LOW | 長さだけ |
| 1 | MEDIUM | 長さ、数字、大文字と小文字、記号 |
| 2 | STRONG | MEDIUM の内容に加え、辞書ファイルとの照合 |
長さの初期値は8文字です。STRONG の辞書照合は、validate_password.dictionary_file に辞書ファイルを設定したときだけ行われます。
有効にすると、アプリケーションや管理ツールが作る短いパスワードが拒否されることがあります。WordPress 用のパスワードは長いランダムな文字列にすれば、MEDIUM でも問題なく通ります。
2. root のパスワードを設定する
root アカウントのパスワードを入力し、確認のためもう一度入力します。
Ubuntu や Debian のパッケージで入れた MySQL 8.0 では、root はパスワードではなく auth_socket(OS の root ユーザーでログインしているかで認証する方式)になっています。この状態でパスワードを設定しようとすると、「SET PASSWORD has no significance」というエラーが出て質問が繰り返される不具合がありました。Ubuntu 20.04・22.04 などでは修正版(mysql-server 8.0.33 の Ubuntu 修正版以降)が配布され、パスワード設定の手順は飛ばされて、auth_socket を使っている旨のメッセージが表示されます。パッケージを最新に更新してから実行してください。
auth_socket のままなら、MySQL の root には sudo mysql でしか入れないので、パスワードを設定しなくても外部から root で入られることはありません。管理ツールなどからパスワードで root に入る必要がある場合だけ、次のように認証方式を変えます。
-- sudo mysql で入ってから実行する
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '長いランダムなパスワード';
3. 匿名ユーザーを削除するか(Remove anonymous users?)
ユーザー名が空のアカウント(匿名ユーザー)は、誰でもユーザー名なしで接続できてしまうので、「はい」で削除します。インストール方法によっては最初から匿名ユーザーが無いこともありますが、その場合も「はい」で問題ありません。
4. root のリモートログインを禁止するか(Disallow root login remotely?)
localhost 以外から接続できる root アカウントを削除します。「はい」を選びます。リモートから管理する必要がある場合も、root ではなく用途を限った別のユーザーを作るのが安全です。
5. test データベースを削除するか(Remove test database and access to it?)
誰でも使える test データベースと、名前が test_ で始まるデータベースへのアクセス権を削除します。使っていなければ「はい」を選びます。
6. 権限表を読み込み直すか(Reload privilege tables now?)
ここまでの変更をすぐに反映するため、「はい」を選びます。
結果を確認する
sudo mysql で入り、残っているアカウントを確認します。
SELECT user, host, plugin FROM mysql.user;
SHOW DATABASES;
ユーザー名が空の行と、host が % の root が無く、データベースの一覧に test が無ければ反映されています。
WordPress 用のデータベースとユーザーを作る
WordPress から root で接続するのは避け、WordPress 専用のデータベースとユーザーを作ります。
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY '長いランダムなパスワード';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
作ったデータベース名・ユーザー名・パスワードを、WordPress の wp-config.php の DB_NAME、DB_USER、DB_PASSWORD に書きます。Web サーバーとデータベースが同じサーバーなら、DB_HOST は localhost のままです。
接続できないときの確認方法は「MySQLのAccess deniedエラーの原因と対処」も参考にしてください。
MariaDB の場合
MariaDB では同じ役割のプログラムが mariadb-secure-installation という名前です(以前は mysql_secure_installation という名前で、今も古い名前で実行できます)。root のパスワード変更、匿名ユーザーの削除、root のリモートログインの禁止、test データベースの削除、権限表の読み込み直しを聞かれる点は同じです。MariaDB では root に unix_socket 認証が使われるのが標準のため、多くの場合 root のパスワードは設定しなくても sudo mariadb で管理できます。
注意点
mysql_secure_installationは初期状態を整えるためのもので、実行後にファイアウォールで 3306 番ポートを外部に開けない、使わないユーザーを作らない、といった運用は別に必要です。--use-defaultを付けると、質問に答えずに既定の内容で実行します。自動構築の手順に組み込む場合に使います。- 設定を変える前に、既存のデータがあるサーバーでは
mysqldumpなどでバックアップを取ってください。