• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 1. MySQL 내부 사양
    2. MySQL 플러그인 API
    1. 플러그인 API의 특징
    2. 플러그인 API의 구성 요소
    3. 플러그인 유형
    4. 플러그인 작성
    1. 플러그인 제작 개요
    2. 플러그인 데이터 구조
    3. 플러그인 라이브러리의 컴파일 및 설치
    4. Full-Text Parser 플러그인 작성
    5. Daemon 플러그인 작성
    6. INFORMATION_SCHEMA 플러그인 작성
    7. Semisynchronous Replication 플러그인 작성
    8. Audit 플러그인 작성
    9. Authentication 플러그인 작성
    10. Password-Validation 플러그인 작성
    3. 플러그인을 위한 MySQL서비스
    4. MySQL에 새로운 함수 추가
    5. MySQL 디버그 및 이식
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

24.2.4.10 Password-Validation 플러그인 작성

이 섹션에서는 암호 검증 서버 플러그인을 만드는 방법에 대해 설명합니다. 이 단계는 MySQL 소스 배포판의 plugin/password_validation 디렉토리에있는 소스 코드를 기반으로합니다. 그 디렉토리에있는 validate_password.cc 소스 파일은 validate_password 라는 플러그인을 구현합니다.

비밀번호 검증 플러그인을 작성하려면 플러그인의 소스 파일에 다음 헤더 파일을 포함합니다. 플러그인의 기능 및 요구 사항에 따라 다른 MySQL의 헤더 파일이나 일반적인 헤더 파일이 필요할 수도 있습니다.

#include <mysql/plugin_validate_password.h>

plugin_validate_password.h 는 plugin.h 을 포함하기 때문에 후자의 파일을 명시 적으로 포함 할 필요가 없습니다. plugin.h 는 MYSQL_VALIDATE_PASSWORD_PLUGIN 서버 플러그인 타입과 플러그인을 선언하는 데 필요한 데이터 구조를 정의합니다. plugin_validate_password.h 암호 확인 플러그 인에 고유의 데이터 구조를 정의합니다.

비밀번호 검증 플러그인은 다른 MySQL 서버 플러그인처럼 일반 플러그인 디스크립터가 있습니다 ( 섹션 24.2.4.2.1 "서버 플러그인 라이브러리 및 플러그인 기술자" 를 참조하십시오). validate_password.cc 는 일반 기술자는 다음과 같이됩니다.

mysql_declare_plugin(validate_password)
{
  MYSQL_VALIDATE_PASSWORD_PLUGIN,     /*   type                            */
  &validate_password_descriptor,      /*   descriptor                      */
  "validate_password",                /*   name                            */
  "Oracle Corporation",               /*   author                          */
  "check password strength",          /*   description                     */
  PLUGIN_LICENSE_GPL,
  validate_password_init,             /*   init function (when loaded)     */
  validate_password_deinit,           /*   deinit function (when unloaded) */
  0x0100,                             /*   version                         */
  NULL,
  validate_password_system_variables, /*   system variables                */
  NULL,
  0,
}
mysql_declare_plugin_end;

name 멤버 ( validate_password )는 INSTALL PLUGIN , UNINSTALL PLUGIN 등의 문에서 플러그인을 참조하는 데 사용할 이름을 지정합니다. 이것은 INFORMATION_SCHEMA.PLUGINS 또는 SHOW PLUGINS 에 의해 표시되는 이름이기도합니다.

일반 기술자는 SHOW VARIABLES 문에 대해 다양한 상태 변수를 노출하는 구조이다 validate_password_system_variables 참조합니다.

static struct st_mysql_sys_var* validate_password_system_variables[]= {
  MYSQL_SYSVAR(length),
  MYSQL_SYSVAR(number_count),
  MYSQL_SYSVAR(mixed_case_count),
  MYSQL_SYSVAR(special_char_count),
  MYSQL_SYSVAR(policy),
  MYSQL_SYSVAR(dictionary_file),
  NULL
};

validate_password_init 초기화 함수는 사전 파일을 읽기 (지정된 경우) validate_password_deinit 함수는 그 파일에 연관된 데이터 구조를 해제합니다.

