LOAD DATA(LOCAL)INFILE - 无效的授权规范

时间:2016-06-23 10:32:41

标签: php mysql sql pdo

我通过FTP将项目上传到1and1服务器。当网站进入将csv文件导入数据库表的函数时,我收到错误。

这是我的代码:

    $file = "/Contenu/BD/file.csv";

    $sql = "LOAD DATA INFILE '$file' INTO TABLE table CHARACTER SET UTF8 FIELDS TERMINATED BY \";\" LINES TERMINATED BY \"#\"";

当我使用“LOAD DATA INFILE”时,我有一个SQL错误说:

" SQLSTATE[28000]: Invalid authorization specification: 
1045 Access denied for user xxxxxx (using password: YES) "

当我使用LOAD DATA LOCAL INFILE时,我没有SQL错误,但集成不起作用。

所以我来找你了解我的文件输入发生了什么。此文件在我的开发环境中,在localhost中正确导入,但不在生产服务器上导入。

(整个数据库适用于项目,所以我认为我的SQL登录没有错误)

谢谢你们的答案。

1 个答案:

答案 0 :(得分:2)

查看用户在服务器之间可能因用户而异的GRANT FILE权限。特别是如果在初始用户设置期间使用通配符。或者我应该说,GRANT ALL ...是在一台服务器上完成的,而不是在另一台服务器上完成的。

另见安全手册页,标题为Security Issues with LOAD DATA LOCAL

并使用以下方法检查您的服务器设置:

show variables where variable_name='local_infile';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | ON    |
+---------------+-------+

对于那些无法更改服务器级变量的托管环境中的用户,通常会执行以下操作:

  1. 找到文件的完整路径。这并不容易,并且可能导致文件在通向虚拟化目录的路径的前缀一侧变得神秘。含义/some/path/to/you/home/shqnks
  2. 拥有GRANT的FILE权限部分
  3. 找出实际运行脚本的用户上下文。这可能是一个远景,但select user()可以提供帮助。
  4. ssh访问该文件并chmod。示例here
  5. 有些人对LOCAL有好运而其他人觉得很愚蠢,因为该文件已经在服务器上,并且本地将它放在临时目录中。可能对某些人有用的原因是可能会打开额外的文件级访问权限。
相关问题