- 浏览: 786290 次
- 性别:
- 来自: 广州
文章分类
最新评论
本文转自: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 表示每行记录之间用什么分隔
为应用建立了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 表示每行记录之间用什么分隔
发表评论
-
在终端中粘贴字符时头尾出现“0~“和“1~“的特殊字符
2024-09-10 20:24 2801、问题:在linux终端粘贴命令时,总在开头和结尾多出0~和 ... -
mysql修改表、字段、库的字符集
2016-12-06 15:59 3234mysql修改表、字段、库的字符集(转) 原文链接:http ... -
用SQL命令查看Mysql数据库,表的大小方法
2016-05-07 22:42 1464要想知道每个数据库 ... -
mysql碎片整理方法
2015-11-10 11:55 5218对于一个表如果经常插入数据和删除数据,则会产生很多不连 ... -
mysql int(10)中的10表示的真正含义
2015-10-10 10:26 8403int(10): 之前总以为其中的10表示字段所能表示的位数 ... -
mysql replace into 用法详解
2015-10-10 09:53 5125Replace into是Insert into的增强版。在 ... -
mysql查看锁表方法详解
2015-10-17 16:51 22621mysql查看锁表方法详解 1、show OPEN ... -
mysql 修改表的语法详解
2015-07-21 20:09 1423mysql 修改表的详细语法介绍 ALTER [IG ... -
msyql设置密码报错:ERROR 1372 (HY000): 解决方法详解
2015-07-12 22:50 7639MySql给用户设置权限同时指定访问密码时,会提示如下错误 ... -
mysql 日期格式化date_format详细使用
2015-06-26 14:51 2470日期转换函数的详细使用说明 DATE_FORMAT( ... -
Linux系统上安装MySQL
2015-06-10 14:25 16911.准备工作 从MySQL官网上分别下载mysql服 ... -
mysql 在linux客户端插入数据中文乱码
2015-04-20 19:19 12161、查看系统客户端,数据库,连接层的编码 查看方法: h ... -
mysql 取每组前几条记录
2015-03-16 14:45 5293一、对分组的记录取前N条记录:例如:取每组的前3条最大的记 ... -
mysql数据导入、导出方法汇总
2015-03-06 11:20 3984一、mysql远程导入 前言部分 由于公司的MyS ... -
安装mysql
2015-03-04 10:04 470安装mysql (1)删除linux上已经安装的my ... -
mysql导入数据load data infile用法
2015-02-06 09:30 1292我们常常导入数据!mysql有一个高效导入方法,那就是load ... -
mysql导出数据不输出标题行
2015-01-14 09:49 4135当想使用数据库中的某些数据,想将其导入到文件中,而想去掉第一行 ... -
mysql导入导出数据中文乱码问题
2015-01-12 13:37 5528解决mysql导入导出数据乱码问题方法: 1、进入mysql ... -
mysqldump导出时出现when doing LOCK TABLES
2015-01-12 11:25 2527执行 mysqldump -uxxx -pxxx -hxx ... -
CASE WHEN 用法介绍
2014-12-26 10:00 1106CASE WHEN 用法介绍 1. CASE WHEN 表达 ...
相关推荐
在MySQL中,SELECT… INTO OUTFILE语句是一个非常实用的功能,用于将查询结果直接导出到服务器主机上的文件。这个语句将数据以特定的格式保存,方便进行数据备份、迁移或者进一步处理。以下是关于使用SELECT… INTO ...
INTO OUTFILE`语句是MySQL提供的一种便捷方式,允许用户将查询结果直接导出到服务器主机上的文本文件。这个功能对于数据库管理员和数据分析师来说非常实用,因为它简化了数据提取的过程。 使用`SELECT... INTO ...
本文将深入探讨一种另类但实用的方法,即利用MySQL的`SELECT INTO OUTFILE`命令以及结合系统命令行工具如`cat`和`vim`来实现这一目标。这种方法不仅能够有效避免文件覆盖问题,还能进行数据对比,为数据管理和分析...
其中一种方法是使用 SELECT INTO OUTFILE 语句将数据备份到一个文件中。这种方法可以将选择的行写入到一个文件中,文件在服务器主机上被创建,并且不能是已经存在的。 SELECT INTO OUTFILE 语句 SELECT INTO ...
在MySQL中,如果你想将数据导出到文件,可以使用`SELECT INTO OUTFILE`。例如: ```sql SELECT column1, column2, ... INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES ...
SELECT * FROM test INTO OUTFILE '/tmp/test.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'; ``` 这样的命令可以指定字段间的分隔符、字段值的包裹符以及每行数据之间的...
本文主要介绍两种常见的MySQL数据导入导出方法:`SELECT INTO OUTFILE`语句和`mysqldump`实用程序。 1. **使用 `SELECT INTO OUTFILE` 语句** - **基本语法**:`SELECT * FROM table INTO OUTFILE 'filename'` - ...
该语句的格式为select * into outfile '/path/to/file' from departments;其中,/path/to/file是文件的路径。 Knowledge Point 2:使用select…into…outfile语句对数据库employees的表salaries进行数据导出,并...
本文将详细介绍 MySQL 中数据导入导出的方法,包括 `SELECT INTO OUTFILE` 和 `LOAD DATA INFILE` 的使用,并提供一些实用技巧。 #### 二、数据导出:SELECT INTO OUTFILE ##### 2.1 基本概念 `SELECT INTO ...
例如,使用`SELECT INTO OUTFILE`或`DUMPFILE`语句将数据导出到文本文件,这样在需要时可以通过`LOAD DATA INFILE`将数据重新导入到数据库中。但是,这种方式仅能备份数据,不包括表结构,所以表结构的备份需要额外...
在 MySQL 中,我们可以使用 SELECT INTO OUTFILE 语句来将数据导出成文本文件,然后再将其转换成 Excel 格式。以下是一个示例命令: `SELECT * INTO OUTFILE '/tmp/test.xls' FROM tb1 WHERE 1 ORDER BY id DESC ...
1. **数据导出**:从SQL数据库中导出数据,这可以通过SQL的内置功能,如`SELECT INTO OUTFILE`(MySQL)或`BCP`命令(SQL Server)来实现,生成CSV或XML格式的文件。 2. **数据清洗**:确保数据符合Access的字段...
通过SELECT INTO OUTFILE导出数据时,可以指定字段分隔符、行分隔符、字符包围符和转义字符等参数,以便生成的文件符合特定的需求。例如,可以指定字段分割字符为逗号、包围字符为双引号、行分隔符为回车换行符等。 ...
如果使用了 `SELECT INTO OUTFILE` 备份数据,则可以使用 `LOAD DATA INFILE` 将数据重新加载回数据库。基本语法如下: ```sql LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE '文件路径' [REPLACE | IGNORE] INTO TABLE...
`SELECT INTO OUTFILE`是MySQL提供的一种简单有效的数据导出方法,可以直接将查询结果写入到指定的文件中。例如: ```sql USE phptest; SELECT * FROM driver INTO OUTFILE 'a.txt'; ``` 执行上述SQL语句后,查询...
你可以利用SQL Server的“SELECT INTO OUTFILE”语句导出数据为文本文件,然后在Access中导入。另一种方法是使用SSIS(SQL Server Integration Services)或编写自定义的SQL脚本,将数据导出为CSV格式,再通过Access...
5. SQL Server到Excel导出:利用SSIS包或T-SQL的SELECT INTO OUTFILE命令生成CSV文件,然后在Excel中打开。 6. SQL Server与Access的数据交换:通过OLEDB或ODBC连接,在VBA中编写SQL语句执行查询,然后处理返回的...
`SELECT INTO OUTFILE`用于备份数据,而`LOAD DATA INFILE`用于恢复数据。例如,可以使用以下命令备份表`tbl_name`: ```sql SELECT * INTO OUTFILE 'tbl_name.bak' FROM tbl_name; ``` 然后,通过`LOAD DATA IN...