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

Revocar permisos en determinadas columnas

Estas en el tema de Revocar permisos en determinadas columnas en el foro de Mysql en Foros del Web. Hola, estoy buscando un poco de ayuda para trabajar en MySQL. Antes de nada comento que tengo un contrato de alojamiento en un servidor con ...
  #1 (permalink)  
Antiguo 19/12/2013, 11:14
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Revocar permisos en determinadas columnas

Hola, estoy buscando un poco de ayuda para trabajar en MySQL.

Antes de nada comento que tengo un contrato de alojamiento en un servidor con DirectAdmin para editar MySQL; junto con esto he creado una base de datos, una tabla y dos usuarios, a uno de los cuales quiero limitar el acceso a una columna de la tabla.

En DirectAdmin puedo asignar privilegios a los usuarios a nivel de base de datos, hay una lista de operaciones (SELECT, UPDATE, CREATE, etc...) con un combo con Si/No. De esta forma habilito (por ejemplo) la operacion SELECT de ese usuario para toda la base de datos a la que pertenece.

Ahora viene el problema: mi intento es limitar la operacion SELECT de ese usuario un solo campo de la tabla de la base de datos. Para hacerlo he provado a revocerle el permiso pero me ha dado error porque no había un permiso explicito para ese campo en esa tabla:

Código MySQL:
Ver original
  1. REVOKE SELECT(campo) ON bdd.tabla FROM 'user'@'localhost' IDENTIFIED BY 'pass';
  2. #1147 - There is no such grant defined for user 'user' on host 'localhost' on table 'tabla'

Entiendo que eso significa que el SELECT(campo) no existia en la tabla de privilegios a nivel de columna, por eso no la encontró ni pudo eliminarla.

Luego he probado a darle privilegio de SELECT(campo) para luego poder quitarselo:

Código MySQL:
Ver original
  1. GRANT SELECT(campo) ON bdd.tabla TO 'user'@'localhost' IDENTIFIED BY 'pass';
  2. REVOKE SELECT(campo) ON bdd.tabla FROM 'user'@'localhost' IDENTIFIED BY 'pass';

Estas dos se ejecutan con exito pero no tienen efecto (el usuario sigue teniendo SELECT para el campo revocado); me parece entender que al tener el privilegio SELECT a nivel de base de datos entonces el REVOKE SELECT(campo) no tiene efecto porque el usuario sigue teniendo SELECT para toda la base de datos.

Entonces se me ocurrió la ultima idea (que tampoco funciona): voy al DirectAdmin y quito el privilegio SELECT el usuario para esa base de datos; eso implica que ese usuario no puede hacer SELECT ni de ninguna tabla ni de ninguna columna. Ahora voy a MySQL y intento darle SELECT para el campo que quiero que sea visible:

Código MySQL:
Ver original
  1. GRANT SELECT(campo_visible) ON bdd.tabla TO 'user'@'localhost' IDENTIFIED BY 'pass';
  2. #1142 - SELECT command denied to user 'user'@'localhost' for table 'tabla'

Eso significa que me cancela la solicitud porque no tiene permisos de SELECT en la base de datos? Es decir, ya que cancelé la operacion SELECT ¿me da un error porque la detecta en la query? Pero si le doy permisos de select en la bdd luego no me contempla las restricciones a nivel de columna. Si esto es así, entonces ¿como podria revocar privilegios a una columna en concreto?

Otro dato: el acceso que tengo a MySQL se limita a la tabla 'information_schema' (solo lectura) y a todas las que haya creado yo (todos los privilegios), pero no a la tabla 'mysql'. No se si eso tendrá alguna importancia. El caso es que llevo varios dias dandole vueltas al caso y no doy con la solución. Alguna idea? O alguna orientación? Ni que sean algunas palabras de animo tambien me vendrian bien :)

Mil gracias por adelantado y saludos
vosk
  #2 (permalink)  
Antiguo 21/12/2013, 15:41
 
Fecha de Ingreso: mayo-2013
Ubicación: Lima
Mensajes: 5
Antigüedad: 11 años
Puntos: 0
Respuesta: Revocar permisos en determinadas columnas

Buen día estimado vosk, escribes mucho pero das a entender poco, si es que entendí bien lo que necesitas es quitar permisos a una columna en específico... puedes leerte la documentación de MySQL 5.0 con el título siguiente Sintaxis de GRANT y REVOKE, donde se pueden manejar permisos a nivel global, base de datos, tabla, columba y rutina... Saludos.
  #3 (permalink)  
Antiguo 22/12/2013, 07:13
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Revocar permisos en determinadas columnas

Saludos @mvpfrans, muchas gracias por tu respuesta.

Ya he consultado el manual de MySQL, y realmente puedo hacerlo cuando yo soy el administrador de la base de datos pero no cuando me conecto al servidor contratado.

No se si me explico: en el MySQL que tengo en casa (para entendernos) me conecto como 'jefe' absoluto, puedo asignar y revocar cualquier permiso, puedo cancelar el SELECT de un usuario sobre una tabla y luego habilitar el SELECT para ese usuario sobre un campo de esa tabla. Pero esas mismas operaciones no funcionan en el MySQL que tengo en el servidor contratado, y es ahí donde tengo el problema. Creo que se debe a que en el servidor contratado no tengo los permisos necesarios para hacer tal cosa, tendré que enviar un mail a los administradores a ver que me dicen (tal vez es lo primero que tenia que haber echo).

Si creo un usuario con GRANT para SELECT sobre una tabla, entonces no puedo revocarle el SELECT sobre una columna de la tabla (es decir, puedo hacerlo sin errores pero no se aplica, el usuario sigue teniendo select para toda la tabla). En cambio si creo un usuario sin select sobre una tabla, no puedo asignarle select sobre una columna porque me salta el error de que no tengo permiso para ejecutar un select; es como si al revocar el select se cancelara cualquier consulta (incluso las de grant) que contienen la palabra select.

Por el momento dandole vueltas al asunto he resuelto por la via alternativa: crear una tabla extra con descripciones de roles de usuario, otra tabla con la lista de tablas acesibles y otra con las celdas para cada rol.

Aun así sigo interesado en una posible solucion.

Gracias otra vez @mvpfrans por tu aporte
Y gracias por adelantado a quien pueda echarme un cable con esto

Saludos
vosk

Etiquetas: campo, columnas, determinadas, permisos, select, sql, tabla, usuarios
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 21:30.