MySQL 调用 Java 程序

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 包执行报错了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 微信小程序是腾讯公司基于微信平台推出的一种轻量级应用形态,它无需用户下载安装即可在微信内直接使用。自2017年正式上线以来,小程序凭借其便捷性、易获取性和出色的用户体验迅速获得市场认可,并成为连接线上线下服务的重要桥梁。 小程序的核心特点包括: 零安装:用户只需通过微信扫一扫或搜索功能,即可打开和使用小程序,大大降低了用户的使用门槛和手机存储空间压力。 速度快:加载速度相较于传统的HTML5网页更快,依托于微信强大的基础设施,能够实现近乎原生应用的流畅体验。 跨平台兼容:开发者一次开发,即可在多种终端设备上运行,免除了复杂的适配工作,大大提高了开发效率。 社交属性强:小程序可以无缝嵌入微信生态,支持分享至聊天窗口、朋友圈等社交场景,有利于用户间的传播和裂变增长。 丰富接口能力:提供丰富的API接口,可调用微信支付、位置服务、用户身份识别等多种功能,方便企业进行商业服务的集成与拓展。 目前,微信小程序已经覆盖了电商购物、生活服务、娱乐休闲、教育学习、工具助手等多个领域,为数以亿计的用户提供便捷的服务入口,也为众多商家和开发者提供了新的商业模式和创业机会。随着技术的不断升级和完善,小程序已成为现代移动互联网生态中不可或缺的一部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值