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

时间:2015-05-20 19:43:35

标签: mysql linux permissions

我在尝试使用SELECT INTO OUTFILE并使用/tmp以外的目录时遇到问题。

我的Linux用户名为datam,我的MySQL用户为lea,MySQL运行为mysql

datam运行mysql -u lea database并尝试使用路径为SELECT INTO OUTFILE的{​​{1}}时,我会收到错误代码13,权限被拒绝。使用/home/datam/xfers/online/file.csv有效,所以我相信它不是MySQL中的权限问题。

我已将/tmp/file.csv添加到mysql群组,并已通过以下方式验证:

datam

我将~$ sudo id mysql uid=106(mysql) gid=114(mysql) groups=114(mysql),1001(datam) 递归设置为775。

如果我执行/home/datam/并转到sudo -u mysql /bin/bash并执行/home/datam/xfers/online/则会写入文件。

我需要做些什么才能让touch filemysql写一个文件?

我认为这不是围绕这个主题的其他问题的重复,因为我看了他们并遵循他们的所有指示(在所有目录上设置执行导致我想要的,设置GRANT FILE ON等等)。

MySQL用户SELECT INTO OUTFILE授予:

lea

3 个答案:

答案 0 :(得分: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
  6. linux用户可以编写文件。但apparmor可能会阻止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
    

答案 1 :(得分:1)

在现代系统上,mariaDB&amp;使用systemd支持安装mysql。除其他外,它在/etc/systemd/system/mysql.service中有这个设置:

阻止访问/ home,/ root和/ run / user

ProtectHome =真

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

答案 2 :(得分:0)

我发现将目录的所有者更改为与mysql守护程序相同的用户对我有用。