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

Restringir busquedas a un usuario

Estas en el tema de Restringir busquedas a un usuario en el foro de Mysql en Foros del Web. Hola k tal, disculpen las molestias, quiero ver si me pueden ayudar con la siguiente duda: Lo que sucede es que estoy haciendo un sistema ...
  #1 (permalink)  
Antiguo 23/05/2009, 00:23
 
Fecha de Ingreso: abril-2009
Mensajes: 22
Antigüedad: 15 años
Puntos: 1
Pregunta Restringir busquedas a un usuario

Hola k tal, disculpen las molestias, quiero ver si me pueden ayudar con la siguiente duda:

Lo que sucede es que estoy haciendo un sistema web escolar y tengo la idea de crear varios usuarios con la opcion grant restringiendo algunas tablas. Un usuario por cada carrera.

Sin embargo lo que no he podido resolver es darle a un usuario el permiso de select sobre una tabla pero que al mismo tiempo solamente pueda ver los registros que le pertenecen.

Por ejemplo si tengo una tabla llamada materia con los siguientes campos:
id_mat
id_car
nom_mat
semestre
no_alum

quiero que un usuario dentro de esta tabla solo pueda ver los registros de su determinada carrera con la que fue logueado, y no permitirle la consulta sobre las materias de otra carrera que estarian en esta misma tabla.
No se si me di a explicar, agradeceria cualquier ayuda

De antemano, muchas gracias.
  #2 (permalink)  
Antiguo 23/05/2009, 06:30
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, 5 meses
Puntos: 2658
Respuesta: Restringir busquedas a un usuario

Al menos hasta la versión 5.1, MySQL no tiene restricciones de nivel de registro en el GRANT. La única forma que podrás manejar el problema, hasta lo que sé, es en el nivel de aplicación.
En todo caso, yo vería la posibilidad de negarle el acceso a las tablas, y diseñar un SP para él y que las tablas sean consultads sólo por medio del SP.
Si parametrizas convenientemente el SP, entonces nunca podrá leer otra cosa.
__________________
¿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 23/05/2009, 08:07
 
Fecha de Ingreso: octubre-2008
Mensajes: 75
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Restringir busquedas a un usuario

Buenas yo trabajo con algo similar, muchos registros de muchas personas pero cada una accede a la suya, pero los privilegios de acceso de mysql son a nivel tratamiento de las tablas, por ejemplo un usuario puede leer o no una tabla, puede escribir o no otra tabla pero si puede leer, leerá todo. Para filtrar esto ya tenes que usar programación, como php, python, c#, c o lo que te guste para armar la consulta a medida del perfil de esta persona.

Para ampliarte mas esta respuesta yo tengo una tabla donde guardo los clientes, pero a su vez tengo mas de una sucursal. La idea es que cada sucursal ves sus clientes y no todos entonces la consulta es

select * from clienes where id_sucursal = 3;

Tan simple como eso, pero es a nivel de aplicación y no de permisos de mysql.


Bueno espero que no te hallas aburrido con esta explicación y te mando un saludo grande




La Santa
  #4 (permalink)  
Antiguo 23/05/2009, 11:59
 
Fecha de Ingreso: abril-2009
Mensajes: 22
Antigüedad: 15 años
Puntos: 1
Respuesta: Restringir busquedas a un usuario

Uhm, entonces no se puede desde la base de datos? oye gnzsoloyo como es eso de SP? me podría orientar un poco más? para que pueda intentarlo.

Gracias santa, de hecho así lo estoy controlando pero me gustaría controlarlo desde la base de datos. Nuevamente Gracias por su ayuda. cualquier otra sugerencia es bien aceptada.
  #5 (permalink)  
Antiguo 23/05/2009, 17:42
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, 5 meses
Puntos: 2658
Respuesta: Restringir busquedas a un usuario

SP es el acrónimo de Stored Procedures, rutinas de SQL almacenadas en la base y que son parte de sus recursos, las que pueden ser parametrizadas o no, y sus parámetros pueden ser tanto de entrada, salida como entrada salida.
Tienen la ventaja de si contar con permisos a ese nivel, por lo que se puede asignar a un usuario determinado el poder ejecutar esa sola rutina y ninguna otra. Como es la rutina la que realiza la tarea de la consulta (o las consultas) , y no el usuario, entonces tiene ciertas ventajas básicas:
1º. Aumenta la seguridad de la base de datos al no permitir un acceso de más alto nivel (tablas, por ejemplo).
2º. Evita el sql-injection, ya que la llamada no puede contener otras sentencias, pues se define en el command de laaplicación que es un SP. SI intentas "colgarle algo" da error..
3º. Restringe las tareas accesibles a un conjunto de tareas dentro del codigo del SP. No puedes agregarle tareas sin modificar el SP, y eso solo lo puedes hacer con los permisos de CREATE ROUTINE.
4º. Encapsula el código, de modo que aún desencriptando el código de la aplicación, no se accede a qué hace el SP, porque el cuerpo del código reside en la base, no en la aplicación, y a esta no se accede sin los privilegios de superusuario.

Si no conoces el tema de los store procedures te recomiendo leer algo del tema en Wikipedia (Stores Procedures) y luego la sección del manual(Capítulo 19. Procedimientos almacenados y funciones)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 24/05/2009, 08:11
 
Fecha de Ingreso: abril-2009
Mensajes: 22
Antigüedad: 15 años
Puntos: 1
Respuesta: Restringir busquedas a un usuario

Orale muchas gracias, creo que esa es la solucion dejame leer, documentarme e intentarlo, luego comento.
Gracias por la orientación.
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 02:06.