使用 MySQL UDF 执行命令 - sys_exec 不起作用

Posted

技术标签:

【中文标题】使用 MySQL UDF 执行命令 - sys_exec 不起作用【英文标题】:Command execution with a MySQL UDF - sys_exec does not work 【发布时间】:2019-12-15 23:00:43 【问题描述】:

我正在尝试从 MariaDB 服务器运行 python 脚本。我为此安装了 mysqludf 库。我正在尝试使用 sys_exec 函数运行脚本,但没有结果。我创建了一个测试文件,它只是一个带有“DONE”信息的 .txt 文件。

我以 root 用户身份执行命令,因此我拥有所有权限。 运行命令:

SELECT sys_exec('python3 /home/Documents/test.py')

不执行任何操作并返回错误代码 512。 运行命令:

SELECT sys_exec('sudo python3 /home/Documents/test.py')

返回错误代码 256。

我已经检查了apparmor状态,似乎没有什么问题:

apparmor module is loaded.
42 profiles are loaded.
40 profiles are in enforce mode.
   /sbin/dhclient
   /snap/core/4486/usr/lib/snapd/snap-confine
   /snap/core/4486/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
   /snap/core/6964/usr/lib/snapd/snap-confine
   /snap/core/6964/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
   /snap/core/7169/usr/lib/snapd/snap-confine
   /snap/core/7169/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
   /snap/core/7270/usr/lib/snapd/snap-confine
   /snap/core/7270/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
   /usr/bin/evince
   /usr/bin/evince-previewer
   /usr/bin/evince-previewer//sanitized_helper
   /usr/bin/evince-thumbnailer
   /usr/bin/evince//sanitized_helper
   /usr/bin/man
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/NetworkManager/nm-dhcp-helper
   /usr/lib/connman/scripts/dhclient-script
   /usr/lib/cups/backend/cups-pdf
   /usr/lib/snapd/snap-confine
   /usr/lib/snapd/snap-confine//mount-namespace-capture-helper
   /usr/sbin/cups-browsed
   /usr/sbin/cupsd
   /usr/sbin/cupsd//third_party
   /usr/sbin/ippusbxd
   /usr/sbin/tcpdump
   man_filter
   man_groff
   snap-update-ns.core
   snap-update-ns.eclipse
   snap-update-ns.gnome-calculator
   snap-update-ns.gnome-characters
   snap-update-ns.gnome-logs
   snap-update-ns.gnome-system-monitor
   snap-update-ns.pycharm-community
   snap.core.hook.configure
   snap.gnome-calculator.gnome-calculator
   snap.gnome-characters.gnome-characters
   snap.gnome-logs.gnome-logs
   snap.gnome-system-monitor.gnome-system-monitor
2 profiles are in complain mode.
   snap.eclipse.eclipse
   snap.pycharm-community.pycharm-community
4 processes have profiles defined.
4 processes are in enforce mode.
   /sbin/dhclient (734) 
   /usr/sbin/cups-browsed (33904) 
   /usr/sbin/cupsd (33899) 
   /usr/sbin/cupsd (33928) 
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.

我还仔细检查了 root 是否有 sudo 权限,如果确实有。

什么可能导致问题?有什么方法可以从 MariaDB Server 运行 python 脚本吗?

【问题讨论】:

【参考方案1】:

我使用全局安装解决它,例如:

sudo -H pip3 install psycopg2

【讨论】:

以上是关于使用 MySQL UDF 执行命令 - sys_exec 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

MySQL UDF 插件无法执行 Shell 命令(使用 system() 或 execl())

使用 MySQL UDF 执行命令 - sys_exec 不起作用

MySQL_UDF提权

如何使用 UDF 在 MySQL 中开发类似“显示进程”的命令

MySQL UDF sys_exec

每日一问-什么是Mysql数据库的UDF提权?