일반 기술자의 validate_password_descriptor 값은 유형별 디스크립터를 가리 킵니다. 비밀번호 확인 플러그인의 경우,이 기술자의 구조는 다음과 같습니다.

struct st_mysql_validate_password
{
  int interface_version;
  /*
    This function returns TRUE for passwords which satisfy the password
    policy (as chosen by plugin variable) and FALSE for all other
    password
  */
  int (*validate_password)(mysql_string_handle password);
  /*
    This function returns the password strength (0-100) depending
    upon the policies
  */
  int (*get_password_strength)(mysql_string_handle password);
};

유형별 기술자는 다음 멤버가 있습니다.

  • interface_version : 규칙에 따라 유형별 플러그인 디스크립터는 특정 플러그인 타입의 인터페이스 버전에서 시작됩니다. 서버 플러그인을로드 할 때 interface_version 을 검사하고 플러그인과 호환 여부를 확인합니다. 비밀번호 확인 플러그인의 경우 interface_version 멤버의 값은 MYSQL_VALIDATE_PASSWORD_INTERFACE_VERSION ( plugin_validate_password.h 에서 정의됩니다)입니다.

  • validate_password : 암호가 현재 암호 정책을 충족하는지 여부를 테스트하기 위해 서버가 호출하는 함수. 암호가 타당한 경우는 1을 돌려주고, 그렇지 않은 경우는 0을 돌려줍니다. 인수는 암호이며, mysql_string_handle 값으로 전달됩니다. 이 데이터 형식은 mysql_string 서버 서비스에 의해 구현됩니다. 자세한 내용은 sql 디렉토리의 string_service.h 및 string_service.cc 소스 파일을 참조하십시오.

  • get_password_strength : 암호 강도를 평가하기 위해 서버가 호출하는 함수. 이것은 0 (약한)에서 100 (강한)까지의 값을 돌려줍니다. 인수는 암호이며, mysql_string_handle 값으로 전달됩니다.

validate_password 플러그인의 경우 유형별 기술자는 다음과 같이됩니다.

static struct st_mysql_validate_password validate_password_descriptor=
{
  MYSQL_VALIDATE_PASSWORD_INTERFACE_VERSION,
  validate_password,                         /* validate function          */
  get_password_strength                      /* validate strength function */
};

플러그인 라이브러리의 오브젝트 파일을 컴파일 및 설치하려면 섹션 24.2.4.3 "플러그인 라이브러리의 컴파일 및 설치" 단계를 사용합니다. 라이브러리 파일을 사용하려면 라이브러리 파일이 플러그인 디렉토리 ( plugin_dir 시스템 변수에 지정된 디렉토리)에 설치되어 있어야합니다. validate_password 플러그인의 경우 MySQL을 소스에서 빌드 할 때 컴파일 및 설치됩니다. 이것은 바이너리 배포판에 포함됩니다. 빌드 프로세스에서는 validate_password.so 라는 공유 객체 라이브러리가 생성됩니다 (확장자는 플랫폼에 따라 달라질 수 있습니다.)

플러그인을 실행시에 등록하려면 다음 문을 사용합니다 (필요에 따라 확장자를 변경합니다).

mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';

플러그인 로딩에 대한 추가 정보는 섹션 5.1.8.1 "플러그인 설치 및 제거" 를 참조하십시오.

플러그인의 설치를 확인하려면 INFORMATION_SCHEMA.PLUGINS 테이블을 조사하거나 SHOW PLUGINS 문을 사용합니다.

validate_password 플러그인이 설치되어있는 동안, 플러그인 암호 검사 매개 변수를 나타내는 시스템 변수를 공개합니다.

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| 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      |
+--------------------------------------+--------+

이러한 변수에 대한 설명은 섹션 6.1.2.6.2 "비밀번호 확인 플러그인의 옵션 및 변수" 를 참조하십시오.

플러그인을 테스트 후 사용하지 않으려면 다음 문을 사용하여 플러그인을 언로드합니다.

mysql> UNINSTALL PLUGIN validate_password;


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved