impossibile rimuovere "GRANT USAGE"


15

Stavo testando alcune cose e ho aggiunto un:

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

così ora quando lo faccio

show grants for cptnotsoawesome@localhost;

Vedo che uno di questi è:

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

Ora voglio rimuoverlo perché penso che sia un pericolo per la sicurezza, quindi faccio il:

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

Ma mostra ancora che la sovvenzione USAGE nell'elenco delle sovvenzioni.

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

Qualche idea sul perché? Che cosa sto facendo di sbagliato?

Risposte:


20

Sotto il cofano, quando vedi un utente solo con USAGE, l'utente è scritto nella tabella mysql.user con tutti i privilegi globali disattivati.

Originariamente hai dichiarato che l'utente aveva questo:

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

Dovresti vedere una riga dentro mysql.user con la password MD5 e tutti i privs globali impostati su N. Dovresti anche vedere una riga in mysql.db con

  • utente = 'cptnotsoawesome'
  • host = 'localhost'
  • db = 'statistiche'
  • tutti i priv livelli di DB impostati su "Y"

Dovresti essere in grado di vederli con questa query

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

Quando hai eseguito il comando REVOKE, hai semplicemente rimosso la riga da mysql.db. Questo non ha toccato la fila mysql.user. Pertanto, puoi comunque accedere a mysql e avere solo i priv per l'esecuzione

SHOW GLOBAL VARIABLES;
SHOW GLOBAL STATUS;

Se esiste un database di test chiamato testo un database i cui primi 5 caratteri sono test_(cercarlo utilizzando SELECT * FROM mysql.db WHERE db LIKE 'test%';), l'utente con solo USAGE può avere diritti completi sui database di test. Ne ho scritto in ServerFault settembre 2011 .

Se si desidera rimuovere la riga da mysql.user è possibile eseguire entrambi

DROP USER cptnotsoawesome@localhost;

o

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

9

UTILIZZO significa che l'utente non ha alcun privilegio.

You have to use 'DROP USER'. 

drop user cptnotsoawesome@localhost;

In realtà non puoi revocare l'UTILIZZO, senza far cadere l'utente.USAGE è un privilegio a livello globale.

dai un'occhiata a questo link .


Lo farei, se ciò stesse facendo qualcosa di sbagliato nel database, come se fosse una minaccia alla sicurezza o qualcosa del genere, altrimenti
potrei

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.