年末ですが、MySQL パスワードは安全ですか?

年末ですが、MySQL パスワードは安全ですか?

序文:

年末です。データベースを検査する時期ではないでしょうか?一般的に、検査では、パスワードの複雑さの設定や、パスワードが定期的に変更されているかどうかなど、パスワードのセキュリティの問題について検討されます。特にセキュリティ評価を実施する場合、評価機関は暗号化セキュリティ戦略を必要とします。実際、MySQL システム自体はパスワードの複雑さと自動有効期限ポリシーを設定できますが、ほとんど使用されず、ほとんどの学生は詳細を理解していません。この記事では、データベース アカウントのパスワードの複雑さと自動有効期限ポリシーを設定する方法について説明します。

1. パスワードの複雑さのポリシー設定

MySQL システムには、パスワードの強度を検証できる validate_password プラグインが付属しています。指定された強度を満たさないパスワードは設定できません。 MySQL 5.7 および 8.0 では、このプラグインがデフォルトで有効になっていないようです。これにより、123、123456 などのパスワードを自由に設定できるようになります。ルートからパスワードの強度を規制したい場合は、このプラグインを有効にします。このプラグインを使用してパスワードの複雑さのポリシーを設定する方法を見てみましょう。

1) このプラグインがインストールされているかどうかを確認する

このプラグインがインストールされているかどうかを確認するには、MySQL コマンドラインを入力して show plugins を使用するか、validate_password 関連のパラメータを確認します。関連するパラメータがない場合、このプラグインはインストールされていないことを意味します

# インストール前に確認してください。空の場合は、このプラグインがインストールされていないことを意味します。mysql> show variables like 'validate%';
空のセット (0.00 秒)

2)validate_passwordプラグインをインストールする

# このプラグインは INSTALL PLUGIN コマンドでインストールできます # ファイル名の拡張子はプラットフォームごとに異なります。Unix および Unix ライクなシステムの場合は .so、Windows の場合は .dll です
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.28 秒)

# validate_password 関連のパラメータを表示しますmysql> show variables like 'validate%';
+--------------------------------------+--------+
| 変数名 | 値 |
+--------------------------------------+--------+
| ユーザー名のパスワードチェックを検証 | オン |
| パスワード辞書ファイルを検証する | |
| パスワードの長さを検証 | 8 |
| パスワードの大文字と小文字が混在するカウントを検証 | 1 |
| パスワードの検証回数 | 1 |
| パスワードポリシーの検証 | 中 |
| パスワードの特殊文字数を検証 | 1 |
+--------------------------------------+--------+
セット内の行数は 7 です (0.00 秒)

3) パスワード強度関連パラメータの説明

validate_password プラグインをインストールすると、パスワードの強度に関連するいくつかの追加パラメータが追加されます。これらのパラメータは、文字通りの意味から簡単に理解できます。以下は、いくつかの重要なパラメータの簡単な説明です。

1. パスワードポリシーを検証する

パスワードポリシーを表します。デフォルトはMEDIUMです。設定可能な値は次のとおりです。

  • 0 または LOW は、パスワードの長さを満たす必要があります (パラメータvalidate_password_length で指定)
  • 1 または MEDIUM は LOW 戦略を満たし、少なくとも 1 つの数字、小文字、大文字、特殊文字を含める必要があります。
  • 2 または STRONG は MEDIUM ポリシーを満たし、パスワードは辞書ファイル内に存在できません。

2. パスワード辞書ファイルの検証

パスワードを構成するために使用される辞書ファイル。validate_password_policy が STRONG に設定されている場合、パスワード辞書ファイルを構成することができます。辞書ファイル内のパスワードは使用できません。

3. パスワードの長さを検証する

パスワードの最小文字数を設定するために使用します。デフォルト値は8です。

4. パスワードの大文字小文字の混在カウントを検証する

validate_password_policy が MEDIUM または STRONG に設定されている場合、パスワード内の小文字と大文字の数。デフォルトは 1 で、最小値は 0 です。デフォルトでは、少なくとも 1 つの小文字と 1 つの大文字が含まれます。

5. パスワードの検証

