博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MYSQL中的UDF 的研究
阅读量:7198 次
发布时间:2019-06-29

本文共 1633 字,大约阅读时间需要 5 分钟。

 mysql中支持UDF扩展 ,使得我们可以调用DLL里面的函数来实现一些特殊的功能。

但是对于UDF的具体限制,MYSQL的各个版本各有不同。 下面记录一下:

听说(只是听说,没做测试),在MYSQL 4.1以前的版本中,可以将所有的DLL文件里面的任何函数都注册到MYSQL里面以供MYSQL调用。
无论这个DLL在什么位置,函数的声明是什么样的。

在MYSQL 4.1及以后的版本中,对UDF函数进行了限制,只有实现了一个特定接口的函数才可以被成功注册到MYSQL中,
这样就防止了通过MYSQL非法调用系统的DLL。

在MYSQL5以后,对注册的DLL的位置有了限制,创建函数的时候,所对应的DLL不能包含/或者\,简单的理解就是不能是绝对路径。
所以我们将DLL释放到system32目录,来跳过这个限制。。或者放到盘符的根目录下通过c:udf.dll这种形式的写法来跳过限制。

经过28ice大牛的提醒,发现原来只要把dll放到PATH这个环境变量所表示的任何一个目录下面,效果跟放到system32目录下面一样。
也可以使用。

再说MYSQL5.1,这里有个问题相信大家会经常遇到的。。
大家有的时候在创建函数的时候,常常会遇到

这个错误。可是我们的语句没有写错,DLL也是免杀的或者服务器上根本没装杀软。。
好多人这里就不明白了。。

这是因为MYSQL 5.1及以后的版本中,又多了一个限制。
创建函数时所用的DLL只能放在mysql的plugin目录里面。。
而且这个plugin目录默认是不存在的。。挺YD吧,,可能就是为了防止通过into dumpfile将DLL来写到这个文件夹。。
MYSQL是无法创建目录的哦, 如果into dumpfile的目标目录不存在是会报错的。

需要手动创建 ,但是它却是一个系统变量。
我在虚拟机上装了MYSQL 5.1.3进行了测试,安装目录是:

通过:

view source 
print?
1 show variables like '%plugin%';


可以看到:
+---------------+------------------------------------------------------------------------
| Variable_name | Value
+---------------+-------------------------------------------------------------------------
| plugin_dir    | C:\Program Files\MySQL\MySQL Server 5.1\lib/plugin
+---------------+-------------------------------------------------------------------------

plugin目录位置是mysql安装目录下的lib/plugin ,需要我们手动创建 。
然后将udf.dll传到这个位置,再创建函数 ,这时就会成功了。

但是这个变量的值是只读的,尝试用

view source 
print?
1 set @@plugin_dir = 'd:\\';


去更改它的值会发生错误。

只能通过修改php.ini ,在里面添加一个

才可以修改这个值 。。
无奈。。
所以在导出UDF提权之前 ,先确定一下MYSQL的版本是有必要的。

如果是5.1以后的,那就不行了,如果是5.1以前的版本创建函数的时候还报Can't open shared library这个错误。
那就要看看DLL是不是真的被导出了,还是被杀软隔离或者干掉了。

本文转hackfreer51CTO博客,原文链接:http://blog.51cto.com/pnig0s1992/571077,如需转载请自行联系原作者

你可能感兴趣的文章
使用mian函数的命令行参数
查看>>
Bash小技巧
查看>>
数据存储
查看>>
History - BOM对象
查看>>
centos7.2下安装python3.6.2
查看>>
列表(一)
查看>>
【转】王钿《浅谈逻辑设计的学习》
查看>>
js闭包
查看>>
几何画板如何通过迭代法绘图
查看>>
BarTender表单的人性化设计—分组框
查看>>
在 CSS 中,width 和 height 指的是内容区域的宽度和高度
查看>>
河马SQLServer注入工具v1.1
查看>>
Linux基础知识随笔记
查看>>
Oracle:ORA-01791: 不是 SELECTed 表达式
查看>>
SpringMVC快速入门
查看>>
2019-05-20 Java学习日记之String类型
查看>>
.net core Jenkins持续集成Linux、Docker、K8S
查看>>
python入门
查看>>
我的友情链接
查看>>
我的友情链接
查看>>