J'ai quelques utilisateurs sur mon serveur qui ont accès à toutes les bases de données MySQL. J'essaie de révoquer ces privilèges, mais je ne sais pas comment m'y prendre.
Par exemple : J'ai un utilisateur bob
qui a accès à toutes les bases de données de mon serveur. J'exécute la commande suivante pour voir quels privilèges bob
a :
mysql -e "select * from information_schema.user_privileges;" | grep bob
'bob'@'%' def SELECT NO
'bob'@'%' def INSERT NO
'bob'@'%' def UPDATE NO
'bob'@'%' def DELETE NO
'bob'@'%' def CREATE NO
'bob'@'%' def FILE NO
'bob'@'%' def CREATE USER NO
Rien ne saute aux yeux comme GRANT
, ALL
o SUPER
. Je crée une nouvelle base de données sometest
, passer à bob
et voir que bob
a accès à sometest
. Je ne sais pas ce que j'ai manqué ici.
Modifier : J'ai couru SHOW GRANTS FOR 'bob'@'%';
et voir :
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN,
PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES,
LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW,
CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE
ON *.* TO 'bob'@'%'
1) Comment abandonner cette permission ? Je suppose que si j'exécute :
REVOKE SELECT, INSERT,... on *.* to 'bob'@'%';
il supprimera les permissions comme
GRANT ALL ON bobsdb.* TO 'bob'@'%';
ce que je ne veux pas qu'il arrive. Mais peut-être que c'est mieux de supprimer tous les privilèges et de les reconstruire à partir de zéro.
2) Comment identifier toutes les autorisations de ce type ? Dois-je examiner chaque utilisateur ?