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 などでバックアップを取ってください。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