SELECT INTO OUTFILE权限被拒绝,但用户可以写入目录

tub*_*035 5 mysql linux permissions

我有一个问题,试图使用SELECT INTO OUTFILE和使用除以外的目录/tmp.

我的Linux用户被命名datam,我的MySQL用户是lea,而MySQL运行为mysql.

datam运行mysql -u lea database并尝试SELECT INTO OUTFILE使用路径时/home/datam/xfers/online/file.csv,我得到错误代码13,权限被拒绝.使用/tmp/file.csv作品,所以我相信它不是MySQL中的权限问题.

我已添加mysql到该论坛datam并已通过以下方式验证:

~$ sudo id mysql
uid=106(mysql) gid=114(mysql) groups=114(mysql),1001(datam)
Run Code Online (Sandbox Code Playgroud)

/home/datam/递归设置为775.

如果我这样做sudo -u mysql /bin/bash,去/home/datam/xfers/online/,做touch file它写入一个文件.

mysql要从中写入文件,我需要做SELECT INTO OUTFILE什么?

我认为这不是围绕这个主题的其他问题的重复,因为我已经查看了它们并遵循了所有指令(在所有目录上设置执行,直到我想要的那个,设置GRANT FILE ON等).

MySQL用户lea授予:

+-----------------------------------------------------------------------------------------------------------+
| Grants for lea@localhost                                                                                  |
+-----------------------------------------------------------------------------------------------------------+
| GRANT FILE ON *.* TO 'lea'@'localhost' IDENTIFIED BY PASSWORD '*9BB439A3A652A9DAD3718215F77A7AA06108A267' |
| GRANT ALL PRIVILEGES ON `database`.* TO 'lea'@'localhost'                                    |
+-----------------------------------------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

Ale*_*tan 5

这可能是由mysql用户权限引起的.

如上所述https://dba.stackexchange.com/questions/17029/cannot-output-mysql-data-to-file

要为自己提供FILE权限,请执行以下操作:

  1. service mysql restart --skip-networking --skip-grant-tables
  2. mysql <hit enter>
  3. UPDATE mysql.user SET File_priv = 'Y' WHERE user='lea' AND host='localhost';
  4. exit
  5. service mysql restart

linux用户可以写一个文件.但apparmor可能会阻止mysql服务.

检查此文件:/etc/apparmor.d/usr.sbin.mysqld.

在那里添加项目文件夹:

/usr/sbin/mysqld {
    [...]
    /home/datam/xfers/online/ r,
    /home/datam/xfers/online/* rw
    [...]
}
Run Code Online (Sandbox Code Playgroud)

最后,做一个

sudo /etc/init.d/apparmor reload
Run Code Online (Sandbox Code Playgroud)


小智 5

在现代系统 mariaDB 和 mysql 上安装了 systemd 支持。除其他外,它在 /etc/systemd/system/mysql.service 中有此设置:

防止访问 /home、/root 和 /run/user

保护家=真

这就是阻止它写入 /home 的原因。