Laisser les utilisateurs de MySQL créer des bases de données, mais autoriser l’access à leurs propres bases de données

Je veux avoir plusieurs utilisateurs MySQL pour pouvoir émettre des commandes comme

CREATE DATABASE dbTest; 

Mais je souhaite également que chacun de ces utilisateurs puisse voir et accéder uniquement à ses propres bases de données.

Tout ce que j’ai pu trouver, c’est comment créer les bases de données par un administrateur de firebase database et accorder les privilèges sur cette firebase database à l’utilisateur spécifique:

 GRANT ALL PRIVILEGES ON dbTest.* TO 'user'; 

ou accorder des privilèges sur toutes les bases de données à un utilisateur:

 GRANT ALL PRIVILEGES ON *.* TO 'user'; 

Mais ce n’est pas non plus ce que je veux, car il doit évoluer et être sécurisé.

Vous pouvez utiliser

 GRANT ALL PRIVILEGES ON `testuser\_%` . * TO 'testuser'@'%'; 

accorder à l’utilisateur des privilèges sur toutes les bases de données dont le nom commence par testuser_ .

Cela permet à l’utilisateur de créer des bases de données limitées à des noms commençant par testuser_

Vous pouvez utiliser

 GRANT ALL PRIVILEGES ON `testuser_%` . * TO 'testuser'@'%'; 

accorder à l’utilisateur des privilèges sur toutes les bases de données dont le nom commence par testuser_ .

EDIT: Je ne suis pas sûr que cet utilisateur soit maintenant autorisé à créer des bases de données.

Oui, cela permet à l’ testuser de créer des bases de données limitées aux noms commençant par testuser_

Créez une procédure stockée définie par l’utilisateur admin et invoque avec les privilèges administrateur en utilisant SQL SECURITY DEFINER. Dans la procédure stockée,

  • Créez la firebase database.
  • Définissez les privilèges sur la firebase database afin que seul l’utilisateur actuel y ait access.
  • Exécutez FLUSH PRIVILEGES pour recharger les privilèges des tables d’atsortingbution.

Utilisez USER () pour obtenir les informations de connexion actuelles de l’utilisateur.

En savoir plus sur SQL SECURITY DEFINER .

Il est impossible de le faire en utilisant uniquement des permissions .

La solution de contournement suggérée dans une autre réponse: AGREZ GRANT ALL PRIVILEGES ON testuser_% . * TO 'testuser'@'%'; . * TO 'testuser'@'%'; a le problème que les utilisateurs doivent alors faire très attention en nommant leurs bases de données.

Par exemple, si l’utilisateur aaa crée la firebase database bbb_xyz , l’utilisateur peut y accéder uniquement par l’utilisateur bbb mais pas par l’utilisateur aaa .