Chinaunix

标题: 【讨论中】mysql的load_file问题 [打印本页]

作者: wsw1wsw2    时间: 2012-12-29 23:08
标题: 【讨论中】mysql的load_file问题
本帖最后由 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新手,实在是想不通了。
作者: wsw1wsw2    时间: 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为什么有这种行为?
作者: devilkin0312    时间: 2012-12-30 11:33
检查下2个条件
1.文件权限: chmod a+r  pathtofile
2.文件大小: 必须小于max_allowed_packet
作者: hunter_search    时间: 2012-12-30 13:22
2楼的方式可以试下
load_file应该发生server层, 用strace跟踪看下
作者: ruochen    时间: 2013-01-04 15:14
我机器上测试的fstab和hosts都可以
作者: hansion3406    时间: 2013-01-08 10:42
爱死你了,这么好的帖子要顶的
作者: zavakid    时间: 2013-01-11 02:13
还是第一次见到这种用法啊
作者: seesea2517    时间: 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 来看看能不能列出你的那个文件。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2