查询输出到文件会给出拒绝访问错误

时间:2009-03-21 02:27:16

标签: mysql sql mysql-error-1045 into-outfile

我正在尝试使用以下查询捕获MySQL中SQL查询的输出到文本文件。

select count(predicate),subject from TableA group by subject into outfile '~/XYZ/output.txt';

我收到以下错误。

  

ERROR 1045(28000):用户'用户名'@'%'的访问被拒绝(使用密码:是)

任何想法,我哪里出错了?这是与许可相关的问题吗?

2 个答案:

答案 0 :(得分:30)

Outfile是mysql自己的权限。

如果你把它全部包括在内。

但是如果你只有一个安全的集合,如SELECT,INSERT,UPDATE,DELETE,DROP,CREATE,而不是OUTFILE,那么“into outfile”将不适用于查询。

原因是从MySQL内部访问文件,即使是出于写入目的,也存在一定的安全风险,因为如果从mysql访问文件,您可以访问mysql用户可以访问的任何文件,从而绕过基于用户的文件权限。

为了解决这个问题,你可以直接将查询运行到你用来运行sql的shell /语言的输出中。

这是一个* nix示例

>$ echo "select count(predicate),subject from TableA group by subject"  | mysql -u yourusername -p yourdatabasename > ~/XYZ/outputfile.txt

但是在没有“\”的情况下在一行上完成所有操作或使用“\”来逃避换行符。

这里发生的是你正在运行mysql客户端的查询并且它正在吐出结果,然后你将输出定向到一个文件。因此永远不会从mysql中调用该文件,它是在mysql运行后调用的。

因此,使用mysql获取信息,然后将数据从您自己的用户shell转储到文件中,您就可以了。

或者找到一种方法来获得outfile mysql权限,无论哪种方式。

答案 1 :(得分:4)

如果它是您的系统(您是管理员),并且您知道如何保护它,那么这就是您启用这些权限的方式。

USE mysql;
UPDATE user SET File_priv = 'Y' WHERE User = 'db_user';
FLUSH PRIVILEGES;