로컬 테스트 등 목적으로 MySQL을 설치해서 아주 단순한 패스워드를 설정해서 사용하고 싶은데, 'Your password does not satisfy the current policy requirements'라는 메시지가 출력되며 패스워드가 설정되지 않는 경우.
HomeBrew로 MySQL을 설치하고 실행한 뒤, 패스워드를 설정하기 위해 아래 명령을 실행했습니다.
$ mysql_secure_installation
그리고 패스워드를 0000으로 설정하고 싶었습니다.
New password: 0000
그런데, '현재 정책의 요구사항을 만족하지 않는 패스워드'라는 메시지가 출력되며 패스워드 설정이 되지 않았습니다.
Your password does not satisfy the current policy requirements
어차피 외부 접속도 상정하고 있지 않고... 무언가 개발할 때에 DB 연동 부분에 패스워드를 안 써놓고 있던 것을 서버에 올릴 때 채워서 올리는 타입은 아니라서 무의미한 패스워드라도 있으면 좋겠다고 생각했는데! 이게 안 되다니요.
MySQL에 접속합니다.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.33 Homebrew
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
아래 쿼리를 날립니다.
mysql> SHOW VARIABLES LIKE 'validate_password%';
그러면, MySQL 5는 아래와 같은 결과가 나옵니다. 꼭 똑같지는 않을 수도 있겠죠?
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| 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 |
+--------------------------------------+--------+
7 rows in set (0.00 sec)
여기에서 문제와 연관된 부분은 validate_password_length와 validate_password_policy입니다. 각각 패스워드의 최소 길이, 그리고 어떤 문자를 얼마나 섞어야 하는지를 나타냅니다.
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| 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 |
+--------------------------------------+--------+
7 rows in set (0.00 sec)
별로 달라진 것은 없습니다. 단지 validate_password 이후 등장하는 문자 하나가 언더바( _ )에서 점( . )으로 바뀐 것 뿐입니다.
여기에서는 문제와 연관된 부분은 validate_password.length와 validate_password.policy입니다. MySQL 5의 경우와 같이 각각 패스워드의 최소 길이, 그리고 어떤 문자를 얼마나 섞어야 하는지를 나타냅니다.
policy는 LOW, MEDIUM, STRONG 중 하나의 값을 가집니다.
MySQL 변수를 수정할 때에는 SET, 특히 전역(Global) 변수라면 SET GLOBAL을 사용하면 되죠!
mysql> SET GLOBAL validate_password_length=4;
일단 패스워드 길이 제한을 4자로 낮추고요,
mysql> SET GLOBAL validate_password_policy=LOW;
패스워드 복잡도가 나락이어도 문제 없도록 정책 수준을 LOW로 하향합니다. 필요에 따라 패스워드 정책을 강화할 수도 있겠지요.
mysql> SET GLOBAL validate_password.length=4;
일단 패스워드 길이 제한을 4자로 낮추고요,
mysql> SET GLOBAL validate_password.policy=LOW;
패스워드 복잡도가 나락이어도 문제 없도록 정책 수준을 LOW로 하향합니다. 필요에 따라 패스워드 정책을 강화할 수도 있겠지요.
이제 패스워드를 원하는 대로 설정하실 수 있습니다! 5나 8이나 언더바와 점, 그 차이만 있고 크게 다른 부분은 없습니다.