Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] INSERT command denied to user...

Estas en el tema de INSERT command denied to user... en el foro de Mysql en Foros del Web. Hola! Tengo un script que guarda registros en la BD local. Todo funciona bien. Pero si subo el script a online, en pantalla se muestra: ...
  #1 (permalink)  
Antiguo 14/06/2014, 14:11
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Pregunta INSERT command denied to user...

Hola!

Tengo un script que guarda registros en la BD local. Todo funciona bien.

Pero si subo el script a online, en pantalla se muestra: INSERT command denied to user 'mi_usuario'@'localhost' for table 'mi_tabla'

He googleado por una solución, y entiendo que tal vez el asunto tiene que ver con los privilegios asignados a mi usuario en la BD.

Tengo acceso al cPanel del sitio donde está la BD y yo mismo he creado un usuario para la BD en cuestión. Además, me he asignado todos los privilegios, incluyendo el INSERT. Pero la cosa no mejora.

¿Cómo hago para solucionar el problema?


Saludos!




PD. Al ejecutar la query SHOW GRANTS; confirmo que tengo todos los privilegios. En pantalla se muestra:
GRANT USAGE ON *.* TO 'bmx'@'localhost' IDENTIFIED BY PASSWORD '*AB1BA39DE16FD9D157B2445DB97253EBFE61AA5'
GRANT ALL PRIVILEGES ON `mi\_bd1`.* TO 'bmx'@'localhost'
GRANT ALL PRIVILEGES ON `mi\_bd2`.* TO 'bmx'@'localhost'
GRANT ALL PRIVILEGES ON `mi\_%`.* TO 'bmx'@'localhost'

Última edición por berkeleyPunk; 14/06/2014 a las 14:41
  #2 (permalink)  
Antiguo 14/06/2014, 15:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: INSERT command denied to user...

Ejecutar inserciones desde un script requiere permisos de FILE, que se den otorgar en forma específica.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/06/2014, 16:09
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Pregunta Respuesta: INSERT command denied to user...

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Ejecutar inserciones desde un script requiere permisos de FILE...
Maestro gnzsoloyo, buenas tardes y ¡feliz Brasil 2014! . Googlé sobre los permisos FILE y me encontré con esta página. Informo que, cosa que se notará bien, en este tema francamente no sé qué estoy haciendo !

Imagino que la línea que dice: "mysql>..." es una query MySQL. Así que modifiqué la conexión así:
Código PHP:
$conexion mysql_connect("localhost""mi_usuario""mi_pass");

$file "mysql> grant file on *.* to mi_usuario@'localhost'";
mysql_query($file);
  
