手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 MariaDB データベースサーバー構築

目次に戻る

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 は不要にできると考えました。

  1. root アカウントのパスワードをセットすることができます。
  2. ローカルホストの外からアクセス可能な root アカウントを削除することができます。
  3. 匿名ユーザーアカウントを削除することができます。
  4. 匿名ユーザーが既定でアクセス可能な 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 データベース存在しない。
MariaDB の初期値

起動状態の確認

本稿では設定変更は行なっていないため、再起動は不要です。

myadmin@ubuntu:~$ systemctl status mariadb.service

目次に戻る

Ubuntu 22.04 MariaDB データベースサーバー構築

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る