validate_password_policyがMEDIUMまたはSTRONGに設定されている場合、パスワードの最小桁数は、デフォルトは1、最小は0です。

6. パスワードの特殊文字数を検証する

validate_password_policyがMEDIUMまたはSTRONGに設定されている場合、パスワード内の特殊文字の最小数は、デフォルトは1、最小は0です。

4) パスワードの複雑さに関するポリシーの具体的な設定

上記のパラメータを学習した後、自分の状況に応じてパスワードの複雑さのポリシーを設定できます。たとえば、パスワードを少なくとも 10 文字にし、大文字と小文字、数字、特殊文字を含める場合は、次のように設定できます。

5) パスワードの複雑さをテストする

パスワードの複雑さのポリシーは、有効になった後の操作に対してのみ有効です。たとえば、以前にパスワードが 123 のアカウントを持っていた場合は、そのアカウントを引き続き使用できますが、パスワードを再度変更する場合は、複雑さのポリシーを満たす必要があります。次に、パスワードの複雑さのポリシーの具体的な効果をテストしてみましょう。

# 新しいユーザーを作成し、パスワードを設定します。mysql> create user 'testuser'@'%' identified by '123';
エラー 1819 (HY000): パスワードが現在のポリシー要件を満たしていません
mysql> 'ab123' によって識別される 'testuser'@'%' のユーザーを作成します。
エラー 1819 (HY000): パスワードが現在のポリシー要件を満たしていません
mysql> 'Ab@123' によって識別されるユーザー 'testuser'@'%' を作成します。
エラー 1819 (HY000): パスワードが現在のポリシー要件を満たしていません
mysql> 'Bsdf@5467672' によって識別されるユーザー 'testuser'@'%' を作成します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

# パスワードを変更するmysql> alter user 'testuser'@'%' identified by 'dfgf3435';
エラー 1819 (HY000): パスワードが現在のポリシー要件を満たしていません
mysql> ユーザー 'testuser'@'%' を変更します ('dBsdf@5467672' で識別されます)。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

2. パスワードの有効期限を自動的に設定する

パスワードの複雑さに関するポリシーの設定に加えて、自動パスワード有効期限も設定できます。たとえば、パスワードは 90 日ごとに期限切れになり、再度使用するには変更する必要があります。これにより、データベース アカウントのセキュリティが強化されます。自動パスワード有効期限を設定する方法を見てみましょう。

特定のアカウントのパスワードの有効期限を個別に設定する

ALTER USER ステートメントを使用して、単一のアカウント パスワードを期限切れにしたり、アカウントの有効期限を変更したりします。

# mysql.user システム テーブルを通じてデータベース アカウントのステータスを確認します。mysql> select user,host,password_expired,password_lifetime,password_last_changed,account_locked from mysql.user;
+------------------+----------+------------------+-------------------+-----------------------+----------------+
| ユーザー | ホスト | パスワードの有効期限 | パスワードの有効期間 | パスワードの最終変更日 | アカウントがロックされています |
+------------------+----------+------------------+-------------------+-----------------------+----------------+
| expuser | % | N | NULL | 2021-01-05 14:30:30 | N |
| ルート | % | N | NULL | 2020-10-30 14:45:43 | N |
| テストユーザー | % | N | NULL | 2021-01-04 17:22:37 | N |
| mysql.infoschema | ローカルホスト | N | NULL | 2020-10-30 14:37:09 | Y |
| mysql.session | ローカルホスト | N | NULL | 2020-10-30 14:37:09 | Y |
| mysql.sys | ローカルホスト | N | NULL | 2020-10-30 14:37:09 | Y |
| ルート | ローカルホスト | N | NULL | 2020-10-30 14:38:55 | N |
+------------------+----------+------------------+-------------------+-----------------------+----------------+
セット内の行数は 7 です (0.01 秒)

