validate_password
컴포넌트를 이용한다.우선 validate_password
컴포넌트를 설치해야 한다.
## validate_password 컴포넌트 설치
INSTALL COMPONENT 'file://component_validate_password';
## 설치된 컴포넌트 확인
SELECT * FROM mysql.component;
validate_password
컴포넌트가 설치되면 컴포넌트에서 제공하는 시스템 변수를 확인할 수 있다.SHOW GLOBAL VARIABLES LIKE 'validate_password%';
validate_password
가 플러그인 형태로 제공됐었다.플러그인의 단점을 보완하기 위해 MySQL 8.0부터 컴포넌트가 도입됐다.
사용자 측면에서는 플러그인이나 컴포넌트 모두 거의 동일한 기능을 제공하며, 단지 제공되는 시스템 변수의 이름에만 차이가 있다.
## 플러그인 확인
SELECT * FROM mysql.plugin WHERE name='validate_password'
validate_password.length
시스템 변수에 설정된 길이 이상의 비밀번호가 사용됐는지를 검증한다.validate_password.mixed_case_count
validate_password.number_count
validate_password.special_char_count
validate_password.dictionary_file
시스템 변수에 설정된 사전 파일에 명시된 단어를 포함하고 있는지를 검증한다.validate_password.dictionary_file
시스템 변수에 금칙어들이 저장된 사전 파일을 등록하면 된다.비밀번호 금칙어는 validate_password.policy
시스템 변수가 ‘STRONG’으로 설정된 경우에만 작동하므로, 해당 시스템 변수도 함께 변경해야 한다.
-- 금칙어 파일 적용
SET GLOBAL validate_password.dictionary_file='prihibitive_word.data';
-- 비밀번호 정책을 STRONG으로 설정
SET GLOBAL validate_password.policy='STRONG';
RETAIN CURRENT PASSWORD
옵션만 추가하면 된다.-- 비밀번호를 'qwerty'로 설정
ALTER USER 'root'@'localhost' INDENTIFIED BY 'old_password';
-- 비밀번호를 'asdfg'로 변경하면서 기존 비밀번호를 세컨더리 비밀번호로 설정
ALTER USER 'root'@'localhost' INDENTIFIED BY 'new_password' RETAIN CURRENT PASSWORD;
ALTER USER
명령을 실행하면 root 계정의 프라이머리 비밀번호는 ‘old_password’로 변경되고 세컨더리 비밀번호는 빈 상태가 된다.ALTER USER
명령이 실행되면 이전 비밀번호였던 ‘old_password’는 세컨더리 비밀번호로 설정되고, 새롭게 설정한 ‘new_password’는 프라이머리 비밀번호가 된다.꼭 삭제해야 하는 것은 아니지만, 계정의 보안을 위해 삭제하는 것이 좋다.
세컨더리 비밀번호가 삭제되면 기존 비밀번호로는 로그인이 불가능하며, 새로운 비밀번호로만 로그인할 수 있게 된다.
-- 세컨더리 비밀번호 삭제
ALTER USER 'root'@'localhost' DISCARD OLD PASSWORD;