今天在测试UDF
提权时,发现一个令人蛋疼的BUG
。
正常在导入UDF.dll
后,直接创建函数即可。
mysql> create function sys_eval returns string soname "udf.dll";
Query OK, 0 rows affected (0.00 sec)mysql> select * from mysql.func;
+----------+-----+---------+----------+
| name | ret | dl | type |
+----------+-----+---------+----------+
| sys_eval | 0 | udf.dll | function |
+----------+-----+---------+----------+
1 row in set (0.00 sec)
删除可以使用drop function
或者delete from
,先用drop function
删除一次
mysql> drop function sys_eval;
Query OK, 0 rows affected (0.02 sec)mysql> select * from mysql.func;
Empty set (0.00 sec)
再次创建也可以成功的
mysql> create function sys_eval returns string soname "udf.dll";
Query OK, 0 rows affected (0.00 sec)mysql> select * from mysql.func;
+----------+-----+---------+----------+
| name | ret | dl | type |
+----------+-----+---------+----------+
| sys_eval | 0 | udf.dll | function |
+----------+-----+---------+----------+
1 row in set (0.00 sec)
再拿delete from mysql.func where name='sys_eval'
来删除,就会发现创建不成功了,有如下提示
mysql> create function sys_eval returns string soname "udf.dll";
Query OK, 0 rows affected (0.02 sec)mysql> delete from mysql.func where name='sys_eval';
Query OK, 1 row affected (0.01 sec)mysql> create function sys_eval returns string soname "udf.dll";
ERROR 1125 (HY000): Function 'sys_eval' already existsmysql> select * from mysql.func;
Empty set (0.00 sec)
看来只能使用drop
关键字来删除,暂时没有好的解决这个问题的办法。