开发者社区> 技术小美> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

MYSQL中的UDF 的研究

简介:
+关注继续查看

 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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云系统盘与存储盘如何选择(ESSD AutoPL、高效云盘、ESSD云盘、SSD云盘)
阿里云系统盘与存储盘如何选择?目前阿里云服务器有ESSD AutoPL、高效云盘、ESSD云盘、SSD云盘可供选择,很多新手用户并不清楚他们之间的区别,也就不知道应该如何选择,因为不同的云盘在最大IOPS、最大吞吐量等性能上是有区别的,下面我们一起来他们之间的区别,这样就有助于我们选择适合自己需求的系统盘与存储盘了。
25 0
mysql 存储过程的一个bug或者是我…
原文: ----------------------------------------- 在使用 procedure +transaction+update+select 时
30 0
MySQL 三节点企业版发布通用型规格
信息摘要: RDS MySQL 5.7 三节点企业版发布通用型规格适用客户: 1. 适用于企业核心系统的数据库,如交易、账务等系统。2. 同时适用于数据可靠性要求极高的行业领域,如财务、银行、证券、保险等行业。
533 0
Mysql中的存储过程详细教程
Mysql中的存储过程详细教程 有哪些特性 有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能; 函数的普遍特性:模块化,封装,代码复用; 速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤; 几.
2542 0
在CentOS下安装配置MySQL(转)
今天刚把项目做完,需要马上部署到新到的测试服务器上,于是乎,要在服务器上安装环境,由于好久在linux上部署了,手有些生,比较费劲装完,现在把重要步骤贴出,供自己以后参照。1、首先要看看有没有已经安装好的MySQL,以免产生冲突# rpm -qa | grep MySQL2、卸载冲突的版本# rpm...
799 0
MYSQL-用户权限的验证过程(转)
知识点 因为MySQL是使用User和Host两个字段来确定用户身份的,这样就带来一个问题,就是一个客户端到底属于哪个host。 如果一个客户端同时匹配几个Host,对用户的确定将按照下面的优先级来排 基本观点越精确的匹配越优先 Host列上,越是确定的Host越优先,[localhost, 192.168.1.1, wiki.yfang.cn] 优先于[192.168.%, %.yfang.cn],优先于[192.%, %.cn],优先于[%] User列上,明确的username优先于空username。
821 0
《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之78——BREW手机中的事件处理
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。
580 0
+关注
6819
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载