if (
$conexion)
{
    
mysql_select_db("mi_bd");
}
else
{
    echo 
'Fallo en la conexión a la BD';

Lo cual si bien no manda error, no arregla el problema.




Saludos!

Última edición por berkeleyPunk; 14/06/2014 a las 16:22
  #4 (permalink)  
Antiguo 14/06/2014, 16:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: INSERT command denied to user...

Cita:
mysql>
Es la el shell de la consola de comandos de MySQL, no es parte de la query, y te está generando errores sin lugar a dudas.
Los comandos GRANT y REVOKE, como también los de CREATE USER, son comandos que no deben ejecutarse por script, no es conveniente ni seguro. Son comandos administrativos sumamente críticos.
Lo que te he dicho es que debes darle al usuario que ejecutará la toma del script de inserciones, el permiso de FILE, sin lo cual esa tarea es imposible, hagas lo que hagas.
Por default sólo el root (usuario que no debe usarse en conexiones programadas), tiene por si mismo todos los permisos.

Ahora bien, debes tener claro y presente una regla de oro de la administración de usuarios: Los permisos son heredables.
¿Que quiere decir eso?
Que para que un usuario B pueda recibir de otro A un determinado permiso, el usuario A a su vez debe poseerlo previamente. Nadie puede dar permisos que no poseee.
¿Se entiende?

Como ya mencionaste que usabas CPAnel, te recomiendo que lo sigas usando para otorgar los mencionados permisos al usuario en cuestión, y si en la lista de permisos otorgables no aparece el FILE, es porque el usuario que utilizas para acceder a CPanel no lo tiene, ni lo puede otorgar.
¿Se entiende?

Finalmente: Lees las normas del foro. No se tratan, ni se deben postear códigos de programación. Este foro es sobre Bases de Datos y MySQL. Sólo se permite SQL.
Para dudas de programación, están los foros de cada lenguaje.

Posdata: Perdón que lo exprese de esta forma, pero antes de perder el tiempo con paginas como la que linkeaste, te recomiendo enfáticamente que leas el manual de referencia, que es donde realmente se explican y definen las cosas que se puede hacer o no.
MySQL::13.5.1.3. Sintaxis de GRANT y REVOKE
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 14/06/2014, 18:56
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Respuesta: INSERT command denied to user...

Ok, veo entonces que no tengo mucho que hacer en este foro.

Me voy al foro de bases de datos en general, por acá.

Gracias y hasta pronto .
  #6 (permalink)  
Antiguo 14/06/2014, 19:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: INSERT command denied to user...

Creo que tienes una enorme confusión. El tema a resolver no es genérico, sino específico de la forma de administración de MySQL.

¿Entendiste que tienes que acudir a CPANEL, o bien alguna interfaz como MySQL Workbench, o phpMyadmin, y verificar los permisos que tienes tu, para ver si puedes darselos a ese usuario.

¿Lo hiciste?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 14/06/2014, 20:41
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Sonrisa Respuesta: INSERT command denied to user...

Cita:
Iniciado por gnzsoloyo Ver Mensaje
... ¿Entendiste que tienes que acudir a CPANEL... y verificar los permisos que tienes tu, para ver si puedes darselos a ese usuario... ¿Lo hiciste?
Hice dos cosas, gnzsoloyo, que me parece responden satisfactoriamente tu pregunta:

1.Dentro del cPanel, entré en MySQL Bases de Datos, di clic al usuario asignado a la BD en cuestión, lo cual me dirigió a los privilegios de dicho usuario. Resultado: todos los privilegios asignados (no aparece la opción FILE que comentabas antes):
  • ALTER
  • CREATE ROUTINE
  • CREATE VIEW
  • DROP
  • INDEX
  • LOCK TABLES
  • SELECT
  • TRIGGER
  • CREATE
  • CREATE TEMPORARY
  • DELETE
  • EXECUTE
  • INSERT
  • REFERENCES
  • SHOW VIEW
  • UPDATE
[/SIZE]



2.Dentro de phpMyAdmin di clic a la pestaña SQL y ejecuté la consulta SHOW GRANTS; lo cual dio como resultado:

Código MySQL:
Ver original
  1. GRANT USAGE ON *.* TO 'bmx'@'localhost' IDENTIFIED BY PASSWORD '*AB1BA23DE35FD9D157B5445DB97253EBCF82AA53'
  2. GRANT ALL PRIVILEGES ON `bmx\_tabla1`.* TO 'bmx'@'localhost'
  3. GRANT ALL PRIVILEGES ON `bmx\_tabla2`.* TO 'bmx'@'localhost'
  4. GRANT ALL PRIVILEGES ON `bmx\_tabla3`.* TO 'bmx'@'localhost'
  5. GRANT ALL PRIVILEGES ON `bmx\_%`.* TO 'bmx'@'localhost'

Por lo que veo, todo bien, ¿no?

Saludos!

Última edición por gnzsoloyo; 14/06/2014 a las 20:50
  #8 (permalink)  
Antiguo 14/06/2014, 20:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: INSERT command denied to user...

Cita:
Por lo que veo, todo bien, ¿no?
No.
En la lista que muestra no está el permiso de FILE, por lo que puedo suponer que el usuario de que dispones para crear usuarios no lo tiene, y por tanto no lo puede otorgar.

Vamos a leer lo que dice el link que ya te pasé al respecto:
Cita:
Los permisos FILE, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHOW DATABASES, SHUTDOWN, y SUPER son permisos administrativos que sólo pueden darse globalmente (usando sintaxis ON *.* ).
Cita:
Para los niveles global, base de datos, tabla y rutina, GRANT ALL asigna sólo los permisos que existen en el nivel que está otorgándolos. Por ejemplo, si usa GRANT ALL ON db_name.*, este es un comando de nivel de base de datos, así que ninguno de los permisos únicamente globales tales como FILE se otorgan.
Esto último quiere decir que lo que haces:

Código MySQL:
Ver original
  1. GRANT USAGE ON *.* TO 'bmx'@'localhost' IDENTIFIED BY PASSWORD '*AB1BA23DE35FD9D157B5445DB97253EBCF82AA53'
  2. GRANT ALL PRIVILEGES ON `bmx\_tabla1`.* TO 'bmx'@'localhost'
  3. GRANT ALL PRIVILEGES ON `bmx\_tabla2`.* TO 'bmx'@'localhost'
  4. GRANT ALL PRIVILEGES ON `bmx\_tabla3`.* TO 'bmx'@'localhost'
  5. GRANT ALL PRIVILEGES ON `bmx\_%`.* TO 'bmx'@'localhos
no otorga el privilegio de FILE, ni aunque lo tuvieses.

Haz una cosa básica:
Ejecuta un
Código MySQL:
Ver original
  1. SHOW GRANTS FOR CURRENT_USER;
Y veamos cuáles son los permisos que tiene el usuario que estás usando para crear y dar permisos.

Sin el permiso de FILE, no se puede leer un script de inserciones ni en localhost ni en el servidor. Es requisito indispensable para eso.
No es un permiso habitual en los hostings tercerizados (no lo suelen dar), precisamente porque se trata de un permiso peligroso´, ya que le permite al usuario ejecutar cualquier script nocivo.
Por eso no es habitual que se lo tenga.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 14/06/2014, 21:24
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Respuesta: INSERT command denied to user...

Cita:
Iniciado por gnzsoloyo Ver Mensaje
...Haz una cosa básica: Ejecuta un... SHOW GRANTS FOR CURRENT_USER;

El resultado es:

Código MySQL:
Ver original
  1. GRANT USAGE ON *.* TO 'bmx'@'localhost' IDENTIFIED BY PASSWORD '*AB1BA39DE36DD9D157B7445FB97213EBCE81AA51'
  2. GRANT ALL PRIVILEGES ON `bmx\_tabla1`.* TO 'bmx'@'localhost'
  3. GRANT ALL PRIVILEGES ON `bmx\_tabla2`.* TO 'bmx'@'localhost'
  4. GRANT ALL PRIVILEGES ON `bmx\_tabla3`.* TO 'bmx'@'localhost'
  5. GRANT ALL PRIVILEGES ON `bmx\_%`.* TO 'bmx'@'localhost'


O sea, exactamente lo mismo que SHOW GRANTS.
  #10 (permalink)  
Antiguo 14/06/2014, 21:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: INSERT command denied to user...

Pues lamento decirte que a menos que te den ese permiso, no podrás cargar un script que contenga INSERT, ya que lo requiere.
Por allí, usando phpMyadmin, o similares, puede que lo logres. De lo contrario sólo te restaría levantar el script por programación, para leerlo línea a linea, y enviar cada uno a ejecutar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 14/06/2014, 22:49
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Respuesta: INSERT command denied to user...

De acuerdo. Voy a buscar ese permiso con la gente pertinente.

De cualquier forma, aprendí mucho con tus comentarios.

Gracias y hasta luego.

(Si encuentro la solución, regreso y posteo!)


Saludos!
  #12 (permalink)  
Antiguo 15/06/2014, 08:02
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Respuesta: INSERT command denied to user...

Regresé antes de lo esperado.

Señor gnzsoloyo, ya tengo acceso a un cPanel maestro, por llamarlo de alguna forma (es un plan de reseller, según sé), que controla la cuenta con la que no puedo crear usuarios de BD's con el privilegio de FILE que antes mencionabas.

En ese cPanel maestro hay un espacio para controlar las Funciones de Cuenta, y dentro está la opción de Modificar Cuenta. Dentro de esta última opción aparece lo siguiente: Ver captura.


¿En este pantallazo puedes ver el problema? ¿El problema está en que el Shell access es igual a no?

Saludos!

Última edición por berkeleyPunk; 15/06/2014 a las 08:10
  #13 (permalink)  
Antiguo 15/06/2014, 08:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: INSERT command denied to user...

Cita:
¿En este pantallazo puedes ver el problema? ¿El problema está en que el Shell access es igual a no?
No.
El "shell" al que hace referencia eso es la consola de comando s del sistema operativo del server, y no la consola de MySQL.
Un DBMS (MySQL, en este caso) es un sistema que corre sobre otro, y tiene su propio sistema de gestión de usuarios y permisos, el cual es independiente del del sistema operativo sobre el que está montado (probablemente Apache).
Es en MySQL donde hay que habilitar el permiso de FILE, sin el cual es imposible correr un script de inserciones.
Ahora bien, veamos si se entiende claramente:
- Los hosting, en especial los tercerizados y con cuentas de usuario de bajo costo no suelen dar usuarios con permisos de FILE. No lo hacen por simples temas de seguridad.
- Un usuario en MySQL tiene una X cantidad de permisos dados sobre su base. Si entre esos permisos tiene el de crear más usuarios (GRANT OPTION), sólo puede crear usuarios de menor nivel o iguales a él (mismos permisos, o menos), y sólo para la mismas bases que tenga permisos.
- Si el usuario que te otorgaron no posee permisos de FILE, no lo puedes otorgar a ninguno que puedas crear (herencia de permisos).
- No se puede saltear esa restricción, es decir que no te puedes asignara ti mismo permisos que el administrador no te haya dado, y por consecuencia no puedes agregarte el FILE, si no te lo dan.
- Sólo el mismo administrador que creó y dio permisos a tu usuario, es quien puede darte ese granteo.

Finalmente, dos detalles:
- La captura de pantalla que muestras está relacionada con la cuenta de usuario del Web Server, y no con la administración de MySQL. Son cosas independientes, como ya te dije.
- Usualmente los hosting proveen el permiso de FILE para cuentas de mayor nivel, en especial con servidor dedicado. Esto último implica mas plata, y además la independencia de ciertas restricciones. Son las mejores cuentas, pero muchas veces no son demasiado baratas.

Mira con tu proveedor de hosting qué puedes hacer para resolver el problema. Lo mas probable es que ellos te puedan solucionar el problema, ya que no debes ser el único que haya tenido esta contingencia...
¿Lo consideraste?

Preguntale al soporte técnico del host. O consulta la documentación para desarrolladores, que todo hosting tiene disponible, para problemas de esta clase
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 27/06/2014, 05:11
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
De acuerdo Respuesta: INSERT command denied to user...

Perdón por la tardanza.

El problema se solucionó con sólo hablar con la gente del hosting. Ellos lo arreglaron.

Tenías razón, maestro, todo era cuestión de permisos y bueno, pues ya quedó.

Saludos!

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:31.