一道CTF题目引发的Mysql的udf学习
关键词:
UDF:
User defined Function
查看Mysql插件路径
Select @@plugin_dir
Show variables like “plugin%”
UDF是Mysql的一个拓展接口,可以用户自定义函数 ,是拓展mysql自带函数满足不了要求的情况。
UDF的特性,函数能返回字符串、整数或实数
语法:
CREATE FUNCTION/DROP FUNCTION语法
CREATE[AGGREGATE]FUNCTION function_name RETURNS {STRING|INEGER|REAL} SONAME shared_library_name
DROP FUNCTION function_name
Funtion_name是用在SQL声明中以备调用的函数名字,RETURNS子句说明函数返回值的类型。Shared_library_name是共享目标文件的基本名,共享目标文件含有实现函数的代码。该文件必须位于一个能被你系统的动态连接或者搜索的目录里。
你必须有mysql 数据库的INSERT 权限才能创建一个函数,你必须有mysql 数据库的DELETE权限才能撤销一个函数。这是因为CREATE FUNCTION 往记录函数名字,类型和共享名的mysql.func系统表里添加了一行,而DROP FUNCTION则是从表中删掉这一行。
show grants for test
值得注意的是,要使得UDF机制能够起作用,必须使用C或者C++编写函数,你的系统必须支持动态加载,而且你必须是动态编译的mysqld(非静态)
udf编写