首页 > 解决方案 > 如何使 MySQL INTO OUTFILE 输出可按组/每个人写入?

问题描述

我刚买了一台新笔记本电脑(一台运行 Mac OS Big Sur 的 M1 Macbook),我有时间在本地设置我的一个项目;这个项目的两个大组件是一个 MySQL 数据库和一个 PHP webapp,在我的机器上我都通过非 VM XAMPP(版本 8.0.8)运行 - 虽然从技术上讲,XAMPP 只有 MariaDB,而不是 MySQL(但我'从来没有注意到一个问题)。

INTO OUTFILE...webapp 的一部分使用 MySQL 的功能生成动态 .csv 。但是,一旦 MySQL 输出文件,PHP 脚本需要在将其下载到浏览器之前对其进行读取和操作,因此运行 PHP 脚本的用户需要写入权限。

该脚本位于/Applications/XAMPP/project/webapp/download.php,并且所有内容都设置为全部访问sudo chmod -R 777 project/(我知道,这是不好的做法,但这仅用于开发)。

exec('whoami')告诉我脚本在daemonXAMPP 的 Apache 服务器的用户下运行。该脚本由myusername一组admin包含rootmyusername.

生成时,来自 MySQL 的文件由_mysql具有 groupadmin权限的用户拥有,即 644。因此,当此脚本运行时,它会生成文件,但在读取/处理文件数据后-rw-r--r--调用时会收到以下 PHP 警告:file_put_contents()

Warning: file_put_contents(/Applications/XAMPP/xamppfiles/htdocs/project/webapp/XXXXXXXXXX.csv): 
Failed to open stream: 
Permission denied in /Applications/XAMPP/xamppfiles/htdocs/project/webapp/download.php on line 26

我不知道如何让除 mysql 用户之外的任何人写入此文件。关键是我的旧机器 - 运行 Mojave 的 2013 Macbook Pro - 没有任何明显不同的配置,并且它可以工作(它确实使用 XAMPP 7.4.6,但除了使用 PHP 7 而不是 8 之外,差异似乎很小)。我在那里注意到,MySQL 生成的文件有-rw-rw-rw-权限,所以管理员组(或者我猜每个人,因为我不相信守护进程属于那里的管理员组)可以写入它 - 我就是无法获得我的新电脑来做。

除了一般的权限摆弄(我不是这种东西的向导),搞乱组等等,我真正尝试过的只是UMASK在 mysql.server 和 mysqld_safe 中设置 MySQL 环境变量;似乎没有任何效果,而且像这样的配置更改让我很怀疑,因为我的旧电脑不需要它。并且作为记录,虽然不确定它是否相关 - secure_file_privMySQL 中的变量设置为空白并且 root / localhost 组合具有文件权限;生成文件本身不是问题。

如何在不更改一行代码的情况下让事情顺利进行?很明显,问题出在我的配置中。不确定是否值得一提,但我确实从自制软件安装了另一个 MySQL ......那里可能有一些冲突吗?话虽如此,我的旧电脑也有另一个 MySQL 实例,但安装在 MySQL 网站之外。

标签: phpmysqlmacospermissionsxampp

解决方案


推荐阅读