# expuser アカウントのパスワードを直ちに期限切れにします。mysql> ALTER USER 'expuser'@'%' PASSWORD EXPIRE;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> mysql.user から user、host、password_expired、password_lifetime、password_last_changed、account_locked を選択します。
+------------------+----------+------------------+-------------------+-----------------------+----------------+
| ユーザー | ホスト | パスワードの有効期限 | パスワードの有効期間 | パスワードの最終変更日 | アカウントがロックされています |
+------------------+----------+------------------+-------------------+-----------------------+----------------+
| expuser | % | Y | NULL | 2021-01-05 14:30:30 | N |
| ルート | % | N | NULL | 2020-10-30 14:45:43 | N |
| テストユーザー | % | N | NULL | 2021-01-04 17:22:37 | N |
| mysql.infoschema | ローカルホスト | N | NULL | 2020-10-30 14:37:09 | Y |
| mysql.session | ローカルホスト | N | NULL | 2020-10-30 14:37:09 | Y |
| mysql.sys | ローカルホスト | N | NULL | 2020-10-30 14:37:09 | Y |
| ルート | ローカルホスト | N | NULL | 2020-10-30 14:38:55 | N |
+------------------+----------+------------------+-------------------+-----------------------+----------------+
セット内の行数は 7 です (0.00 秒)

# アカウントのパスワードを期限切れにならないように変更します。mysql> ALTER USER 'expuser'@'%' PASSWORD EXPIRE NEVER;
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

# このアカウントのパスワードの有効期限を 90 日に設定します。mysql> ALTER USER 'expuser'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> mysql.user から user、host、password_expired、password_lifetime、password_last_changed、account_locked を選択します。
+------------------+----------+------------------+-------------------+-----------------------+----------------+
| ユーザー | ホスト | パスワードの有効期限 | パスワードの有効期間 | パスワードの最終変更日 | アカウントがロックされています |
+------------------+----------+------------------+-------------------+-----------------------+----------------+
| expuser | % | N | 90 | 2021-01-05 14:41:28 | N |
| ルート | % | N | NULL | 2020-10-30 14:45:43 | N |
| テストユーザー | % | N | NULL | 2021-01-04 17:22:37 | N |
| mysql.infoschema | ローカルホスト | N | NULL | 2020-10-30 14:37:09 | Y |
| mysql.session | ローカルホスト | N | NULL | 2020-10-30 14:37:09 | Y |
| mysql.sys | ローカルホスト | N | NULL | 2020-10-30 14:37:09 | Y |
| ルート | ローカルホスト | N | NULL | 2020-10-30 14:38:55 | N |
+------------------+----------+------------------+-------------------+-----------------------+----------------+
セット内の行数は 7 です (0.00 秒)

# このアカウントでデフォルトのパスワード有効期限グローバルポリシーを使用するようにします。mysql> ALTER USER 'expuser'@'%' PASSWORD EXPIRE DEFAULT;
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

mysql.user システム テーブルには、各アカウントの関連情報が記録されます。password_expired フィールドの値が Y の場合、パスワードの有効期限が切れていることを意味します。有効期限が切れたパスワードでもログインできますが、操作は実行できません。操作を実行すると、次のメッセージが表示されます: ERROR 1820 (HY000): You must reset your password using ALTER USER statement before performing this statement. You must change the password before you can perform normal operations.

有効期限が 90 日などの特定のアカウントの場合、データベース システムは現在の時刻とパスワードが最後に変更された時刻の差を比較します。パスワードの最後の変更から 90 日以上経過すると、アカウントのパスワードは期限切れとしてマークされ、操作を実行する前にパスワードを変更する必要があります。

グローバル有効期限ポリシーを設定する

グローバル パスワード自動有効期限ポリシーを構築するには、default_password_lifetime システム変数を使用します。バージョン 5.7.11 より前では、default_password_lifetime のデフォルト値は 360 (パスワードは約 1 年に 1 回変更する必要があります) でしたが、それ以降のバージョンではデフォルト値は 0 で、パスワードの有効期限がないことを意味します。このパラメータの単位は日です。たとえば、このパラメータを 90 に設定すると、グローバル パスワードの自動有効期限ポリシーは 90 日になります。

# グローバル有効期限ポリシーを設定します。最初に手動で変更してから、構成ファイルに追加します。mysql> SET GLOBAL default_password_lifetime = 90;
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

