2017-01-28 2 views
1

J'ai quelques utilisateurs sur mon serveur qui ont accès à toutes les bases de données MySQL. J'essaie de révoquer les privilèges, mais je ne suis pas sûr de savoir comment s'y prendre. Par exemple: J'ai un utilisateur bob qui a accès à toutes les bases de données sur mon serveur. Je lance ce qui suit pour voir quels privilèges bob a:Les autorisations MySQL pour voir toutes les bases de données

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 comme GRANT, ALL ou SUPER. Je crée une nouvelle base de données sometest, passer au compte bob et voir que bob a accès à sometest. Je ne sais pas ce que je manque 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 peut-on déposer cette autorisation? Je suppose que si je lance:

REVOKE SELECT, INSERT,... on *.* to 'bob'@'%'; 

il supprimer les autorisations comme

GRANT ALL ON bobsdb.* TO 'bob'@'%'; 

que je ne veux pas arriver. Mais peut-être est-il préférable de supprimer tous les privilèges et de les reconstituer à partir de zéro.

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

Répondre

2

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

SHOW GRANTS FOR 'bob'@'localhost'; 

A partir du manuel MySQL:

Le privilège SHOW DATABASES permet le compte de voir les noms de base de données en exécutant la Afficher l'instruction DATABASE. Les comptes qui n'ont pas ce privilège ne voient que les bases de données pour lesquelles ils ont des privilèges, et ne peuvent pas utiliser l'instruction du tout si le serveur a été démarré 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, recharger tous les privilèges en utilisant la commande:

FLUSH PRIVILEGES; 

(ou redémarrer MySQL - si c'est une option - souvent ce n'est pas). P.S: Vous devrez peut-être remplacer 'localhost' par votre nom d'hôte db.

Quelques références:

Edit:

Pour répondre à vos questions:

1) Comment abandonner cette autorisation? Je suppose que si je lance: REVOKE SELECT, INSERT,... on *.* to 'bob'@'%';

Vous pouvez simplement lancer REVOKE ALL ON *.* TO 'bob'@'%';

2) Comment peut-on identifier toutes les autorisations comme celui-ci? Dois-je regarder chaque utilisateur?

Voir cette blog post.Désistement: Je ne suis pas associé à ce blog.

+0

Merci! Ce n'est pas le problème mais cela m'a aidé à identifier le problème. Voir éditer. – Sal

+0

J'ai modifié le texte pour inclure les réponses à vos questions ultérieures. –