MySQL 8.0 インストール後に必ず設定する 3の項目

MySQL
MySQLをインストールした後に何を設定すればいいの?

この疑問に回答します。

私はCentOSを利用してApacheをインストールしています。OSの違いによりパッケージ管理のコマンドが違いますが、Apacheには直接関係ありません。Debian系のディストリビューションを利用している場合は、パッケージコマンドを読み替えてください。

MySQLパッケージのインストール

epel リポジトリ

MySQL本体とは直接関係ありませんが、よく利用するパッケージを多く含んでいるので忘れずにリポジトリを追加しておきましょう。

# dnf install epel-release

 

MySQLのインストール

MySQLをインストールします。

# dnf install mysql-server

あとはMySQLサービスの起動と、自動起動設定を行います。

# systemctl start mysqld
# systemctl enable mysqld

 

MySQLで行う必要最低限の設定

MySQLの初期設定

mysql_secure_installationコマンドを利用してMySQLの初期設定を行います。

mysql_secure_installationコマンドで実施出来る設定です。

  • VALIDATE PASSWORD プラグインのインストール(パスワードポリシー)
  • root ユーザーパスワードの設定
  • anonymous ユーザーの削除
  • リモート接続から root ユーザーでログイン禁止
  • testデータベースの削除

MySQL 5.7 から VALIDATE PASSWORD プラグインが導入されました。 導入するとユーザーのパスワードとして設定できる文字列に一定の制限をかけることができます。

パスワードの設定ポリシーは3段階のレベルから設定できます。

  • LOW Length >= 8
  • MEDIUM Length >= 8, numeric, mixed case, and special characters
  • STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

MySQL の初期設定は anonymous という匿名用ユーザーが設定してあります。 セキュリティリスクになるので利用しないユーザーを削除します。

リモートホストから root ユーザーでアクセスすることを禁止します。リモートホストから MySQL にアクセスすることを許可する場合、専用のユーザーを作成して許可させます。

MySQL の初期設定には、 test 用のデータベースをあります。不要なので削除します。

# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
                                            #  VALIDATE PASSWORD プラグイン の利用確認
Press y|Y for Yes, any other key for No: y ← 「y」を押下

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0 ← 「0」を入力 セキュリティレベルを設定
                               今回は「LOW」を選択
Please set the password for root here.

New password: ← rootの「新パスワード」を入力

Re-enter new password: ← 再度「パスワード」を入力

Estimated strength of the password: 50
Do you wish to continue with the password provided?
(Press y|Y for Yes, any other key for No) : y ← 「y」を押下
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
                                                                   # 不要なanonymousユーザーを削除
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y ← 「y」を押下
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
                                     # rootのリモート接続を不許可に設定
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y ← 「y」を押下
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

                                     # 不要なtestデータベースを削除
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y ← 「y」を押下
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y ← 「y」を押下
Success.

 

これでデータベースがクリーンな状態になりました。

パスワード検証ポリシーの確認

MySQLにログインします。

# mysql -u root -p

 

専用ユーザーを作成しようとしたら、エラーが表示され作成できない場合があります。

mysql> create user 'ユーザー名'@'localhost' identified by 'パスワード';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

 

MySQLに設定されているパスワードの検証ポリシーを確認します。

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM | ← 設定がMEDIUM
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.01 sec)

 

確認したところ、validate_password.policyが「MEDIUM」になっています。

MEDIUMのパスワードは、8文字以上、数字・大/小文字混合、特殊文字 を必要としています。

私が利用する環境では条件が厳しすぎるのでLOWに変更します。

# パスワードポリシーをLOWに変更
mysql> set global validate_password.policy=LOW;
Query OK, 0 rows affected (0.00 sec)

# 設定変更の確認
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password.check_user_name    | ON    |
| validate_password.dictionary_file    |       |
| validate_password.length             | 8     |
| validate_password.mixed_case_count   | 1     |
| validate_password.number_count       | 1     |
| validate_password.policy             | LOW   | ← 設定がLOW
| validate_password.special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)

 

設定ファイル(mysql-server.cnf)の設定

ハードウェアのスペックやアクセス数によって各種パラメーターを変更することで、MySQLを最適化することができます。いわゆるチューニングって呼ばれる内容です。今回は、チューニングには触れません。

必ず実施する最低限のみに限定して説明します。

CentOS の設定ファイルは「/etc/my.cnf.d/mysql-server.cnf」 です。[mysqld] 内に設定を記載します。

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid

character-set-server = utf8 ← 設定の追加
default_password_lifetime = 0 ← 設定の追加

MySQLのデータベースが利用する文字コードを UTF-8 に明示的に指定します。

MySQL 5.7 からユーザーのパスワードの有効期限が360日になりました。Webサービスを提供する場合には、このポリシーが合わないので有効期限を無効化させます。

default_password_lifetime の値を「0」にすることで有効期限が無効化されます。

あとはMySQLサービスの再起動を行います。

# systemctl restart mysqld

 

 

以上、「MySQLインストール後に必ず設定する 3の項目」という記事でした。