テクニカル コミュニティのこの記事「New features | SupplementaryDetails of the New Password Policy of MySQL 8.0」では、MySQL 8.0 データベースの新しいパスワード ポリシーのいくつかの詳細なシナリオが説明されており、学ぶ価値があります。
MySQL 8.0 はこれまでにバージョン 8.0.34 までリリースされていますが、一連のバージョン更新を経て、さらにパスワードの機能強化が行われました。
この記事では主に、パスワードに関連するいくつかのパラメータの使用方法の詳細を検証および分析し、実際の使用感を共有します。まず、MySQL 8.0バージョンの構文の構文構造の一部を見てみましょう CREATE USER
。 password_option
-- MySQL 8.0(新增了不同维度的密码控制)
password_option: {
PASSWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]
| PASSWORD HISTORY {DEFAULT | N}
| PASSWORD REUSE INTERVAL {DEFAULT | N DAY}
| PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL]
| FAILED_LOGIN_ATTEMPTS N
| PASSWORD_LOCK_TIME {N | UNBOUNDED}
}
-- MySQL 5.7(只包含密码过期属性配置)
password_option: {
PASSWORD EXPIRE
| PASSWORD EXPIRE DEFAULT
| PASSWORD EXPIRE NEVER
| PASSWORD EXPIRE INTERVAL N DAY
}
その中で、 MySQL 8.0 バージョン 構文CREATE USER
の最初の 4 つのパスワード属性は、この記事で説明する最初の詳細です。MySQL グローバル パラメータとその属性に対応する意味は次のとおりです。
パラメータ名 | デフォルト値 | mysql.user テーブルの対応するフィールド | 意味 |
---|---|---|---|
default_password_lifetime | 0 | パスワード_有効期間 | グローバルに設定されたパスワードの有効期間 |
パスワード_履歴 | 0 | パスワード_再利用_履歴 | 再利用できない過去のパスワードの数をグローバルに設定します。 |
パスワードの再利用間隔 | 0 | パスワード_再利用_時間 | 過去のパスワードが再利用されるまでの時間をグローバルに設定します |
パスワード必須_現在の | オフ | パスワード必須_現在の | グローバル設定でパスワードを変更する場合、現在のパスワードを入力する必要がありますか? |
神話 1
テーブル mysql.user
内のパスワード関連オプションの対応するフィールドが NULL の場合の意味。
検証プロセス
これら 4 つのパスワード属性に基づいて具体的な値を設定し、設定後の構成は下図のようになります。
ユーザーのパスワード属性を指定せずに新しいユーザーを作成します。
ユーザーの作成後、 mysql.user
ビューテーブルの対応するフィールドに表示される値はすべて NULL になります。
グローバルに構成された 4 つのプロパティが有効になっていませんか?
これが有効になると、ユーザーの作成時に対応する値が自動的に設定されます。このロジックに基づく理解は、新たに設定されたパスワードのグローバル属性は、過去に作成されたユーザーには有効ではないという、別の層の誤解にもつながります。
既存のユーザーを 個別にALTER USER
処理する必要がありますか?
この疑問は考えれば考えるほど間違っているのですが、新規ユーザー作成時にグローバル設定が有効にならなければ、いつから有効になるのか意味が無いのではないでしょうか? 公式 ドキュメント[1]mysql.user
の対応するフィールド値の意味の記述をさらに確認した結果、回答が得られました。元の説明は次のとおりです。テーブル内でこれら 4 つの値が NULL である場合、それは設定が有効になっていないことを意味するのではなく、グローバル パスワード ポリシー設定が継承されていることを意味します。
そのため、私は公式ドキュメントを十分に読んでおらず、NULL 値の意味(重要な理由)を誤解していましたが、確かにこの「落とし穴」は簡単に踏むことができます。参考までに、グローバルパラメータとシングルユーザ属性設定の有効対応表も掲載します。
神話 2
ここでは誤解として述べていますが、実際には文書の記載が不完全であることを理解すべきです。まずドキュメントの説明を見てみましょう. 翻訳は次のとおりです: これらの 2 つのパラメータを使用して、履歴パスワードの再利用ポリシーを制御できます: 1 つは回数ポリシーに基づいており、もう 1 つは時間ポリシーに基づいています。たとえば、過去 6 件のパスワードまたは 365 日以内に設定されたパスワードの使用を禁止するなど、同時に設定できます。2 つのパラメータが OR 論理であることがわかります。
実際の検証シナリオ
シーン1
パスワード履歴 > 0 およびパスワード再使用間隔 = 0
結論:過去のパスワード数 制御ポリシーは効果的であり、期待どおりです。
シーン2
パスワード履歴 = 0 およびパスワード再使用間隔 > 0
結論:過去のパスワード時間 管理ポリシーは効果的であり、期待どおりです。
シーン3
パスワード履歴 > 0 および パスワード再使用間隔 > 0
結論:履歴パスワード時間 制御ポリシーは有効になりますが、履歴パスワード時間 制御ポリシーは有効になりません。mysql.password_historyは指定された時間内のすべてのパスワードを記録し、再利用することはできません。
したがって、
password_reuse_interval
password_history
時間の制御戦略は時間の制御 よりも優先されます 。2 つのパラメータが同時に有効になることはなく、2 つのパラメータが同時に設定されると、より厳格な設定が有効なポリシーとして使用されます。
ポリシーは基本的に、使用状況や機能には影響しません。
参考文献
[1]
許可テーブル: https://dev.mysql.com/doc/refman/8.0/en/grant-tables.html
この記事が役立つと思われる場合は、記事の最後にある「いいね」と「読む」をクリックしていただくか、pyq に直接転送してください。
最近更新された記事:
「いくつかのデータ漏洩シナリオのトラブルシューティングと解決策」
最近の人気記事:
「Oracle RAC Cache Fusionに関する古典的な論文を推奨します」
「『レッド・アラート』ゲームのオープンソースコードが私たちにもたらす衝撃」
記事の分類とインデックス作成: