【问题标题】:mysqlimport: Error: 1045, Access deniedmysqlimport:错误:1045,访问被拒绝
【发布时间】:2011-10-13 19:16:59
【问题描述】:

有谁知道为什么我在运行 mysqlimport 时会出现这个错误?

mysqlimport -u someone -pwhatever --columns=a,b,c,d,e bar /var/tmp/baz.sql
mysqlimport: Error: 1045, Access denied for user 'someone'@'%' (using password: YES), when using table: baz

不过……

mysql -u someone -pwhatever
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 199
Server version: 5.1.41-3ubuntu12.10 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show grants;
+------------------------------------------------------------------------------------------------------------+
| Grants for someone@%                                                                                   |
+------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'someone'@'%' IDENTIFIED BY PASSWORD '*BLAHBLAHBLAH' |
| GRANT ALL PRIVILEGES ON `bar`.* TO 'someone'@'%'                                          |
+------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql>

【问题讨论】:

    标签: mysql mysql-error-1045 mysqlimport


    【解决方案1】:

    您可以通过对 mysqlimport 使用 --local 参数来避免对额外权限的需要:

    --local, -L
    
               Read input files locally from the client host.
    

    【讨论】:

    • 为我工作,恕我直言,这是一种比授予一个用户重要的全局权限更好的方法
    • 这仍然适用于 MySQL 8.0,例如mysql -L -f database < dump.sql 也不需要使用mysqlimport 命令。
    【解决方案2】:

    好的,事实证明 FILE 权限是一个“全局”权限,这显然意味着您不能在某些数据库、表上选择性地启用它。等等。这就是为什么我之前关于 bar.* 的授权声明没有效果:

    GRANT ALL PRIVILEGES ON `bar`.* TO 'someone'@'%' 
    

    您需要授予*.* 的 FILE 权限:

    GRANT FILE ON *.* to 'someone'@'%';
    

    希望这对某人有所帮助。

    【讨论】:

    • 如果你得到“错误 1221 (HY000): DB GRANT and GLOBAL PRIVILEGES 的错误使用”,在设置不同的参数后,恢复到这个答案显示的内容:“GRANT FILE ON . 到用户@localhost;" - “FILE 权限是全局的,不能应用于单个数据库”
    【解决方案3】:

    有些人会选择此命令,跳过额外的 FILE 授权。

    mysql -u username -p <yourdbname> < yourfile.sql

    【讨论】:

    • 如何让它在导入 csv 文件时工作?我是否只是以 .sql 格式重写 csv 文件,然后再导入它?或者我可以使用类似stackoverflow.com/a/18469353/2392358mysqlimport
    • @HattrickNZ 好吧,只有在 .sql 文件中有语句时,该命令才有效。如果你有 .csv,我想你必须做一些不同的事情,比如在你的链接中发布。
    【解决方案4】:

    mysqlimport 是 LOAD DATA INFILE 语句的命令行界面,您需要 'FILE' 权限(服务器级别)。

    来自LOAD DATA INFILE syntax

    Also, to use LOAD DATA INFILE on server files, you must have the FILE privilege.
    

    【讨论】:

    • 所以“GRANT ALL PRIVILEGES”不包括文件权限?
    • 您在数据库级别授予 ALL PRIVILEGES,而 FILE 权限在服务器级别。
    • 啊,是的,我刚刚想通了。感谢您的帮助!
    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 2012-11-08
    相关资源
    最近更新 更多