年末ですが、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 ウェブページの基本コンポーネントの概要

推薦する

MySQL カーソルの原理と使用例の分析

この記事では、例を使用して MySQL カーソルの原理と使用方法を説明します。ご参考までに、詳細は以...

海外のウェブページのカラーマッチング事例20選共有

この記事では、優れた Web ページのカラー マッチングの事例を 20 件集めて紹介します。これらの...

ネイティブ JavaScript を使用した Web 計算機の実装

この記事では、参考までに、計算機のWebバージョンを実装するためのJavaScriptの具体的なコー...

MySQL サーバー 5.7.20 のインストールと設定方法のグラフィック チュートリアル

この記事ではMySQL 5.7.20のインストールと設定方法を記録し、皆さんと共有します1. MyS...

フィボナッチ数列のJavaScript出力を実装する方法

目次トピック分析する基本的な解決策基本的な再帰再帰最適化要約するトピック私たちが答えなければならない...

insert と select を組み合わせて、「データベース内のフィールドの最大値 + 1 を挿入する」メソッドを実装する

この記事はmysqlデータベースです質問 1 表 1 のデータを表 2 にインポートします。表 1 ...

HTML ヘッドタグの詳細な紹介

HTML のヘッド部分には、ブラウザによる Web ページのレンダリングや SEO などに関連するタ...

WeChatミニプログラムビデオ集中砲火位置ランダム

この記事では、WeChatミニプログラムのビデオ弾幕の位置をランダム化するための具体的なコードを紹介...

ウェブデザインのためのオンライン開発ツール10選の紹介

1. オンラインテキストジェネレーターBlindTextGenerator: デザイナーにとって、こ...

Vue の自動書式設定の改行保存の詳細な説明

ネットで変更方法をいろいろ調べたのですが、うまくいきませんでした。後で大物から見て削除しました。フォ...

Jira リバース プロキシを実装するための nginx について

概要: nginx リバース プロキシ jira を構成し、https を実装します。Tomcat ...

Apache Superset を使用して ClickHouse データを視覚化する 2 つの方法

Apache Superset は、データを表示および探索する方法を提供する強力な BI ツールで...

Linux コマンドライン操作 Baidu クラウドのファイルのアップロードとダウンロード

目次0. 背景1. インストール2. Baidu Cloudアカウントにログインする3. ファイルを...

React はモバイル端末を構築するために antd-mobile+postcss を導入しました

antd-mobileをインストールするグローバル輸入 npm をインストール antd-mobil...

Nginx ログ管理の概要

Nginx ログの説明アクセス ログを通じて、ユーザーの地理的起源、ジャンプ元、使用端末、特定の U...