一尘不染

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

sql

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

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

我收到以下错误。

错误1045(28000):用户’username’@’%’的访问被拒绝(使用密码:是)

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


阅读 121

收藏
2021-03-17

共1个答案

一尘不染

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中转储到文件中,就可以了。

或者,找到一种方法来获取自己的mysql权限,无论哪种方式。

2021-03-17