entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Error en permisos para base de datos remota

Tengo un cliente, al cual se le desarrollo un sistema el cual consta de 2 urls diferentes y 2 hostings diferentes (esto es porque ya existian dichas urls, y dos empresas diferentes manejan cada una dicha urls).

Sucede que estoy intentando conectarme de forma remota al hosting de una de las url, desde la otra url. Utilizo el objecto mysqli para realizar la conexion (vale aclarar que ya se pidieron los permisos para el acceso remoto y desde el hosting confirman que ya los concedieron) y cuando pruebo si la conexion tuvo algun error aparece que todo esta bien. Pero cuando ejecuto cualquier query me tira el siguiente error:

SELECT command denied to user 'vc_kit'@'HOSTINGURL.COM' for table 'do_usuarios'

No logro entender del todo, porque me esta validando el login si despues me dice que no tengo los permisos para ejecutar dicha query.

En el hosting donde estoy queriendo ejecutar la query, tengo acceso al panel phpmyadmin y puedo ver la base de datos information_schema, en la tabla user_privileges solo aparece el usuario 'vc_kit'@'localhost'.

Deberia de aparecer ahi tambien el usuario 'vc_kit'@'HOSTINGURL.COM' ??

Alguien me podria explicar porque la conexion no me da ningun error y en cambio si la ejecucion de una query?

Aclaro, que probe la query directamente en el panel phpmyadmin del hosting que recibe la consulta y funciona perfectamente.

Version Php hosting receptor de la query: PHP Version 5.3.3-7+squeeze17
Version Php hosting que realiza la query: PHP Version 5.2.17

PD: ya intente con un var_dump al objecto mysqli en el hosting que realizo la query pero por un bug que hay en esa version de php cuando se realiza una conexion a base de datos remota el objecto viene vacio, excepto que realices un var_dump de cada una de las propiedades o metodos.

3 Respuestas

1voto

Leonardo-Tadei Puntos227320

Hola jmpineiro,

un RDBMS maneja usuarios, con sus privilegios de acceso, y datos estructurados en bases de datos, tablas, registros, índices, etc.

El RDBMS validará al hacer la conexión que seas un usuario válido, pero una vez conectado, te dará acceso solo a las cosas a las que pueda acceder ese usuario, ya sea parte de la estructura de datos o comandos SQL a ejecutar.

Lo que te está pasando es que el usuario vckit tiene el acceso permitido al comando SELECT solo si se conecta desde localhost, pero evidentemente, no si se conecta desde otro URL.

Es por esto que entrando a PHPMyAdmin en el servidor remoto el usuario vckit puede operar, ya que al estar instalado el PHPMyAdmin en el propio servidor, la conexión se realiza desde localhost.

Hay dos caminos para solucionar el problema: uno es tener privilegios de sysDBA en el servidor remoto y cambiar los privilegios del usuario vckit para que pueda acceder desde cualqueir servidor, y cambiar consecuentemente los privilegios de acceso a esa DB para que pueda ejecutar cualqueir comando desde cualqueir servidor; otra es crear una capa de API que funcione en el servidor remoto (y que entonces accederá localmente) para a través de ella acceder a los datos del servidor remoto.

Si las consultas son solo SELECT, la API es un camino sencillo. Si en cambio tenés que implementar un sericio completo de ABML ya tendrías que implementar algo más tipo REST o SOAP para garantizar que no haya accesos indebidos a los datos.

Saludos!

0voto

jmpineiro comentado

Leonardo,

Muchas gracias por tu respuesta.

Me temia eso que me respondes, ya lo habia pensado como una posible solucion dado que hasta ahora desde el otro hosting nos contestan que se dieron los permisos (vale aclarar que yo no tengo acceso directo a ningun panel del hosting, solo ftp y phpmyadmin - y a este en uno de los dos hostings-).

Voy a seguir insistiendo, dado que al hosting donde me estoy queriendo conectar confirman que se puede hacer remoto e insisten que los permisos fueron concedidos.

Si o si los permisos de los usuarios deberian estar listados dentro de la base de datos information_schema y en la tabla user_privileges verdad? o pueden configurarse de alguna otra forma?

