it-swarm.it

impossibile rimuovere "GRANT USAGE"

Stavo testando alcune cose e ho aggiunto un:

grant usage on statistics.* to [email protected] identified by 'password';

così ora quando lo faccio

show grants for [email protected];

Vedo che uno di questi è:

Grants for [email protected]
----------------------------------
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 [email protected]
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' 

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

15
Katafalkas

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 [email protected] identified by 'password'; 

Dovresti vedere una riga in mysql.user con la password MD5 e tutti i priv 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 riga in mysql.user. Pertanto, puoi ancora accedere a mysql e avere solo i priv per l'esecuzione

SHOW GLOBAL VARIABLES;
SHOW GLOBAL STATUS;

Se esiste un database di test chiamato test o un database i cui primi 5 caratteri sono test_, (cercalo usando SELECT * FROM mysql.db WHERE db LIKE 'test%';) quindi l'utente con solo USAGE può avere pieni diritti sui database di test. Ho scritto su questo in ServerFault settembre 2011 .

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

DROP USER [email protected];

o

DELETE FROM mysql.user WHERE
WHERE user='cptnotsoawesome'
AND Host='localhost';
FLUSH PRIVILEGES;
20
RolandoMySQLDBA

[~ # ~] utilizzo [~ # ~] significa che l'utente non ha alcun privilegio.

You have to use 'DROP USER'. 

drop user [email protected];

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

dai un'occhiata a questo link .

9
Abdul Manaf

Si prega di guardare questa domanda: -

https://stackoverflow.com/questions/2126225/why-is-a-grant-usage-created-the-first-time-i-grant-a-user-privileges

Fondamentalmente il privilegio USAGE si comporta come un privilegio a livello di sistema che non è possibile rimuovere. È utilizzato internamente da MySQL in modo da poter manipolare il sistema dei privilegi.

2
Kiri