MySQL 调用 jar 包通过自定义函数实现在 MySQL 中无法实现的功能,可以使用 UDF 提权,本文详细描述配置过程,通过简单的 Demo 演示调用的过程。

概要

  • UDF(user defined function)用户定义函数,用户可以通过自定义函数实现在 MySQL 中⽆法例实现的功能, 定义的新函数都可以在 SQL 语句中添加使⽤, 像调⽤ MySQL 提供的常用函数⼀样;
  • 本文使用 MySQL 8.0 演示。

配置过程

  1. MySQL 有写入文件的权限,即 secure_file_priv 的值为空;
  2. 准备一个可以调用的 jar 包;
  3. 将 lib_mysqludf_sys.so 放入 MySQL plugins 目录下;
  4. 编写测试函数,调用演示效果。

secure_file_priv 配置

vi /etc/my.cnf# 增加配置
secure_file_priv=# 重启 MySQL
systemctl restart mysqld

重启后配置生效,接下来检查一下配置是否生效。

show global variables like 'secure%';

secure_file_priv 的值为空就生效啦!

准备一个 jar 包 Demo

public class SimpleApp {public static void main(String[] args) {System.out.println("Hello World");}
}

为了方便测试代码尽量简单,使用你的开发工具将其成 jar 包吧

生成 lib_mysqludf_sys.so

两种方式生成 lib_mysqludf_sys.so:

  1. 方式一: 自己编译 https://github.com/mysqludf/lib_mysqludf_sys
  2. 方式二: 使用 sqlmap 中的 lib_mysqludf_sys.so;

本文采用 sqlmap 方式演示

# 下载源码
wget https://codeload.github.com/sqlmapproject/sqlmap/zip/refs/heads/master# 解压
unzip master# 解码
python extra/cloak/cloak.py -d -i data/udf/mysql/linux/64/lib_mysqludf_sys.so_ls data/udf/mysql/linux/64/lib_mysqludf_sys.so

通过上面的步骤就可以生成 lib_mysqludf_sys.so 文件了,将其启动到 MySQL plugins 目录下。

# 先找到 plugins 目录在哪
show variables like '%plugin%';

移动文件

mv data/udf/mysql/linux/64/lib_mysqludf_sys.so /usr/lib64/mysql/plugin/# 修改文件权限
chmod +x /usr/lib64/mysql/plugin/lib_mysqludf_sys.so

编写函数测试

创建函数

# 创建函数
CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME 'lib_mysqludf_sys.so';
CREATE FUNCTION sys_get RETURNS string SONAME 'lib_mysqludf_sys.so';
CREATE FUNCTION sys_set RETURNS int SONAME 'lib_mysqludf_sys.so';
CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys.so';
CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.so';

测试效果

select sys_eval("/usr/local/bin/java -jar /usr/lib64/mysql/plugin/simple-app.jar")

输出结果:

Hello World

如果返回值为 NULL, 通常是 jar 包执行报错了。

MySQL 调用 Java 程序相关推荐

  1. matlab调用Java程序时出现 Java.lang.OutOfMemoryErrot: GC overhead limit exceeded

    matlab调用Java程序时出现 java.lang.OutOfMemoryError: GC overhead limit exceeded JDK1.6.0_37和JDK_1.7.0_60版本, ...

  2. qtp启动java程序_转: QTP六脉神剑之调用Java程序

    查看( 1147 ) / 评论( 21 ) 六脉神剑之调用程 序0Xp1zLN_0版权声明:原创作品,转载请以链接方式注明出自http://www.51testing.com/?35,否则将追究法律责 ...

  3. qtp启动java程序_QTP六脉神剑之调用Java程序

    版权声明:原创作品,转载请以链接方式注明出自,否则将追究法律责任.本文出自songfun的51Testing软件博客:不少网友对于QTP调用Java程序感到束手无策,实际上要调用Java程序是非常容易 ...

  4. loadrunner 调用java_LoadRunner调用Java程序—性能测试

    为了充分利用LoadRunner的场景控制和分析器,帮助我们更好地控制脚本加载过程,从而展现更直观有效的场景分析图表.本次将重点讨论LoadRunner如何调用Java测试代码,完成压力测试. 通常我 ...

  5. mysql连接java程序_实现Java连接mysql

    Java连接mysql数据库,代码经过运行准确无误. 下面为实例----> 用数据库操纵工具(例: SQLyogEnt)操纵mysql建表,或dos下建,如下: 数据库名:scutcs 表名:s ...

  6. 【Linux】shell调用Java程序main方法通过crontab定时执行

    来源:https://blog.csdn.net/coolcooldool/article/details/51775105 最近一个项目需要写一个batch定时读取文件往数据库里插入记录,第一次写, ...

  7. java调用java程序,详细说明

    Java教程:JavaArrays工具类这个Arrays类里均为static修饰的方法(static修饰的方法可以直接通过类名调用),可以直接通过Arrays.xxx(xxx)的形式调用方法. 1)i ...

  8. excel vba 调用java_excel中vba调用java程序并获取返回值

    在工作中,为提高excel处理效率会写一些vba宏,有时还需要调用外部java程序(比如访问webservice接口的java程序),下面的事例可做参考 一.编写简单的java调试程序 public ...

  9. ajax调用java程序,从微信小程序到鸿蒙JS开发-JS调用Java

    除轻量级智能穿戴设备,现鸿蒙支持的手机.汽车.TV.手表.平板等属于富鸿蒙,在JS语言的项目中也有Java模块,并提供了JS跨语言调用Java方法的技术.现需要实现查看商品评论时,统计出长评.中评和短 ...

最新文章

  1. two years in cnblogs.com
  2. [js] innerHTML与outerHTML有什么区别?
  3. 4j 禁止类输出日志_logback 日志详细讲解
  4. MYSQL常用操作速查
  5. zabbix server下数据库日志报错
  6. spinbox的valuechanged 不响应键盘_程序员和游戏爱好者必备,双十一热身:2019年最好的机械键盘...
  7. jQuery周日历选择器代码
  8. 关掉magiskhide_[讨论] Magisk隐藏root的实现
  9. SpringBoot 中连接阿里云rds数据库
  10. linux全局搜索是什么,linux之文本搜索工具(grep、egrep)用法
  11. vue3-HTTP请求
  12. 网易易盾js逆向分析
  13. 几种字符集与LPTSTR、LPCSTR、LPSTR、LPCTSTR、LPWSTR、LPCWSTR的意义
  14. 产品架构图到底是怎么“画”出来的?
  15. 某银行大数据体系架构设计与演进
  16. html5学习系列之klm类标签
  17. 可以精准解析国内外网站的DNS
  18. [免费专栏] Android安全之APK逆向入门介绍
  19. 如何养出优质的短视频账号?做好四个指标,账号才能越来越好
  20. android相机拍照代码,Android 调用相机拍照,适配到Android 10

热门文章

  1. 关于行人检测中的常用数据集
  2. 人工神经网络与神经网络,神经网络最新研究方向
  3. 英文歌曲:Right Here Waiting(此情可待)
  4. 51单片机的应用——利用定时器控制输出对称方波
  5. PF_INET 和 AF_INET的区别
  6. 【6Dof位姿估计】DPVL:6DoF Object Pose Estimation via Differentiable Proxy Voting Loss论文理解
  7. Git 提交规范之GIt工作流规范(Husky+eslint+stylelint+pretty+Commitlint+ lint-staged)
  8. 说说视频号最近有趣的事
  9. 频谱聚类|拉普拉斯矩阵
  10. VS2022换主题和背景