对文件的查询输出给出拒绝访问错误
Posted
技术标签:
【中文标题】对文件的查询输出给出拒绝访问错误【英文标题】:Query output to a file gives access denied error 【发布时间】:2010-10-14 16:39:20 【问题描述】:我正在尝试使用以下查询将 mysql 中 SQL 查询的输出捕获到文本文件中。
select count(predicate),subject from TableA group by subject into outfile '~/XYZ/output.txt';
我收到以下错误。
错误 1045 (28000):拒绝用户 'username'@'%' 的访问(使用密码:YES)
任何想法,我哪里错了?是权限相关的问题吗?
【问题讨论】:
你到底在做什么?你是在mysql客户端控制台还是在系统终端输入命令? 我正在通过 MySQL 控制台输入命令 【参考方案1】:outfile 是 mysql 自己的权限。
如果你有 ALL,它包括在内。
但是,如果您只有一个安全的集合,例如 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权限,无论哪种方式。
【讨论】:
【参考方案2】:如果它是您的系统(您是管理员),并且您知道如何保护它,这就是您启用这些权限的方式。
USE mysql;
UPDATE user SET File_priv = 'Y' WHERE User = 'db_user';
FLUSH PRIVILEGES;
【讨论】:
以上是关于对文件的查询输出给出拒绝访问错误的主要内容,如果未能解决你的问题,请参考以下文章