2011-07-26 32 views
17

¿Alguien sabe por qué me aparece este error al ejecutar mysqlimport?mysqlimport: Error: 1045, Acceso denegado

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 

Sin embargo ...

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 [email protected]%                     | 
+------------------------------------------------------------------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'someone'@'%' IDENTIFIED BY PASSWORD '*BLAHBLAHBLAH' | 
| GRANT ALL PRIVILEGES ON `bar`.* TO 'someone'@'%'           | 
+------------------------------------------------------------------------------------------------------------+ 
2 rows in set (0.00 sec) 

mysql> 

Respuesta

20

bien, resulta que el privilegio FILE es un privilegio "global", que al parecer significa que no puede selectivamente activar en ciertas bases de datos, tablas. etc. Es por eso que mi declaración anterior subvención en la barra * no tuvo efecto:.

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

Es necesario otorgar privilegios del archivo de *.*:

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

Espero que esto ayude a alguien.

+0

Si obtiene 'ERROR 1221 (HY000): uso incorrecto de DB GRANT y GLOBAL PRIVILEGES', después de establecer diferentes parámetros, vuelva a lo que muestra esta respuesta: "GRANT FILE ON *. * To user @ localhost;" - "los privilegios FILE son globales y no se pueden aplicar a una única base de datos" –

4

mysqlimport es una interfaz de línea de comandos para el comando LOAD DATA INFILE, para el que necesita el privilegio 'File' (nivel de servidor).

De LOAD DATA INFILE syntax:

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

por lo que "conceder a todos los privilegios" no incluye el privilegio FILE? –

+2

Usted otorga TODOS LOS PRIVILEGIOS a nivel de la base de datos, mientras que el privilegio FILE está en el nivel del servidor. – Bilal

+0

Ah sí, me acabo de dar cuenta. ¡Gracias por la ayuda! –

20

Usted puede evitar la necesidad de que los privilegios adicionales mediante el parámetro -local a mysqlimport:

--local, -L 

      Read input files locally from the client host. 
+1

Funcionó para mí, y en mi humilde opinión un enfoque mucho mejor que la concesión de un permiso global importante para un usuario – happyskeptic

13

Algunos sería lugar de optar por este comando, saltándose la concesión de archivo adicionales.

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

+0

Me sale el mismo error con este comando. –

+1

¿cómo hago esto para trabajar en la importación de un archivo csv? ¿Reescribo el archivo csv en formato .sql y luego lo publico? o puedo usar algo como http://stackoverflow.com/a/18469353/2392358 'mysqlimport' – HattrickNZ

+0

@HattrickNZ bien ese comando es solo si tiene declaraciones en su archivo .sql. Si tiene .csv, supongo que debería hacer algo diferente, como publicar en su enlace. – Rabiees

Cuestiones relacionadas