mysql> 'default_password_lifetime' のような変数を表示します。
+---------------------------+-------+
| 変数名 | 値 |
+---------------------------+-------+
| デフォルトパスワードの有効期間 | 90 |
+---------------------------+-------+
セット内の 1 行 (0.00 秒)

# 再起動を有効にするために設定ファイルを書き込む [mysqld]
デフォルトパスワードの有効期間 = 90

期限切れのパスワードを現在の値に設定して「リセット」することもできますが、ポリシー上の理由から、別のパスワードを選択することをお勧めします。

要約:

この記事では、データベース パスワードのセキュリティ戦略として、パスワードの複雑さとパスワードの有効期限戦略の 2 つを主に紹介します。戦略が多ければ多いほど、安心できます。覚えておいてください:安全は軽視できる問題ではありません。

上記は年末の「MySQLパスワードは安全ですか?」の詳細内容です。MySQLパスワードのセキュリティに関する詳細については、123WORDPRESS.COMの他の関連記事にご注目ください。

以下もご興味があるかもしれません:
  • MySQLを安全にシャットダウンする方法
  • MySQLデータベースの名前を高速かつ安全に変更する方法(3種類)
  • MySQLプロセスを安全かつ適切にシャットダウンする方法
  • MySQLデータのセキュリティを確保するための提案
  • MySQLインスタンスを安全にシャットダウンする方法
  • MySQL セキュリティ管理の詳細

<<:  JavaScriptの原理と方向性

>>:  HTML ウェブページの基本コンポーネントの概要

推薦する

一般的な JavaScript メモリ エラーと解決策

目次1. タイマー監視2. イベント監視3.オブザーバー4. ウィンドウオブジェクト5. DOM参照...

強くお勧めします! Vue 3.2 でシンタックスシュガーを設定する

目次前の1. セットアップ構文シュガーとは何か2. セットアップコンポーネントを使用して自動的に登録...

JS 内の Json 文字列 + Cookie + ローカルストレージ

目次1.Json文字列1.1Json構文1.2 例2. クッキー2.1 使い方は? 3. ローカルス...

Javascriptでオブザーバーモードを実装する方法を教えます

目次オブザーバーパターンとは何ですか?シナリオシミュレーションコードの実装コードのリファクタリング要...

webpack -v エラー解決

背景webpackのバージョンを確認したいのですが、webpack -vを実行するとエラーが報告され...

MySQLでデータテーブルを作成するときにエンジンMyISAM/InnoDBを設定する

mysql を構成するときに、構成ファイル内のデフォルトのストレージ エンジンを InnoDB に設...

Nginx 502 Bad Gateway エラーの原因と解決策

Nginx 502 Bad Gateway エラーに何度か遭遇しました。ここでメモしておこうと思いま...

ナビゲーションバーのドロップダウンメニューのサンプルコードを実装するためのHTML+CSS

効果コード内の画像は自分で変更できますドロップダウンメニューのHTMLコード <ヘッダークラ​...

JavaScript の組み込みオブジェクト 数学と文字列の詳細な説明

目次数学オブジェクト共通プロパティ一般的な方法Math.random()文字列メソッド長さプロパティ...

Videojs+swiper が Taobao の商品詳細カルーセルを実現

この記事では、Taobao商品詳細のカルーセルを実現するためのvideojs+swiperの具体的な...

スパンの最小高さを定義するソリューションは効果がありません

span タグは HTML ウェブページを作成するときによく使用されますが、このタグの使い方がよくわ...

Windows および Linux で tomcat9 を介して war パッケージを手動で展開する方法

Windows 環境と Linux 環境では結果が異なります。ウィンドウズステップ 1: Maven...

jsは赤い封筒の順序と量を指定するアルゴリズムを実装します

この記事では、指定された赤い封筒の順序と金額を実装するためのjsの具体的なコードを共有します。具体的...

Vue.js の計算プロパティ、監視プロパティ、ライフサイクルの詳細な説明

目次序文計算されたプロパティ計算プロパティの紹介入門ケース統計価格事例ゲッターメソッドとセッターメソ...

Linux ソースコードの解析 epoll

目次1. はじめに2. シンプルなepollの例2.1、epoll_create 2.2、構造体イベ...