Search
Duplicate

MySQL 5.7 패스워드 복잡도 및 만료일 설정

반영하고자 하는 패스워드 정책

- 비밀번호 최소 길이: 9 - 비밀번호 복잡도 적용 여부: 문자/숫자/특수문자 조합 : 최소 9자, 숫자, 특수문자 1개씩 포함 - 비밀번호 만료일자 : 90일
Plain Text
복사

1. validate_password.so 플러그인 설치

패스워드 복잡도 정책 확인

mysql> select plugin_name, plugin_status from information_schema.plugins where plugin_name like 'validate%'; Empty set (0.00 sec)
SQL
복사
validate_password.so 플러그인은 기본 비활성화되어 있다. 해당 플러그인을 설치해야 MySQL 사용자 계정 (user)의 패스워드 복잡도 정책 설정을 할 수 있다.

validate_password.so 플러그인 설치

[root@dev-db plugin]# pwd /home/mysql/lib/plugin [root@dev-db plugin]# ll | grep validate_password.so -rwxr-xr-x 1 7161 31415 209840 Dec 8 03:33 validate_password.so ------- mysql> install plugin validate_password soname 'validate_password.so'; Query OK, 0 rows affected (0.13 sec) mysql> select plugin_name, plugin_status from information_schema.plugins where plugin_name like 'validate%'; +-------------------+---------------+ | plugin_name | plugin_status | +-------------------+---------------+ | validate_password | ACTIVE | +-------------------+---------------+ 1 row in set (0.00 sec) mysql> SHOW VARIABLES LIKE 'validate_password%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password_check_user_name | OFF | | 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 | +--------------------------------------+--------+
SQL
복사

2. 패스워드 복잡도 설정 (세션 > 환경 변수 설정)

mysql> SET GLOBAL validate_password_length=9; Query OK, 0 rows affected (0.00 sec) mysql> SET GLOBAL validate_password_mixed_case_count=0; Query OK, 0 rows affected (0.00 sec) mysql> SHOW VARIABLES LIKE 'validate_password%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password_check_user_name | OFF | | validate_password_dictionary_file | | | validate_password_length | 9 | | validate_password_mixed_case_count | 0 | | validate_password_number_count | 1 | | validate_password_policy | MEDIUM | | validate_password_special_char_count | 1 | +--------------------------------------+--------+ 7 rows in set (0.00 sec)
SQL
복사

(TIP) 패스워드 복잡도 설정 원복 방법

mysql> SET GLOBAL validate_password_policy=LOW; Query OK, 0 rows affected (0.00 sec) mysql> SHOW VARIABLES LIKE 'validate_password%'; +--------------------------------------+-------+ | Variable_name | Value | +--------------------------------------+-------+ | validate_password_check_user_name | OFF | | validate_password_dictionary_file | | | validate_password_length | 9 | | validate_password_mixed_case_count | 0 | | validate_password_number_count | 1 | | validate_password_policy | LOW | | validate_password_special_char_count | 1 | +--------------------------------------+-------+ 7 rows in set (0.00 sec) 혹은 my.cnf에 아래 설정 추가 후 재기동 [my.cnf] ## 패스워드 정책 플러그인 활성 여부 설정 ## LOW, MEDIUM validate_password_policy=LOW
SQL
복사
아래 쿼리를 사용하여, 비밀번호 복잡도 플러그인 자체를 삭제하는 방법도 있으나.. 굳이..
mysql> uninstall plugin validate_password; Query OK, 0 rows affected (0.00 sec)
mysql> select plugin_name, plugin_status from information_schema.plugins where plugin_name like 'validate%'; Empty set (0.00 sec)

3. 패스워드 복잡도 설정 (재기동시 적용 되도록 my.cnf 설정)

[my.cnf] ## 패스워드 정책 ## 패스워드 복잡도 : 최소 9자, 숫자, 특수문자 1개씩 포함, 대/소문자 0개 조합 validate_password_policy=MEDIUM validate_password_length=9 validate_password_mixed_case_count=0 validate_password_number_count=1 validate_password_special_char_count=1
Bash
복사

4. 패스워드 만료일자 설정

기존 정책 확인

mysql> SHOW VARIABLES LIKE 'default_password_lifetime%'; +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | default_password_lifetime | 0 | +---------------------------+-------+ 1 row in set (0.00 sec)
SQL
복사

정책 적용

## 패스워드 만료일 설정 mysql> ALTER USER 'devadmin'@'10.64.237.%' PASSWORD EXPIRE INTERVAL 90 DAY; Query OK, 0 rows affected (0.00 sec ## 조회 mysql> SHOW VARIABLES LIKE 'default_password_lifetime%'; +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | default_password_lifetime | 90 | +---------------------------+-------+ 1 row in set (0.01 sec)
SQL
복사
default_password_lifetime 지정시, 기존 계정들에는 반영되지 않고, 이후 생성되는 계정에만 적용된다.

5. 패스워드 복잡도 설정 (재기동시 적용 되도록 my.cnf 설정)

[my.cnf] ## 비밀번호 만료기간 : 생성 일자 기준 90일 default_password_lifetime=90
Bash
복사

6. 기존 계정의 패스워드 만료일자 설정

mysql> ALTER USER 'devadmin'@'10.64.10.%' PASSWORD EXPIRE INTERVAL 90 DAY; Query OK, 0 rows affected (0.00 sec) mysql> select user,host,password_expired,password_lifetime from user; +---------------+-------------+------------------+-------------------+ | user | host | password_expired | password_lifetime | +---------------+-------------+------------------+-------------------+ | root | localhost | N | NULL | | mysql.session | localhost | N | NULL | | mysql.sys | localhost | N | NULL | | devadmin | 10.64.10.% | N | 90 | +---------------+-------------+------------------+-------------------+ 4 rows in set (0.00 sec)
SQL
복사

(TIP) 계정에 설정된 패스워드 만료 일자 설정 원복 방법

mysql> ALTER USER 'devadmin'@'10.64.10.%' PASSWORD EXPIRE NEVER; Query OK, 0 rows affected (0.00 sec) ## 조회 mysql> select user,host,password_expired,password_lifetime from user; +---------------+-------------+------------------+-------------------+ | user | host | password_expired | password_lifetime | +---------------+-------------+------------------+-------------------+ | root | localhost | N | NULL | | mysql.session | localhost | N | NULL | | mysql.sys | localhost | N | NULL | | devadmin | 10.64.10.% | N | 0 | +---------------+-------------+------------------+-------------------+ 4 rows in set (0.00 sec)
SQL
복사