0voto

Leonardo-Tadei comentado

No tenés que poder: solo el SysDBA de ese RDBMS podrá modificar esto. Si pudieras cambiar permisos de acceso, por ejemplo podrías cambiártelo para ver los datos de otros usuarios del servidor...

0voto

Peter Puntos150460

Seguramente tu Hosting no permite conexiones remotas a las bases de datos. Todo te funciona en tu panel y en phpMyAdmin porque se ejecuta de forma local en tu servidor, pero al hacerlo de forma remota, no funciona.

Habla con tu hosting para ver si lo permiten y si es así, que te activen esa opción.

Saludos.

0voto

Leonardo-Tadei comentado

Hola Peter,

conectar parece que sí puede: al dar error en el SELECT, lo que debe tener vedado es el acceso a ejecutar comandos sobre esa DB luego de estar conectado.

0voto

Peter comentado

Si, a eso me refiero, a que tiene bloqueado el acceso o ejecución remota de bases de datos a nivel servidor. Supongo que solo es eso y yo es lo primero que revisaría con el hosting, aunque ya nos contará @jmpineiro si es eso.

De no ser así, sin duda tu respuesta aclara y extiende las cosas perfectamente :)

0voto

jmpineiro comentado

En realidad, el acceso o ejecucion remota de la base de datos esta permitido, lo que al parecer, y digo parecer por el error que esta devolviendo al ejecutar la query, el problema viene porque no estan agregados los usuarios con los permisos.

Lo que si no logro entender es porque me permite loguearme correctamente, al momento de la conexion no chequea el dominio desde donde se esta conectando? si es localhost u otro?

0voto

Peter comentado

Yo de verdad volvería a hablar con el hosting diciéndoles que no te funciona la conexión remota, que revisen que los usuarios creados tienen permisos y que todo funciona bien.

Otra cosa que te recomendaría es mover todo a un mismo lugar, tener las cosas en diferentes servicios y proveedores creo que no es lo optimo y mover un sitio de un lado a otro, te tomara minutos y te quitara muchos dolores de cabeza.

0voto

Leonardo-Tadei comentado

Te permite conectaret porque los permisos del usuario existen, pero después, no te es posible usar la DB.

Es como que te creen un usuario FTP y no tengas permiso para escribir en un directorio: el server FTP te va a permitir loguearte, pero después no podrás subir ni cambiar el nombre a ningún archivo! En el caso de los RDBMS, los permisos son de acceso a las DB, tablas, índices, registros, campos y ejecución de comandos (SELECT, INSERT, CREATE, ALTER, etc)

Decile al soporte del hosting que pruebe conectarse desde afuera y ver el contenido de una tabla: al no tener permitido el SELECT no podrá hacerlo. Para sacarse incluso la duda de que no es tu código, que la conexión la hagan desde alguna aplicación de escritorio para MySQL.

Saludos!

1voto

canio Puntos900

Es 100% que no tienes privilegios para realizar un query o select, te muestro un ejemplo ilustrativo:

Con este usuario no puedo realizar un query:

mysql> select user,host from mysql.user;
ERROR 1142 (42000): SELECT command denied to user 'prueba'@'localhost' for table 'user'

pero si que puedo crear una base de datos:

mysql> CREATE DATABASE entredesarrolladores;
Query OK, 1 row affected (0.00 sec)

La solución, agregarle permisos de select:
(me logueo con root)

mysql> grant select on *.* to prueba@localhost;
Query OK, 0 rows affected (0.00 sec)
(me logueo con prueba)
mysql> select user,host from mysql.user;
+------------------+-------------+
| user             | host        |
+------------------+-------------+
| canio            | %           |
| wifi             | %           |
| root             | 127.0.0.1   |

Saludos!!!!

0voto

Leonardo-Tadei comentado

Hola Canio,

es tal cual decís y está discutido más arriba: el problema de @jmpineiro es que no es sysdba de esa base de datos...

0voto

canio comentado

Sorry, no leí integramente todos los comentarios, saludos!

Editado: movido a comentario de la pregunta

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta