MySQL 8.0 パスワード有効期限ポリシーの詳細な説明

MySQL 8.0 パスワード有効期限ポリシーの詳細な説明

MySQL 8.0.16 以降では、パスワードの有効期限ポリシーを設定できます。今日は、この小さな知識ポイントについて詳しく説明します。

1. パスワードの有効期限を手動で設定する

MySQL 8.0 では、alter user コマンドを使用してパスワードを期限切れにすることができます。

まずアカウントyeyzを作成します。パスワードはyeyzです。

[root@VM-0-14-centos ~]# /usr/local/mysql-8.0.19-el7-x86_64/bin/mysql -uyeyz -pyeyz -h127.0.0.1 -P4306 -e "1を選択"
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
+---+
| 1 |
+---+
| 1 |
+---+

ここで期限切れにします:

mysql> ユーザー yeyz@'127.0.0.1' のパスワードの有効期限を変更します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

もう一度接続を見てみましょう:

[root@VM-0-14-centos ~]# /usr/local/mysql-8.0.19-el7-x86_64/bin/mysql -uyeyz -pyeyz -h127.0.0.1 -P4306 -e "1を選択"
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
--connect-expired-password オプションを使用するか、対話モードで mysql を起動してください。

-- --connect-expire-password コマンドで接続するように求められます。これを追加して確認してみましょう。[root@VM-0-14-centos ~]# /usr/local/mysql-8.0.19-el7-x86_64/bin/mysql -uyeyz -pyeyz -h127.0.0.1 -P4306 --connect-expired-password -e "select 1" 
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
1 行目のエラー 1820 (HY000): このステートメントを実行する前に、ALTER USER ステートメントを使用してパスワードをリセットする必要があります。

-- ここでは、まずパスワードを変更するために alter user 構文を実行し、その後そのパスワードを使用するように求められます。

もちろん、パスワードの有効期限を手動で設定するだけでなく、パスワードを無期限に設定し、有効期限を指定することもできます。

-- パスワードを無期限に設定するmysql> create user yeyz1@'127.0.0.1' identified with 'mysql_native_password' by 'yeyz1' password expire never;
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

-- パスワードの有効期限を指定された日数に設定します。mysql> create user yeyz2@'127.0.0.1' identified with 'mysql_native_password' by 'yeyz2' password expire interval 90 day; 
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

グローバル パスワード有効期限ポリシーに従う場合は、default キーワードを使用できます。

mysql> create user yeyz3@'127.0.0.1' identified with 'mysql_native_password' by 'yeyz3' password expire default;
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

この場合、パラメータ default_password_lifetime で設定された時間が尊重されます。

2. グローバルパスワードの有効期限を設定します。

すべてのパスワードに有効期限を設定する場合は、パラメータ default_password_lifetime を設定できます。デフォルト値は 0 で、自動パスワード有効期限は無効になります。 default_password_lifetime の値が正の整数 N の場合、許可されたパスワードの有効期間を日数で示し、パスワードは N 日ごとに変更する必要があります。

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

3. グローバルパスワードの再利用時間と再利用間隔の数を設定する

ここでの再利用可能時間、再利用可能間隔、有効期限は異なる概念であることに注意してください。有効期限とは、パスワードがその時間に期限切れになり、使用できなくなることを意味します。再利用可能とは、履歴パスワードは指定された時間が経過した後、またはパスワードが指定された回数変更された後にのみ再利用できることを意味します。

単一のパスワードの再利用可能な時間、または再利用可能な間隔の数を次の方法で設定できます。

有効期限は、パスワードを変更する必要があるまでの期間を示します。

有効期限の回数は、新しいパスワードを設定できる回数を示します。

これら 2 つの関数では、それぞれパラメータ password_history と password_reuse_interval を使用する必要があります。

password_history パラメータをテストしてみましょう。

mysql> alter user yeyz@'127.0.0.1' を 'mysql_native_password' で 'yeyz' によって識別します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

マイSQL> 
mysql> '%password_history%' のような変数を表示します。
+------------------+-------+
| 変数名 | 値 |
+------------------+-------+
| パスワード履歴 | 0 |
+------------------+-------+
セット内の 1 行 (0.00 秒)

mysql> グローバル password_history=2 を設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

-- 最初の変更、成功mysql> alter user yeyz@'127.0.0.1' identified with 'mysql_native_password' by 'yeyz';
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

-- 2 回目の変更、エラーが報告されましたmysql> alter user yeyz@'127.0.0.1' identified with 'mysql_native_password' by 'yeyz';
エラー 3638 (HY000): パスワード履歴ポリシーに矛盾するため、'[email protected]' のこれらの資格情報は使用できません。
マイSQL>

