it-swarm-eu.dev

nelze odebrat „GRANT USAGE“

Testoval jsem pár věcí a přidal:

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

takže teď, když to udělám

show grants for [email protected];

Vidím, že jedním z nich je:

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

Teď to chci odstranit, protože si myslím, že je to bezpečnostní riziko, takže udělám:

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

Stále však ukazuje, že grant USAGE v seznamu grantů.

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

Nějaké nápady proč? Co dělám špatně?

15
Katafalkas

Pod kapotou, když vidíte uživatele pouze s USAGE, je tento uživatel zapsán v tabulce mysql.user se všemi globálními oprávněními vypnutými.

Původně jste uvedli, že uživatel měl toto:

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

Měli byste vidět řádek v mysql.user pomocí hesla MD5 a všech globálních privů nastavených na N. Měli byste také vidět řádek v mysql.db s

  • user = 'cptnotsoawesome'
  • Host = 'localhost'
  • db = 'statistics'
  • všechny úrovně privs nastaveny na 'Y'

Měli byste být schopni je zobrazit pomocí tohoto dotazu

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

Když spustíte příkaz REVOKE, jednoduše jste odstranili řádek z mysql.db. To se nedotklo řádku v mysql.user. Můžete se tedy i nadále přihlašovat k mysql a máte pouze oprávnění spustit

SHOW GLOBAL VARIABLES;
SHOW GLOBAL STATUS;

Pokud existuje testovací databáze s názvem test nebo databáze, jejíž prvních 5 znaků je test_, (hledejte pomocí SELECT * FROM mysql.db WHERE db LIKE 'test%';) pak uživatel s pouze USAGE může mít plná práva na testovací databáze. O tom jsem psal v ServerFault září 2011 .

Pokud chcete odstranit řádek z mysql.user, můžete buď spustit

DROP USER [email protected];

nebo

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

[~ # ~] použití [~ # ~] znamená, že uživatel nemá žádná oprávnění.

You have to use 'DROP USER'. 

drop user [email protected];

Ve skutečnosti nelze USAGE odvolat, aniž byste zrušili uživatele.USAGE je oprávnění na globální úrovni.

podívejte se na Tento odkaz .

9
Abdul Manaf

Podívejte se prosím na tuto otázku: -

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

V zásadě se oprávnění USAGE chová jako oprávnění na úrovni systému, které nemůžete odstranit. Používá se interně pomocí MySQL, takže můžete manipulovat s privilegovaným systémem.

2
Kiri