Mysql SELECT INTO OUTFILE权限被拒绝,但用户可以写入目录
我在尝试使用Mysql SELECT INTO OUTFILE权限被拒绝,但用户可以写入目录,mysql,linux,permissions,Mysql,Linux,Permissions,我在尝试使用选择到OUTFILE和使用/tmp以外的目录时遇到问题 我的Linux用户名为datam,我的MySQL用户名为lea,MySQL作为MySQL运行 当datam运行mysql-u lea database并尝试执行路径为/home/datam/xfers/online/file.csv的选择到OUTFILE时,我得到一个错误代码13,权限被拒绝。使用/tmp/file.csv是可行的,因此我非常确信MySQL中的权限没有问题 我已将mysql添加到datam组中,并通过以下方式验证
选择到OUTFILE
和使用/tmp
以外的目录时遇到问题
我的Linux用户名为datam
,我的MySQL用户名为lea
,MySQL作为MySQL
运行
当datam
运行mysql-u lea database
并尝试执行路径为/home/datam/xfers/online/file.csv
的选择到OUTFILE
时,我得到一个错误代码13,权限被拒绝。使用/tmp/file.csv
是可行的,因此我非常确信MySQL中的权限没有问题
我已将mysql
添加到datam
组中,并通过以下方式验证了这一点:
~$ sudo id mysql
uid=106(mysql) gid=114(mysql) groups=114(mysql),1001(datam)
我递归地将/home/datam/
设置为775
如果我执行sudo-umysql/bin/bash
并转到/home/datam/xfers/online/
并执行触摸文件
,它会写入一个文件
我需要做什么才能允许mysql
将文件从SELECT写入OUTFILE
我相信这不是围绕这个主题的其他问题的重复,因为我已经研究了它们,并遵循了它们的所有指示(在指向我想要的目录的所有目录上设置execute,设置GRANT FILE,等等)
MySQL用户lea
授权:
+-----------------------------------------------------------------------------------------------------------+
| Grants for lea@localhost |
+-----------------------------------------------------------------------------------------------------------+
| GRANT FILE ON *.* TO 'lea'@'localhost' IDENTIFIED BY PASSWORD '*9BB439A3A652A9DAD3718215F77A7AA06108A267' |
| GRANT ALL PRIVILEGES ON `database`.* TO 'lea'@'localhost' |
+-----------------------------------------------------------------------------------------------------------+
这可能是由mysql用户权限引起的 如前所述 要授予自己文件权限,请执行以下操作:
服务mysql重启--跳过网络--跳过授权表
mysql
UPDATE mysql.user SET文件_priv='Y',其中user='lea'和host='localhost'代码>
退出
服务mysql重启
/etc/apparmor.d/usr.sbin.mysqld
在此处添加您的项目文件夹:
/usr/sbin/mysqld {
[...]
/home/datam/xfers/online/ r,
/home/datam/xfers/online/* rw
[...]
}
最后,做一个测试
sudo /etc/init.d/apparmor reload
在现代系统上,mariaDB和mysql安装了systemd支持。除此之外,它在/etc/systemd/system/mysql.service中有以下设置: 阻止访问/home、/root和/run/user ProtectHome=true
这就是阻止它在/home中写入的原因。我发现将目录的所有者更改为与mysql守护程序相同的用户对我有效。不过,用户确实拥有文件权限。正如我在问题中所说:
使用/tmp/file.csv是有效的,所以我很有信心MySQL中的权限没有问题
您尝试过吗?“由INTO-OUTFILE或INTO-DUMPFILE创建的任何文件都可由服务器主机上的所有用户写入。原因是MySQL服务器无法创建由其帐户下的用户以外的任何人拥有的文件。(出于此原因和其他原因,您不应以root用户身份运行mysqld。)因此,文件必须是全世界可写的,以便您可以操作其内容。”并且,拥有具有文件权限的mysql用户与尝试使用mysql
operating system Account写入文件是不同的。我的上一次更新不适合添加注释。请看更新的回答肯定是应用护甲。谢谢在这种情况下,这并不是阻止它的原因,我已经接受了答案。你为从谷歌过来的人提供额外的信息是可以的,但是说这是我的问题是不正确的。你能解释一下为什么这些目录受到保护吗?我终于按照这里和这里的建议将MySQL导出到一个文件