Comment accorder le privilège de création de base de données à un utilisateur dans MySQL

11

La commande suivante fournit tous les privilèges dans toutes les bases de données pour l'utilisateur «admin». Mais cela ne permet pas à «admin» de créer une base de données.

GRANT ALL ON * . * TO 'admin'@'localhost'; 

Comment puis-je fournir l'accès à «admin» pour créer une base de données?

Alors que j'essaie de créer une base de données, j'obtiens l'erreur suivante -

ERREUR 1044 (42000): accès refusé pour l'utilisateur 'admin' @ 'localhost' à la base de données 'newdb'

Abhishek
la source
L'avez-vous utilisé GRANT ALL ON *.* TO 'admin'@'localhost';? Dans votre exemple, vous dites que vous avez exécuté:, GRANT ALL ON * . * TO 'admin'@'hostname';mais hostnameest un hôte distinct de localhost.
oNare
le nom d'hôte est «localhost».
Abhishek
Étiez-vous connecté en tant que "root" lorsque vous avez exécuté cela GRANT?
Rick James
Oui. J'étais connecté en tant que "root" lorsque j'ai exécuté ce GRANT.
Abhishek
Avez-vous essayé en flush privileges;tant que root?
dwjv

Réponses:

5

TOUS les privilèges incluent "TOUS", sauf "AVEC L'OPTION GRANT" ... Ainsi, la commande ci-dessus permettra également à l'administrateur de créer la base de données.

Vous voudrez peut-être afficher l'erreur que vous obtenez. Notez que dans GRANT ci-dessus, vous n'avez pas spécifié le mot de passe pour l'utilisateur administrateur également.

Mise à jour:

Vous devriez pouvoir faire ce qui suit:

connectez-vous en tant que root et créez un utilisateur:

$] mysql -uroot -p
mysql> grant all privileges on *.* to 'admin'@'localhost';

Connectez-vous en tant qu'administrateur (sans mot de passe):

$] mysql -uadmin -p
mysql> create database admin;

Lorsque vous vous connectez, vous pouvez vérifier vos privilèges comme suit:

mysql> show grants;

ou

mysql> show grants for current_user();

mysql> select current_user() vous montrera, l'utilisateur auquel vous vous êtes connecté.

mysql_user
la source
J'ai ajouté l'erreur dans ma question.
Abhishek
@abhishek update answer .... btw quelle commande est à l'origine de l'erreur ci-dessus? Vérifiez les subventions accordées à votre utilisateur? Êtes-vous sûr de vous connecter en tant qu'administrateur?
mysql_user
Oui, je suis sûr à 100% que je me connecte en tant qu'administrateur.
Abhishek
mysql> afficher les subventions; + ------------------------------------------------- ---------------------------- + | Subventions pour admin @ localhost | + ------------------------------------------------- ---------------------------- + | DONNER L'UTILISATION SUR . À 'admin' @ 'localhost' IDENTIFIÉ PAR MOT DE PASSE <secret> | | ACCORDER TOUS LES PRIVILÈGES SUR newdb. * À 'admin' @ 'localhost' | + ------------------------------------------------- ---------------------------- + 2 lignes en set (0,00 sec)
Abhishek
Notez que vous n'avez que tous les privilèges sur mbdb ... vous ne pourrez donc pas travailler avec d'autres db!
mysql_user
0

Un nouvel utilisateur n'a aucune autorisation pour faire quoi que ce soit avec les bases de données. En fait, si un nouvel utilisateur essaie même de se connecter (avec le mot de passe, le mot de passe), il ne pourra pas atteindre le shell MySQL.

Par conséquent, vous devez fournir à l'utilisateur l'accès

GRANT ALL PRIVILEGES ON * . * TO 'admin'@'localhost'; 

Les astérisques de cette commande font référence à la base de données et à la table (respectivement) auxquelles ils peuvent accéder. Cette commande spécifique permet à l'utilisateur de lire, modifier, exécuter et effectuer toutes les tâches dans toutes les bases de données et tables.

Une fois que vous avez finalisé les autorisations que vous souhaitez configurer pour vos nouveaux utilisateurs, assurez-vous toujours de recharger tous les privilèges.

FLUSH PRIVILEGES;

Maintenant, tous les changements seraient en vigueur.

Mathew
la source
Les privilèges de vidage ne sont pas requis pour les commandes GRANT.
mysql_user
Oui..Je suis d'accord .... Mais FLUSH PRIVILAGES est requis lorsque nous modifions la subvention sur les tables directement à l'aide d'instructions telles que INSERT, UPDATE ou DELETE ... Merci @mysql_user
Mathew