2011-10-05 15 views
5

Utilizando el estándar SQL - se han hecho repetidamente en PosgreSQL y Oracle - Deseo conceder una SELECT para todas las tablas de SCHEMA1 exceptosecret a user1en MySQL, revocar un privilegio después de la concesión de un privilegio general

grant select on schema1.* to user1; 
revoke select on schema1.users from user1; 

recibió error:

ERROR 1147 (42000): There is no such grant defined for user 'user1' on host '%' on table 'secret' 

¿Qué estoy haciendo mal?


Evidentemente esto es comportamiento estándar de MySQL !!

Hace que sea más fácil entender la falta de sofisticación de seguridad en las aplicaciones que utilizan MySQL: configurar la seguridad correcta del usuario en MySQL es increíblemente difícil.

+1

Debe otorgar privilegios SELECT para cada tabla, tabla por tabla. – Devart

+0

¿Estás seguro? El estándar ANSI dice que lo que estoy haciendo es correcto. –

Respuesta

5

Nada. MySQL no expande el comodín schema1.* a las tablas individuales, ni almacena "excepciones". Las tablas de permisos almacenan los permisos concedidos. Por lo tanto, dado que en realidad no otorgó nada en schema1.users, no hay nada que revocar MySQL. Simplemente se trata de cómo MySQL maneja los permisos.

+0

entonces ¿GRANT/REVOKE en MySQL no es estándar ANSI? –

+1

@ccyoung Quizás. No estoy íntimamente familiarizado con el estándar. Sé que hay varios otros lugares en los que MySQL se desvía, por lo que no me sorprendería. Sugiero abrir un error con el equipo de MySQL (es probable que ya exista), pero también sugeriría no posponer las principales decisiones de vida hasta que se aborde. Estamos hablando del núcleo MySQL que ha estado en funcionamiento durante muchos años (siglos en tiempo de Internet). Las posibilidades de que alguna vez se modifiquen son escasas o nulas. – Mac

Cuestiones relacionadas