2 votes

Autorisations MySQL pour voir toutes les bases de données

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 ?

3voto

Radu T Points 834

Vous devriez être en mesure d'afficher les subventions des utilisateurs en utilisant la commande :

SHOW GRANTS FOR 'bob'@'localhost';

Extrait du manuel MySQL :

Le privilège SHOW DATABASES permet au compte de voir les noms des bases de données en émettant l'instruction SHOW DATABASE. Les comptes qui ne disposent pas de ce privilège ne voient que les bases de données pour lesquelles ils disposent de certains privilèges et ne peuvent pas du tout utiliser l'instruction si le serveur a été lancé avec l'option --skip-show-database. Notez que tout privilège global est un privilège pour la base de données.

Si SHOW DATABASES est activé, révoquez cette autorisation.

REVOKE SHOW DATABASES ON *.* FROM 'bob'@'localhost';

Enfin, rechargez tous les privilèges à l'aide de la commande :

FLUSH PRIVILEGES;

(ou redémarrer MySQL - si c'est une option - souvent ça ne l'est pas).

P.S : Vous devrez peut-être remplacer 'localhost' par le nom d'hôte de votre base de données.

Quelques références :

Editar:

Pour répondre à vos questions :

1) Comment abandonner cette permission ? Je suppose que si j'exécute : REVOKE SELECT, INSERT,... on *.* to 'bob'@'%';

Vous pourriez simplement exécuter REVOKE ALL ON *.* TO 'bob'@'%';

2) Comment identifier toutes les permissions de ce type ? Dois-je examiner chaque utilisateur ?

Voir ceci blog post. Annonceur : Je ne suis pas associé à ce blog.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X