[MySQL] 패스워드 검증 수준 낮추기

Benedictus Park·2023년 5월 13일
0

MySQL 삽질기

목록 보기
1/2
post-thumbnail

적용 가능한 상황

로컬 테스트 등 목적으로 MySQL을 설치해서 아주 단순한 패스워드를 설정해서 사용하고 싶은데, 'Your password does not satisfy the current policy requirements'라는 메시지가 출력되며 패스워드가 설정되지 않는 경우.

  • MySQL 버전 5, 8 모두 설명함.

문제 상황

HomeBrew로 MySQL을 설치하고 실행한 뒤, 패스워드를 설정하기 위해 아래 명령을 실행했습니다.

$ mysql_secure_installation

그리고 패스워드를 0000으로 설정하고 싶었습니다.

New password: 0000

그런데, '현재 정책의 요구사항을 만족하지 않는 패스워드'라는 메시지가 출력되며 패스워드 설정이 되지 않았습니다.

Your password does not satisfy the current policy requirements

어차피 외부 접속도 상정하고 있지 않고... 무언가 개발할 때에 DB 연동 부분에 패스워드를 안 써놓고 있던 것을 서버에 올릴 때 채워서 올리는 타입은 아니라서 무의미한 패스워드라도 있으면 좋겠다고 생각했는데! 이게 안 되다니요.


해결

1. MySQL 접속(5 & 8)

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.

2. 패스워드 정책 관련 전역 변수 확인

아래 쿼리를 날립니다.

mysql> SHOW VARIABLES LIKE 'validate_password%';

2-1. MySQL 5의 경우

그러면, 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_lengthvalidate_password_policy입니다. 각각 패스워드의 최소 길이, 그리고 어떤 문자를 얼마나 섞어야 하는지를 나타냅니다.

2-2. MySQL 8의 경우

+--------------------------------------+--------+
| 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.lengthvalidate_password.policy입니다. MySQL 5의 경우와 같이 각각 패스워드의 최소 길이, 그리고 어떤 문자를 얼마나 섞어야 하는지를 나타냅니다.

policy는 LOW, MEDIUM, STRONG 중 하나의 값을 가집니다.

  • LOW: 패스워드에 사용한 문자 종류를 따지지 않습니다.
  • MEDIUM: 패스워드에 최소한 숫자와 한 종류 이상의 문자, 특수문자가 섞여 들어가야 합니다.
  • STRONG: MEDIUM의 제약조건에 Dictionary File까지 있어야 합니다. Dictionary File에 포함된 단어는 패스워드로 사용할 수 없습니다.

3. 관련 전역 변수 변경

3-1. MySQL 5의 경우

MySQL 변수를 수정할 때에는 SET, 특히 전역(Global) 변수라면 SET GLOBAL을 사용하면 되죠!

mysql> SET GLOBAL validate_password_length=4;

일단 패스워드 길이 제한을 4자로 낮추고요,

mysql> SET GLOBAL validate_password_policy=LOW;

패스워드 복잡도가 나락이어도 문제 없도록 정책 수준을 LOW로 하향합니다. 필요에 따라 패스워드 정책을 강화할 수도 있겠지요.

3-2. MySQL 8의 경우

mysql> SET GLOBAL validate_password.length=4;

일단 패스워드 길이 제한을 4자로 낮추고요,

mysql> SET GLOBAL validate_password.policy=LOW;

패스워드 복잡도가 나락이어도 문제 없도록 정책 수준을 LOW로 하향합니다. 필요에 따라 패스워드 정책을 강화할 수도 있겠지요.

끝!

이제 패스워드를 원하는 대로 설정하실 수 있습니다! 5나 8이나 언더바와 점, 그 차이만 있고 크게 다른 부분은 없습니다.

profile
박한강, 24세.

0개의 댓글