mysql udf 예제

Posted on

UdF를 사용하려면 mysqld를 동적으로 연결해야 합니다. mysqld에서 기호에 액세스해야 하는 UDF를 사용하려면(예: sql/udf_example.cc의 메타폰 함수는 default_charset_info를 사용함) 프로그램을 -rdynamic(man dlopen 참조)와 연결해야 합니다. 고정 소수점 수가 없는 인수의 경우 소수점 값은 31로 설정되며, 이는 소수점, FLOAT 및 DOUBLE 데이터 형식에 허용되는 최대 소수점 수보다 1 더 많은 값입니다. 이 값은 mysql_com.h 헤더 파일에서 상수 NOT_FIXED_DEC로 사용할 수 있습니다. 함수가 자체 용도로 사용할 수 있는 포인터입니다. 예를 들어 함수는 initid->ptr을 사용하여 할당된 메모리를 자체적으로 통신할 수 있습니다. xxx_init()는 메모리를 할당하고 이 포인터에 할당해야 합니다: 악용을 위해 UdF를 사용하는 것이 광범위하며 이를 사용하여 임의의 원격 코드(예: sqlmap)를 실행하는 많은 공용 도구가 있습니다. 이 예제에서 왜 볼 수 있습니다: 그것은 당신의 요구에 맞게 새로운 함수를 작성 하는 것은 거의 사소한. 가장 큰 장점은 코드가 신뢰할 수 있는 실행 환경(MySQL) 내에 로드되므로 운영 체제에서 검색되지 않는다는 것입니다. 반면에 a) 배포 및 b) 백도어에 액세스할 수 있는 일정 수준의 권한이 필요합니다. 원본 트리에서 udf_example.def 및 udf_example.cc라는 이름의 파일에 대한 sql 디렉토리를 찾습니다. 이 디렉토리의 두 파일을 작업 디렉토리에 복사합니다.

CREATE FUNCTION 및 DROP FUNCTION 문은 UDF 레지스트리 역할을 하는 mysql 시스템 데이터베이스의 func 테이블을 업데이트합니다. 함수의 이름, 유형 및 공유 라이브러리 이름은 mysql.func 테이블에 저장됩니다. 함수를 만들려면 mysql 데이터베이스에 대한 INSERT 권한이 있어야 합니다. 함수를 삭제하려면 mysql 데이터베이스에 대한 DELETE 권한이 있어야 합니다. UDF 메커니즘이 작동하려면 함수를 C 또는 C++로 작성해야 하며 운영 체제는 동적 로드를 지원해야 합니다. MySQL 소스 배포에는 5개의 UDF 함수를 정의하는 파일 sql/udf_example.cc가 포함됩니다. UDF 호출 규칙의 작동 방식을 보려면 이 파일을 참조하십시오.