免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9427 | 回复: 7
打印 上一主题 下一主题

【讨论中】mysql的load_file问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-29 23:08 |只看该作者 |倒序浏览
本帖最后由 cenalulu 于 2012-12-31 10:29 编辑

load_file这个函数到底如何用?
我用mysql 的root用户,
mysql> SHOW GRANTS FOR 'root'@'localhost';
+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                                              |
+----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION                                                                           |
+----------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)


然后我发现
mysql> SELECT LOAD_FILE ('/etc/passwd');
有输出,成功了。
但是其他文件不行。

google了半天,什么线索也没发现,
max_allowed_packet也设的16M, 文件和/etc/passwd的权限一模一样,root用户也有FILE权限,输入的都是绝对路径。
没道理啊,既然/etc/passwd,那么同样目录,同样权限,相似大小的文本文件为什么就无法LOAD_FILE成功呢?

我是mysql新手,实在是想不通了。

论坛徽章:
0
2 [报告]
发表于 2012-12-30 09:14 |只看该作者
比如说我:
mysql> select LOAD_FILE('/etc/hosts');
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| LOAD_FILE('/etc/hosts')                                                                                                                                                                                                                |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 127.0.0.1        localhost
127.0.1.1        shaowei-desktop

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
|
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
这是可以的。

然后
mysql> select LOAD_FILE('/etc/fstab');
+-------------------------+
| LOAD_FILE('/etc/fstab') |
+-------------------------+
| NULL                    |
+-------------------------+
1 row in set (0.00 sec)

/etc/hosts和/etc/fstab的权限什么的都相同,mysql为什么有这种行为?

论坛徽章:
2
摩羯座
日期:2014-05-29 17:38:40数据库技术版块每日发帖之星
日期:2016-08-05 06:20:00
3 [报告]
发表于 2012-12-30 11:33 |只看该作者
检查下2个条件
1.文件权限: chmod a+r  pathtofile
2.文件大小: 必须小于max_allowed_packet

论坛徽章:
0
4 [报告]
发表于 2012-12-30 13:22 |只看该作者
2楼的方式可以试下
load_file应该发生server层, 用strace跟踪看下

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
5 [报告]
发表于 2013-01-04 15:14 |只看该作者
我机器上测试的fstab和hosts都可以

论坛徽章:
0
6 [报告]
发表于 2013-01-08 10:42 |只看该作者
爱死你了,这么好的帖子要顶的

论坛徽章:
0
7 [报告]
发表于 2013-01-11 02:13 |只看该作者
还是第一次见到这种用法啊

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
8 [报告]
发表于 2013-01-11 14:20 |只看该作者
是不是你执行 mysql 程序的用户的权限问题呢?我用的 root 执行 mysql
  1. [root@UC ~]# echo "abcde" > test
  2. [root@UC ~]# ll /etc/test
  3. -rw-r--r-- 1 root root 6 01-14 14:35 /etc/test

  4. mysql> select load_file("/etc/test");     
  5. +------------------------+
  6. | load_file("/etc/test") |
  7. +------------------------+
  8. | abcde
  9.                  |
  10. +------------------------+
  11. 1 row in set (0.00 sec)
  12. mysql> system ls /etc/test;
  13. /etc/test
复制代码
建议你在 mysql 里用 system ls /etc 来看看能不能列出你的那个文件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP