TL;DR
CREATE USER .. IDENTIFIED WITH caching_sha2_password AS x'..'
の形式で入れればMySQL側は元の文字列を知らないのでパスワードポリシーに引っかかることはない
自分で建てたわけではないMySQL を使って遊んでいるところだけれど、 PMM を入れる時にちょっと簡単なパスワードを使いたいと思った。
mysql> CREATE USER pmm@xxx IDENTIFIED BY 'xxx';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
いつものローカルLinuxだったら —initialize-insecure でセットアップしちゃうからすっかり忘れてた。
mysql> SHOW VARIABLES LIKE '%validate%';
+-------------------------------------------------+--------+
| Variable_name | Value |
+-------------------------------------------------+--------+
| innodb_validate_tablespace_paths | OFF |
| lakehouse_validate_table | |
| validate_password.changed_characters_percentage | 0 |
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+-------------------------------------------------+--------+
10 rows in set (0.00 sec)
使いたいパスワードに数字が入ってないのがいけないんだと思うので、無理を通すなら validate_password コンポーネント(MySQL 8.0とそれ以降で validate_password プラグインから validate_password コンポーネントに変わる) をアンインストールしてインストールしなおすのも手か?
mysql> UNINSTALL COMPONENT 'file://component_validate_password';
ERROR 1142 (42000): DELETE command denied to user 'admin'@'xxx' for table 'component'
権限が足りない。であれば設定だけちょろまかして
mysql> SET SESSION validate_password.number_count = 0;
ERROR 1229 (HY000): Variable 'validate_password.number_count' is a GLOBAL variable and should be set with SET GLOBAL
mysql> SET GLOBAL validate_password.number_count = 0;
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation
これも権限が足りない。
それでもパスワードを強いものにするのは何か負けた気がするので考えてみたら、ハッシュ化されたあとのauthentication_stringを使えば生のパスワードはMySQLにもわからないんだと思い出す。
他のマシンから SELECT authentication_string FROM mysql.user WHERE uesr = 'pmm'
で値を引いてそのまま新しい方に使ってみる。これはたぶん転ける。
mysql> CREATE USER pmm@xxx IDENTIFIED WITH caching_sha2_password AS '$A$005$..';
ERROR 1827 (HY000): The password hash doesn't have the expected format.
caching_sha2_passwordのauthentication_stringはバイナリなので、端末に表示されてない制御文字が含まれている可能性が十分ある。
なので、16進数で取ってきて x'..'
の修飾子で突っ込む。
mysql> CREATE USER pmm@xxx IDENTIFIED WITH caching_sha2_password AS x'24412430xxxxx';
Query OK, 0 rows affected (0.00 sec)
思惑通り成功。
………これ誰でもvalidate_passwordすり抜けられるんじゃ()
0 件のコメント :
コメントを投稿