【问题标题】:Does mysqldump require different privileges if executed through PHP's passthru()?如果通过 PHP 的 passthru() 执行,mysqldump 是否需要不同的权限?
【发布时间】:2023-02-14 12:01:31
【问题描述】:

我正在使用这段代码:

<?php

$db_user = '....';
$db_pass = '....';
$db_name = '....';

$filename = 'test.sql';

$mime = "application/text";

header( "Content-Type: " . $mime );
header( 'Content-Disposition: attachment; filename="' . $filename . '"' );


$cmd = "mysqldump -u $db_user  --single-transaction --no-tablespaces --ignore-table=$db_name.mytable --add-drop-table --password=$db_pass $db_name" ;

passthru( $cmd );

exit(0);

从 PHP 页面创建数据库转储。如果我使用具有全局权限的 MySQL 用户,它会很好地工作,如果我使用具有所有权限(GRANT 除外)但仅在数据库 $db_name 上的 MySQL 用户,它就不起作用(生成一个空文件)。

如果我从控制台执行 mysqldump(以管理员用户身份通过​​ SSH 登录),同一用户(权限较少的用户)工作正常。

任何想法?

【问题讨论】:

标签: php mysql security


【解决方案1】:

mysqldump 执行所需的权限不会因为它是通过 PHP 中的 passthru() 函数执行还是通过命令行执行而受到影响。执行 mysqldump 所需的权限取决于命令使用的参数和导出的数据。

例如,要执行 mysqldump 并导出数据库,执行该命令的用户必须对要导出的数据库中的所有表具有 SELECT 权限。此外,如果使用 --all-databases 选项,则用户还必须具有 SHOW DATABASES 权限。

无论 mysqldump 是通过命令行执行还是通过 PHP 中的 passthru() 执行,执行命令的用户都必须具有导出成功所需的权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 2016-10-09
    相关资源
    最近更新 更多