Contents
Overview
MariaDB を導入します。
前提条件
- こちらを参考に基本設定が完了していること。
インストール
MariaDB をインストールします。python3-pymysql は Ansible の mysql モジュールを実行する際に必要なパッケージです。Ansible から MariaDB を操作しない場合は不要です。
myadmin@ubuntu:~$ sudo apt -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install mariadb-server python3-pymysql
mysql_secure_installation
MariaDB や MySQL のよくある導入手順を調べると、ほぼ mysql_secure_installation を実施していますが、これはインタラクティブ形式のため Ansible 等の自動構築ツールと相性が良くありませんし、これの実行が本当に必要であるか疑問もありました。
MariaDB の公式サイトによると mysql_secure_installation の機能は下記となっています。mysql_secure_installation は不要にできると考えました。
- root アカウントのパスワードをセットすることができます。
- ローカルホストの外からアクセス可能な root アカウントを削除することができます。
- 匿名ユーザーアカウントを削除することができます。
- 匿名ユーザーが既定でアクセス可能な test データベースを削除することができます。
この内容に基づいて、MariaDB インストール直後の状態がどうなっているかを確認し、mysql_secure_installation の内容が既に適用されているようであれば、改めての実行は不要と考えて良いと思います。
初期状態の確認
mysql_secure_installation が本当に必要か確認していきます。
MariaDB にログイン
MariaDB にログインします。root アカウントは UNIX ソケットを使用したログインが必要となっており、sudo で実行すると Linux の root がユーザー名として使用されます。パスワード入力は不要です。
myadmin@ubuntu:~$ sudo mariadb
ユーザー一覧
ユーザーの一覧を確認します。デフォルトでは localhost からのアクセスを許可されたシステム用ユーザーだけが存在しています。匿名ユーザーは存在していません。
MariaDB [(none)]> select user,host,password from mysql.user;
+-------------+-----------+----------+
| User | Host | Password |
+-------------+-----------+----------+
| mariadb.sys | localhost | |
| root | localhost | invalid |
| mysql | localhost | invalid |
+-------------+-----------+----------+
3 rows in set (0.001 sec)
root@localhost の権限
root@localhost の権限を確認します。VIA mysql_native_password USING 'invalid' OR unix_socket WITH GRANT OPTION
と出力されています。公式サイトによると、まず、unix_socket 認証プラグインでの認証を試行し、それに失敗した場合、mysql_native_password 認証プラグインを使用するとあります。mysql_native_password 認証プラグインについては、デフォルトでは無効なパスワードが設定されており、明示的にパスワードを設定しないと認証できません。
MariaDB [(none)]> show grants for root@localhost;
+-----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost |
+-----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA mysql_native_password USING 'invalid' OR unix_socket WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION |
+-----------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)
このため、デフォルトの状態では、root アカウントに関して UNIX ソケット経由でのアクセスしか許可しておらず、ローカルコンソール上でしか root アカウントでの操作が不可となります。同じく公式サイトには「パスワードを安全に保つための最良の方法は、そもそもパスワードを持たないことです。」とも記載があります。
念の為、root@localhost ログインを試行すると以下のようにログインできません。
myadmin@ubuntu:~$ mariadb -h 127.0.0.1 -u root
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
myadmin@ubuntu:~$ mariadb -h 127.0.0.1 -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
データベースの確認
データベースを確認します。システム用のデータベースのみが存在しており、test データベースは存在していません。
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.000 sec)
mysql_secure_installation の必要性の判断
これまでの確認内容をまとめると以下のようになります。結果として mysql_secure_installation の実行は不要であることが分かります。
項目 | デフォルト値 |
---|---|
root アカウントのパスワード | root アカウントは UNIX ソケット経由でしかアクセス不可。パスワードは無効な値が設定されており、リモート (localhost) での認証は不可。公式サイトでも root パスワードを設定しないことを推奨している。 |
ローカルホストの外からアクセス可能な root アカウント | localhost 以外に接続を許可しているユーザーは存在しない。 |
匿名ユーザーアカウント | 存在しない。 |
匿名ユーザーが既定でアクセス可能な test データベース | 存在しない。 |
起動状態の確認
本稿では設定変更は行なっていないため、再起動は不要です。
myadmin@ubuntu:~$ systemctl status mariadb.service