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

推薦する

1 つの記事で React における Redux の初期の使用を理解する

Redux はデータ状態管理プラグインです。React や Vue を使用してコンポーネント化された...

Vue はアップロードした画像に透かしを追加できるようになりました (アップグレード版)

vueプロジェクトでは、アップロードした画像に透かしを追加して参照できるようにするアップグレード版...

SQL GROUP BYの詳細な説明と簡単な例

GROUP BY ステートメントは、Aggregate 関数と組み合わせて使用​​され、1 つ以上の...

初心者向けウェブサイト構築チュートリアルの概要

これら 6 つの記事を書いた後、私は少し混乱し始めました。次にどこに書けばいいのか分かりません。ドメ...

CSS メニューボタンアニメーション

ドロップダウンメニューを書くには、ボタンをクリックします。メニューの入り口はアイコンボタンをクリック...

CSS3 を使用して円形スクロール プログレス バー アニメーションを作成する例

テーマ今日は、CSS3 を使用して円形スクロール プログレス バー アニメーションを作成する方法を説...

JavaScriptはブラウザがIEかどうかを判定します

フロントエンド開発者としては、IEの落とし穴は避けて通れません。他のブラウザはいいのにIEは壊れてい...

nginx をベースにした Web クラスター プロジェクトをすばやく構築する方法を説明します。

目次1. プロジェクト環境2. プロジェクトの説明3. プロジェクトの手順1. インストール2. 構...

CSS の歪んだ影の実装コード

この記事では、CSS ワープ シャドウの実装コードを紹介し、皆さんと共有します。詳細は以下の通りです...

MySQL 5.7.17無料インストール版のインストールと設定

MYSQLバージョン:MySQL Community Server 5.7.17、インストール不要版...

VUEはFlappy Birdゲームのサンプルコードを実装します

Flappy Bird は、誰もがアプリでプレイしたことがある非常にシンプルな小さなゲームです。ここ...

未来志向の総合的なウェブデザイン:プログレッシブエンハンスメント

<br />原文: プログレッシブエンハンスメントを理解するアーロン・ガスタフソン翻訳:...

シンプルなカルーセルの最も完全なコード分析を実装するJavaScript(ES6オブジェクト指向)

この記事では、シンプルなカルーセルを実装するためのJavaScriptの具体的なコードを参考までに紹...

CSS モジュールソリューション

CSS のモジュール ソリューションは、JS のモジュール ソリューションと同じくらい多く存在すると...

Vueコンポーネントは、写真やビデオをアップロードするためのサンプルコードをカプセル化します

まず依存関係をダウンロードします: cnpm i -S vue-uuid ali-oss画像フィール...