ご覧のとおり、最初は password_history パラメータが 0 に設定されています。これを 2 に変更します。これは、パスワード設定アクションを 2 回実行した後にのみ以前のパスワードを繰り返すことができることを意味します。つまり、今回変更されたパスワードは以前のパスワードと同じにすることはできません。次に、パスワードを同じパスワード「yeyz」に変更し始めました。 最初に変更したときは成功しました。 2 回目にパスワードを設定すると、エラー メッセージが表示されました。

この方法は、システム変数を通じて有効なパスワードの数を設定する方法です。

4. パスワードを再利用する時間と間隔を設定する

-- パスワードを 5 回ごとに再利用するように設定します。mysql> create user yeyz3@'127.0.0.1' identified with 'mysql_native_password' by 'yeyz3' password history 5;
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

-- パスワードを 5 日ごとに再利用するように設定します。mysql> create user yeyz4@'127.0.0.1' identified with 'mysql_native_password' by 'yeyz4' password use interval 5 day; 
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

-- パスワードを 5 日ごと、または 5 回ごとのいずれか厳しい方で再利用するように設定します。mysql> create user yeyz5@'127.0.0.1' identified with 'mysql_native_password' by 'yeyz5' password use interval 5 day password history 5;
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

-- デフォルトのグローバル パスワード再利用ポリシー、つまり、パスワード履歴パラメータとパスワード再利用間隔パラメータを使用します。mysql> create user yeyz6@'127.0.0.1' identified with 'mysql_native_password' by 'yeyz6' password use interval default password history default; 
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

以上がMySQL 8.0のパスワード有効期限ポリシーの詳細な説明です。MySQL 8.0のパスワード有効期限ポリシーの詳細については、123WORDPRESS.COMの他の関連記事にご注目ください。

以下もご興味があるかもしれません:
  • MySQL の安全なパスワード入力のいくつかの操作の紹介
  • MySQL 5.6 でセキュア処理パスワードを変更する方法
  • MySQL8のパスワードを忘れた場合の簡単な解決策
  • Mac で MySQL 8.0.22 のパスワードを取得する方法
  • MySQLでルートユーザーのパスワードを変更する方法
  • MySQLはパスワードなしでログインする例を実装しています
  • Linux mysql-5.6 でルート パスワードをリセットする方法
  • MySQLを安全にシャットダウンする方法
  • MySQLプロセスを安全かつ適切にシャットダウンする方法
  • 年末ですが、MySQL パスワードは安全ですか?

<<:  Win10にnginxをインストールして設定するプロセス

>>:  vue+element カスタムクエリコンポーネント

推薦する

Linux の特別な権限 SUID、SGID、SBIT の詳細な説明

序文Linux のファイルまたはディレクトリの権限については、通常の rwx 権限についてすべて知っ...

16 の XHTML1.0 と HTML の互換性ガイドラインの概要

1.ページを XML タイプとして宣言しないでください。ページでは UTF-8 または UTF-16...

Elasticsearchツールcerebroのインストールと使用チュートリアル

Cerebro は、Elasticsearch バージョン 5.x より前の Elasticsear...

Docker コンテナを他のサーバーに移行する 5 つの方法

多くの場合、移行は避けられません。ハードウェアのアップグレード、データ センターの変更、古いオペレー...

MySQL全文検索の使用例

目次1. 環境整備2. データの準備3. ショーを始める4. 単語分割エンジン要約する参考文献1. ...

静的リソースファイルのアクセスログをフィルタリングするNginxの実装

乱雑なログ日常的に使用される Nginx は、静的リソース サーバーとリバース プロキシ サーバーの...

JavaScript における継承の 3 つの方法

継承する1. 継承とは何か継承: まず、継承とは関係、つまりクラス間の関係です。JS にはクラスはあ...

srcまたはcss背景画像のurl値はbase64でエンコードされたコードです

ウェブ上の一部の画像の src または CSS 背景画像 URL の後に、data:image/pn...

CentOS7.4 に MySQL 5.7.26 をインストールするための詳細なチュートリアル

CentOS にはデフォルトで MariaDB がインストールされていますが、これは MySQL の...

Vue で Alibaba のアイコンフォント ベクター アイコンを使用する方法について

インターネット上には多くのインポート方法があり、公式も3つのインポート方法を提供していますが、インポ...

MySQLデータの挿入、更新、削除の詳細

目次1. 挿入2. 更新3. 削除1. 挿入 顧客に挿入( 顧客.顧客住所、 顧客.cust_cit...

MySQLトランザクションが効率に与える影響の分析と概要

1. データベース トランザクションによりデータベースのパフォーマンスが低下します。データの一貫性と...

JavaScript 文字列オブジェクトメソッド

目次文字列オブジェクトのメソッド方法 1: indexOf() (推奨)方法 2: search()...