반영하고자 하는 패스워드 정책
- 비밀번호 최소 길이: 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
복사