이번 글에서는 Maria 10.0.28 -> 10.1.24 버전으로 엔진 업그레이드를 하는 방법과 10.1 버전부터 새로 추가된 계정 패스워드 복잡도 기능을 소개하겠습니다.
(ORACLE - 계정 profile 의 PASSWORD_VERIFY_FUNCTION 기능과 동일)
--1. 10.0.28 확인
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 10.0.28-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> select * from mysql.upgrade_test;
+----------------+
| name |
+----------------+
| before upgrade |
+----------------+
1 row in set (0.00 sec)
MariaDB [(none)]> shutdown;
-> 데이터 유실 테스트를 위해 테스트 테이블도 생성함
--2. 기존 엔진 삭제
-1. 기존 DB my.cnf 복사
[root@ip-172-31-11-94 mysql]# cp my.cnf /engn001/masvc01/
[root@ip-172-31-11-94 mysql]#
=> 기존 DB의 my.cnf 에 기존 DB의 데이터 위치등의 정보와 DB 환경 설정등이 저장되어 있으므로 재사용함
-2. 기존 엔진 (10.0.28) 삭제
[root@ip-172-31-11-94 masvc01]# ls
10.0.28 my.cnf TEST
[root@ip-172-31-11-94 masvc01]# rm -rf 10.0.28
[root@ip-172-31-11-94 masvc01]# ls -ltr
total 8
drwxr-xr-x 4 masvc01 mysql 4096 Jul 10 05:29 TEST
-rw-r--r-- 1 root root 3089 Jul 10 06:29 my.cnf
-> 기존 엔진 10.0.28 디렉토리 삭제
-3. 새 엔진 (10.1.24) 설치
[root@ip-172-31-11-94 upgrade]# pwd
/engn001/masvc01/upgrade
[root@ip-172-31-11-94 upgrade]# tar zxpvf mariadb-10.1.24-linux-x86_64.tar.gz
[root@ip-172-31-11-94 upgrade]# ln -s mariadb-10.1.24-linux-x86_64 mysql
[root@ip-172-31-11-94 upgrade]# cp ../my.cnf /engn001/masvc01/upgrade/mysql/
[root@ip-172-31-11-94 mysql]# ./bin/mysqld_safe --defaults-file=/engn001/masvc01/upgrade/mysql/my.cnf --user=masvc01 &
=> 새 엔진 (10.1.24 버전) 압축해제 후 엔진 설치( script 디렉토리의 mysql_installation_db 스크립트) 수행 없이 DB 기동
=> 복사한 my.cnf 에서 구 엔진 디렉토리 -> 새로운 엔진 디렉토리로 수정 필요
--3. 업그레이드 및 데이터 확인
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.1.24-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
MariaDB [(none)]>
MariaDB [(none)]> select * from mysql.upgrade_test;
+----------------+
| name |
+----------------+
| before upgrade |
+----------------+
1 row in set (0.00 sec)
-> 데이터유실 테스트를 위해 생성한 mysql.upgrade_test 도 확인됨
--4. 패스워드 복잡도 설정
기존 10.0 버전에서는 패스워드 복잡도 설정 관련 플러그인 ( simple_password_check.so ) 이 없음
10.1 버전부터 지원
-- 10.0.28 버전의 플러그인
[root@ip-172-31-11-94 plugin]# pwd
/engn001/masvc01/10.0.28/mysql/lib/plugin
[root@ip-172-31-11-94 plugin]# ls -ltr simple_password*
ls: cannot access simple_password*: No such file or directory
-- 10.1.24 버전의 플러그인
-- 플러그인 설치
MariaDB [(none)]> INSTALL SONAME 'simple_password_check';
Query OK, 0 rows affected (0.00 sec)
-- 정상적으로 설치완료 되면 아래와 같이 조회됨
MariaDB [(none)]> show variables like 'simple%';
+-----------------------------------------+-------+
| Variable_name | Value |
+-----------------------------------------+-------+
| simple_password_check_digits | 1 |
| simple_password_check_letters_same_case | 1 |
| simple_password_check_minimal_length | 8 |
| simple_password_check_other_characters | 1 |
+-----------------------------------------+-------+
4 rows in set (0.00 sec)
-- 패스워드 복잡도 옵션
1) simple_password_check_digits - 숫자 1 : 필수포함 0 : 선택 default 1
2) simple_password_check_letters_same_case - 대문자 1: 필수포함 0 : 선택 default 1
3) simple_password_check_minimal_length : 패스워드 길이 default 8
4) simple_password_check_other_characters - 특수문자 1 : 필수포함 0 : 선택 default 1
-- 옵션 설정 방법
set global simple_password_check_digits =0;
--5. 예시 (default 설정일 때)
1) MariaDB [(none)]> create user 'test'@'%' identified by 'passwordtest123';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
=> 대문자, 특수문자 미포함
2) MariaDB [(none)]> create user 'test'@'%' identified by '!passwordtest123';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
=> 대문자 미포함
3) MariaDB [(none)]> create user 'test'@'%' identified by '!!passwordtest##';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
=> 숫자 미포함
*예외
MariaDB [(none)]> update mysql.user set password=password('test') where user='test';
Query OK, 0 rows affected (0.00 sec)
=> update 는 password validation 미적용됨