no se puede eliminar "USO DE LA SUBVENCIÓN"

15

Estaba probando algunas cosas y agregué un:

grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password';

así que ahora cuando lo hago

show grants for cptnotsoawesome@localhost;

Puedo ver que uno de ellos es:

Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' 

Ahora quiero eliminarlo porque creo que es un peligro para la seguridad, así que hago lo siguiente:

REVOKE USAGE ON *.* FROM 'cptnotsoawesome'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Pero todavía muestra que la subvención de USO en la lista de subvenciones.

Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' 

Alguna idea de por qué? ¿Qué estoy haciendo mal?

Katafalkas
fuente

Respuestas:

20

Debajo del capó, cuando ve un usuario con USAGE solamente, ese usuario está escrito en la tabla mysql.user con todos los privilegios globales desactivados.

Originalmente declaró que el usuario tenía esto:

grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password'; 

Debería ver una fila mysql.usercon la contraseña MD5 y todos los privs globales establecidos en N. También debería ver una fila en mysql.db con

  • usuario = 'cptnotsoawesome'
  • host = 'localhost'
  • db = 'estadísticas'
  • todos los niveles de base de datos privs establecidos en 'Y'

Deberías poder verlos con esta consulta

SELECT * FROM mysql.db
WHERE user='cptnotsoawesome'
AND host='localhost'
AND db='statistics'\G

Cuando ejecutó el comando REVOKE, simplemente eliminó la fila de mysql.db. Esto no tocó la fila mysql.user. Por lo tanto, aún puede iniciar sesión en mysql y solo tener los privilegios para ejecutar

SHOW GLOBAL VARIABLES;
SHOW GLOBAL STATUS;

Si hay una base de datos de prueba llamada testo una base de datos cuyos primeros 5 caracteres son test_, (búsquela usando SELECT * FROM mysql.db WHERE db LIKE 'test%';), entonces el usuario con solo USAGE puede tener derechos completos sobre las bases de datos de prueba. Escribí sobre esto en ServerFault en septiembre de 2011 .

Si desea eliminar la fila de mysql.user, puede ejecutar

DROP USER cptnotsoawesome@localhost;

o

DELETE FROM mysql.user WHERE
WHERE user='cptnotsoawesome'
AND host='localhost';
FLUSH PRIVILEGES;
RolandoMySQLDBA
fuente
9

USO significa que el usuario no tiene ningún privilegio.

You have to use 'DROP USER'. 

drop user cptnotsoawesome@localhost;

En realidad, no puede revocar el USO, sin abandonar el usuario. USAGE es un privilegio de nivel global.

Echa un vistazo a este enlace .

Abdul Manaf
fuente
Lo haría, si eso estaba haciendo algo mal en la base de datos, como si fuera una amenaza a la seguridad o algo así, de lo contrario, puedo dejarlo
Katafalkas