MariaDB(MySQL)初期設定時のセキュリティとutf8mb4化の手順

MariaDB(MySQL)初期設定時のセキュリティとutf8mb4化の手順 サーバー

MariaDB(MySQL)の初期設定時の「mysql_secure_installation」によるセキュリティ対策と、スマホの絵文字対策のために文字セット(charset)を「utf8mb4」へ変更する際の手順です。

MariaDB(MySQL)をインストールしてそのまま何もしないで利用するとセキュリティ的に問題があります。

文字セット(charset)も、スマホの絵文字対応の為に初期設定時にutf8mb4に変更しておくと後々何かと捗りますので初めからutf8mb4にしておきましょう。

※動作確認環境
CentOS 7.6
MariaDB 10.3

基本的な説明

MariaDBとは

MariaDB(マリアディービー)とは、MySQLから派生したオープンソースのRDBMS(リレーショナルデータベースシステム)です。基本的にMySQLの派生版なのでMySQLとの互換性がありますが、パフォーマンスがMariaDBのほうが上回っており、CentOS 7からはMySQLに変わってMariaDBが標準になっています。

utf8mb4とは

utf8mb4とはMySQLの文字セット(charset)の一種で、文字を1〜4バイトで表現します。

MySQLでの通常のutf8は文字を1〜3バイトで表現するのですが、utf8だとスマホなどの絵文字で使われる一部の4バイト文字が正常に識別出来ずに違う絵文字になってしまうという問題があり、通称「寿司ビール問題」などと呼ばれた経緯があります。

MariaDBのインストール

※ここから先はMariaDBの新規インストールの説明となります。既に利用しているMariaDBをアップグレードする場合は以下のページをご覧ください。

MariaDBのリポジトリ設定

最新のMariaDBのリポジトリをcurlで追加します。

curlを使わずに手動でMariaDBのリポジトリ(.repoファイル)を追加・作成する場合は MariaDB公式サイト にて各ディストリビューションごとのリポジトリ情報を確認できます。
まず、念のために追加するリポジトリの内容を確認します。

問題無いのでリポジトリを追加します。

追加されたリポジトリを確認します。

[mariadb-main]

name = MariaDB Server baseurl = https://downloads.mariadb.com/MariaDB/mariadb-10.3/yum/rhel/$releasever/$basearch gpgkey = file:///etc/pki/rpm-gpg/MariaDB-Server-GPG-KEY gpgcheck = 1 enabled = 1

[mariadb-maxscale]

# To use the latest stable release of MaxScale, use “latest” as the version # To use the latest beta (or stable if no current beta) release of MaxScale, use “beta” as the version name = MariaDB MaxScale baseurl = https://downloads.mariadb.com/MaxScale/2.3/centos/$releasever/$basearch gpgkey = file:///etc/pki/rpm-gpg/MariaDB-MaxScale-GPG-KEY gpgcheck = 1 enabled = 1

[mariadb-tools]

name = MariaDB Tools baseurl = https://downloads.mariadb.com/Tools/rhel/$releasever/$basearch gpgkey = file:///etc/pki/rpm-gpg/MariaDB-Enterprise-GPG-KEY gpgcheck = 1 enabled = 1

正常に最新のMariaDBのリポジトリが追加されました。

MariaDBインストール

yumでMariaDBをインストールします。

ちゃんとMariaDBがインストールされたか確認をします。

OKです。最新のMariaDBのインストールが完了しました。

MariaDBの初期設定

MariaDBの起動及び自動起動設定

MariaDBを起動し、自動起動もオンにします。

mysql_secure_installationの実行

MariaDBの初期設定時に不要なユーザーや不要なデータベースを削除してセキュリティを高める「mysql_secure_installation」を実行します。

mysql_secure_installationは対話式で進んでいきますので一つづつ解説していきます。

rootパスワードがまだ未設定なので何も入力せずEnterキーを押します。

rootパスワードを新規に設定するので「Y」と記入してからEnterキーを押します。

rootパスワードを二度記入してEnterキーを押します。

匿名ユーザーを削除するか聞いてきますので「Y」と記入してからEnterキーを押します。

localhost以外からのrootアクセスを拒否するか聞いてきますので「Y」と記入してからEnterキーを押します。

test用のデータベースを削除するか聞いてくるので「Y」と記入してからEnterキーを押します。

特権テーブルをリロードしての今までの変更を今すぐ適用するか聞いてきますので「Y」と記入してからEnterキーを押します。

これでmysql_secure_installationは終了です。

不要なユーザーや不要なデータベースを削除してセキュリティが高まりました。

続いて「文字セット(charset)のutf8mb4化」を行います。

文字セット(charset)のutf8mb4化

現在のMariaDBの文字セット(charset)を確認

まず、現在のMariaDBの文字セット(charset)の状態を確認します。

「mysql -u root -p」でMariaDBにログインします。

show variables like 'char%';」と入力してEnterキーで現在の文字セット(charset)の状態を表示します。

「utf8」と「latin1」が混在しています。

show variables like 'coll%';」と入力してEnterキーで現在の照合順序(collation)の状態を表示します。

こちらも「utf8」と「latin1」が混在しています。

これらを「utf8mb4」に変更しますので、とりあえず「exit;EnterキーでMariaDBからログアウトします。

文字セット(charset)の変更

まず、デフォルトのMariaDBの設定ファイルをバックアップします。

次に、MariaDBの設定ファイル(server.cnf)をvi等で編集し、[mariadb]という行の下に下記の3行を追加して上書き保存します。

character-set-server = utf8mb4
[client-mariadb]
default-character-set = utf8mb4

[server]

# this is only for the mysqld standalone daemon

[mysqld]

# # * Galera-related settings #

[galera]

# Mandatory settings #wsrep_on=ON #wsrep_provider= #wsrep_cluster_address= #binlog_format=row #default_storage_engine=InnoDB #innodb_autoinc_lock_mode=2 # # Allow server to accept connections on all interfaces. # #bind-address=0.0.0.0 # # Optional setting #wsrep_slave_threads=1 #innodb_flush_log_at_trx_commit=0 # this is only for embedded server

[embedded]

# This group is only read by MariaDB servers, not by MySQL. # If you use the same .cnf file for MySQL and MariaDB, # you can put MariaDB-only options here

[mariadb]

character-set-server = utf8mb4 #■追加 [client-mariadb] #■追加 default-character-set = utf8mb4 #■追加 # This group is only read by MariaDB-10.3 servers. # If you use the same .cnf file for MariaDB of different versions, # use this group for options that older servers don’t understand

[mariadb-10.3]

MariaDB 10.3.12でのテストでは[client-mariadb]という行が無かったので追加していますが、他のバージョンで既に[client-mariadb]という行がある場合は、その下に「default-character-set = utf8mb4」を追加してください。

設定ファイル(server.cnf)の編集が完了したらMariaDBを再起動します。

文字セット(charset)が変更されたかの確認

MariaDBの文字セット(charset)がちゃんとutf8mb4に変更されているか、もう一度MariaDBにログインして「show variables like 'char%';」と「show variables like 'coll%';」で確認します。

OKです。ちゃんと変更されました。

「character_set_system」が「utf8」のままですがこれが正常です。

まとめ

昔は、MySQLの初期設定時に手動で不要なユーザー及びデータベースの削除を行ったり、手動でその他のセキュリティ設定をしていましたが、今は「mysql_secure_installation」で簡単にセキュアな初期設定が可能です。

文字セットのutf8mb4化も、運用中に後から変更する場合は何かと気を遣うので初めからやっておきましょう。

以上で解決です。

タイトルとURLをコピーしました