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;