从 MySQL 执行 shell 命令

Mos*_*she 5 mysql database stored-procedures

我知道我正在寻找的可能是一个安全漏洞,但由于我设法在 Oracle 和 SQL Server 中做到了这一点,所以我会尝试一下:

我正在寻找一种从 MySQL 上的 SQL 脚本执行 shell 命令的方法。如有必要,可以创建和使用新的存储过程。

注意:我不是在寻找 mysql 命令行工具提供的 SYSTEM 命令。相反,我正在寻找这样的东西:

开始 IF COND1... EXEC_OS cmd1; 否则 EXEC_OS cmd2; 结尾;

其中 EXEC_OS 是调用我的代码的方法。

Bil*_*win 2

您可能需要考虑使用功能更强大的脚本语言编写脚本,例如 Perl、Python、PHP 或 Ruby。所有这些语言都有运行 SQL 查询的库。

存储过程语言中没有用于运行 shell 命令的内置方法。这被认为是一个坏主意,不仅因为它是一个安全漏洞,而且因为 shell 命令的任何效果都不遵守事务隔离或回滚,就像在存储过程中执行的任何 SQL 操作的效果一样:

START TRANSACTION;
CALL MyProcedure();
ROLLBACK;
Run Code Online (Sandbox Code Playgroud)

如果MyProcedure执行了创建或编辑文件、发送电子邮件等操作,这些操作将不会回滚。

我建议在存储过程中执行 SQL 工作,并在调用存储过程的应用程序中执行其他工作。

  • 这是一个虚假的学术论点!许多现实世界的问题不需要回滚能力。许多现实世界的问题可以使用由此类功能启用的事件驱动处理类型。 (2认同)