`

select into outfile access deny问题

阅读更多
本文转自:http://hatemysql.com/2010/06/29/select-into-outfile-access-deny%E9%97%AE%E9%A2%98/

为应用建立了rnd的帐号,专门为他们查询线上数据库用的,当然,只有他们上了生产网络以后才能连上数据库,安全方面我们还是很注意的,呵呵。
授权的语句如下:
grant select on armory.* to rnd;
flush privileges;

select查询数据没有问题,但是有的用户有了更多的需求,他想把数据导出来,简单的处理的话,可以用select into outfile导出来。自己指定字段的分隔,行分隔等等。
但是用户一查询就报:access deny的错误,权限不对。
rnd@localhost : armory 09:26:31> select * into outfile ‘/tmp/1.txt’ from os limit 5;
ERROR 1045 (28000): Access denied for user ‘rnd’@'%’ (using password: NO)
郁闷的是MySQL没有说缺少了那个权限。

在本机测试了一下,
grant all on armory.* to rnd;
flush privileges;
给rnd所有的权限以后,还是报权限错误。这个就奇怪了,所有的权限都给它了,还报错?不可理喻阿。
实在搞不定,最后让用户:
mysql -urnd -p -e ‘select * from os limit 5;’ >1.txt
的变通方法。

一直被这个纠结着,突然后来有一天,查询了一下MySQL的文档,找到是file的权限没有加上去,但是当时MySQL对应的库的所有权限我都加上去了阿。灵光一闪,file是全局的权限,在MySQL中对单个库是没有这个权限概念的,所以就算我把库上的所有权限给了rnd,file的权限其实还是没有附权给它的。不信的话,我们这就试试:
root@localhost : (none) 09:55:14> grant file on armory.* to rnd;
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
果然,File权限是GLOBAL权限,不能附权给数据库。
GLOBAL FILE附权以后
root@localhost : mysql 09:58:21> grant file on *.* to rnd;
Query OK, 0 rows affected (0.00 sec)
select查询就可以执行了:
rnd@localhost : armory 10:00:42> select * into outfile ‘/tmp/1.txt’ from os limit 5;
Query OK, 5 rows affected (0.00 sec)

其实MySQL的权限可能比较拗,让我们一下子适应不过来。MySQL的权限可以精细到列,权限判断是根据GLOBAL,DB,TABLE,COLUMN来授权的,可以简单的理解为他们对应到mysql库中的四个表:user,db,tables_priv,columns_priv这几个表。当然,MySQL没有这么简单拉。有兴趣的话可以好好看一下MySQL的reference或者其他介绍。举个例子:
rnd@localhost : armory 10:00:43> show grants for rnd;
+————————————————-+
| Grants for rnd@%                                |
+————————————————-+
| GRANT FILE ON *.* TO ‘rnd’@'%’                  |
| GRANT ALL PRIVILEGES ON `armory`.* TO ‘rnd’@'%’ |
+————————————————-+
2 rows in set (0.00 sec)
grant对同一个用户就分了两行,分别对应着user和db里面的两行:


补充一下:

导出数据格式

字段之间的分隔字符,转义字符,包括字符,及记录行分隔字符。列在下面:
FIELDS
TERMINATED BY '\t'
[OPTIONALLY] ENCLOSED BY ''
ESCAPED BY '\\'
LINES
TERMINATED BY '\n'

TERMINATED 表示字段分隔
[OPTIONALLY] ENCLOSED 表示字段用什么字符包括起来,
如果使用了OPTIONALLY则只有CHAR和VERCHAR被包括 ESCAPED 表示当需要转义时用什么作为转义字符
LINES TERMINATED 表示每行记录之间用什么分隔

分享到:
评论

相关推荐

    用SELECT… INTO OUTFILE语句导出MySQL数据的教程

    表数据导出到一个文本文件最简单的方法是使用SELECT… INTO OUTFILE语句的查询结果直接导出到一个文件在服务器主机上。 导出数据的SELECT…INTO OUTFILE声明: 这句话的语法结合了常规的SELECT INTO OUTFILE文件名的...

    用SELECT... INTO OUTFILE语句导出MySQL数据的教程

    主要介绍了用SELECT... INTO OUTFILE语句导出MySQL数据的教程,是MySQL入门学习中的基础知识,需要的朋友可以参考下

    MySQL+数据导入导出+实用技巧

    本文介绍了MySQL数据库中数据的导入导出方法,包括使用SELECT INTO OUTFILE语句将数据导出到文件中,以及使用LOAD DATA INFILE语句将文件中的数据导入到数据库中。同时,还介绍了默认的导入导出格式,即分隔符为制表...

    mysql导出指定数据或部份数据的方法

    这个时候mysqldump可能就不大好使了,...方法二、使用MySQL的SELECT INTO OUTFILE 备份语句(推荐) 在下面的例子中,生成一个文件,各值用逗号隔开。这种格式可以被许多程序使用。 代码如下:SELECT a,b,a+b INTO OUTF

    详解Mysql导出数据的几种方式

    Part1 select into outfile 先说最短小精悍的select into outfile, 这是小型数据库分析数据最常用的采集数据方式,具体语法如下: 【select 语句】 into outfile 【导出文件名】 【导出参数】 【select语句】是经典...

    MySQL数据库的数据备份和恢复详解

    目前MySQL 支持的免费备份工具有:mysqldump、mysqlhotcopy,还可以用 SQL 语法进行备份:BACKUP TABLE 或者 SELECT INTO OUTFILE,又或者备份二进制日志,还可以是直接拷贝数据文件和相关的配置文件。MyISAM 表是...

    UNIX下MySQL 备份和恢复

    目前 MySQL 支持的免费备份工具有:mysqldump、mysqlhotcopy,还可以用 SQL 语法进行备份:BACKUP TABLE 或者 SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。...

    outfile C++写入文件

    在C++中将数据输出到文件需要用到文件流,将数据输出到文件(即下图中的写文件)时会用到ofstream 类.下面就具体介绍如何将一段字符或数据输出到文件中并保存

    MySQL数据库迁移快速导出导入大量数据(外发).txt

    使用MySQL的SELECT INTO OUTFILE 、LOAD DATA INFILE快速导出导入数据 LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中。MySQL官方文档也说明了,该方法比一次性插入一条数据性能快20倍。

    YukBrandes#mysql_notes#11.导入导出1

    # 导入文件本身没有换行导出数据库:select * into outfile "E:\test\test.txt" fields terminated by

    MySQL 表数据的导入导出操作示例

    1. 使用 SELECT …INTO OUTFILE …命令来导出数据,具体语法如下。 mysql> SELECT * FROM tablename INTO OUTFILE 'target_file' [option]; 其中 option 参数可以是以下选项: FIELDS TEMINATED BY ‘string’ ...

    outfile.sql

    outfile.sql

    把mysql查询结果保存到文件的shell脚本

    主要介绍了把mysql查询结果保存到文件的shell脚本,使用mysql的SELECT INTO OUTFILE备份语句,需要的朋友可以参考下

    mysql查询结果输出到文件的方法

    mysql> select count(1) from table into outfile ‘/tmp/test.xls’; Query OK, 31 rows affected (0.00 sec) 在目录/tmp/下会产生文件test.xls 遇到的问题: mysql> select count(1) from table into outfile ...

    t_book(从mysql下载查询结果的数据库表)

    从mysql下载查询结果的数据库表,对应的sql为 ...into outfile 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/t_book.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n'

    MySQL 导出数据为csv格式的方法

    1. into outfile 代码如下: SELECT * FROM mytable   INTO OUTFILE ‘/tmp/mytable.csv’   FIELDS TERMINATED BY ‘,’   OPTIONALLY ENCLOSED BY ‘”‘   LINES TERMINATED BY ‘\n’;   在我使用过程...

    MySQL实现导出excel的方法分析

    本文实例讲述了MySQL实现导出excel的方法。...能导成功的大前提是你有登录权限,要有 select 权限,而且还要有 file 权限,如果没有 file 权限,你将无法执行 select….into outfile 和 load data in

    深入分析MySQL 的备份和恢复机制

    目前 MySQL 支持的免费备份工具有: mysqldump、mysqlhotcopy ,还可以用 SQL 语法进行备份: BACKUP TABLE 或者 SELECT INTO OUTFILE ,又或者备份 二进制日志(binlog) ,还可以是 直接拷贝数据文件和相关的配置...

    mysql 数据库备份和还原方法集锦 推荐

    目前 MySQL 支持的免费备份工具有:mysqldump、mysqlhotcopy,还可以用 SQL 语法进行备份:BACKUP TABLE 或者 SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。

    史上最全的MySQL备份方法

    本人曾经 用过的备份方式有:mysqldump、mysqlhotcopy、BACKUP TABLE 、SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。MyISAM 表是保存成文件的形式,因此相对...

Global site tag (gtag.js) - Google Analytics