711 votes

MySQL : Accorder **tous** les privilèges sur la base de données

J'ai créé une base de données, par exemple 'mydb'.

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;

Maintenant je peux me connecter à la base de données depuis n'importe où, mais je ne peux pas créer de tables.

Comment accorder tous les privilèges sur cette base de données et (à l'avenir) sur les tables. Je ne peux pas créer de tables dans la base de données 'mydb'. J'obtiens toujours :

CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'

11 votes

Qu'est-ce que vous obtenez lorsque vous affichez les subventions pour l'utilisateur actuel ;

6 votes

Avez-vous essayé d'exécuter FLUSH PRIVILEGES ?

2 votes

@Andy Merci pour "SHOW GRANTS FOR CURRENT_USER ;" - cela m'aide à voir ma faute de frappe.

1044voto

diagonalbatman Points 6833
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

C'est ainsi que je crée mes privilèges de "super utilisateur" (bien que je doive normalement spécifier un hôte).

NOTE IMPORTANTE

Bien que cette réponse puisse résoudre le problème de l'accès, WITH GRANT OPTION crée un utilisateur MySQL qui peut modifier les autorisations d'autres utilisateurs .

Le privilège GRANT OPTION vous permet de donner à d'autres utilisateurs ou de retirer à d'autres utilisateurs les privilèges que vous possédez vous-même.

Pour des raisons de sécurité, vous ne devez pas utiliser ce type de compte utilisateur pour un processus auquel le public aura accès (par exemple, un site web). Il est recommandé de créer un utilisateur avec uniquement des privilèges de base de données pour ce genre d'utilisation.

36 votes

@Romain vous n'apportez pas grand chose ici - je ne nomme pas mes utilisateurs myuser - le questionneur utilisait simplement un nom d'utilisateur comme exemple - j'ai utilisé le même exemple de nom d'utilisateur pour la cohérence.

23 votes

C'est normal. Mais il faut aussi penser aux autres personnes, peut-être des débutants, qui pourraient lire cette question plus tard. N'est-ce pas aussi le but de l'OS ?

8 votes

Je ne pense pas non plus que cette réponse soit la bonne. Elle donne des privilèges "administrateur" sur toutes les bases de données et toutes les tables, ce qui n'est pas ce qui a été demandé.

571voto

akostadinov Points 3272

C'est une vieille question mais je ne pense pas que la réponse acceptée soit sûre. C'est bien pour créer un super utilisateur mais pas si vous voulez accorder des privilèges sur une seule base de données.

grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';

% semble ne pas couvrir les communications par socket, que le localhost est pour. WITH GRANT OPTION n'est bon que pour le super utilisateur, sinon c'est généralement un risque pour la sécurité.

Mise à jour pour MySQL 5.7+ semble être un avertissement à ce sujet :

L'utilisation de l'instruction GRANT pour modifier les propriétés d'un utilisateur existant autres que les que les privilèges, est obsolète et sera supprimée dans les prochaines versions. Utilisez l'instruction ALTER USER pour cette opération.

La définition du mot de passe doit donc se faire par des commandes séparées. Merci au commentaire de @scary-wombat.

ALTER USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
ALTER USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';

J'espère que cela vous aidera.

36 votes

+1 pour ne pas avoir inclus WITH GRANT OPTION et de cibler une base de données spécifique au lieu de toutes les bases de données ( * ).

0 votes

@IanBussieres la grammaire de "% semble ne pas couvrir les communications par socket, pour lesquelles le localhost est utilisé" n'est pas claire. Qu'est-ce que cela signifie réellement ?

3 votes

@Thufir, cherche unix sockets . Lorsque vous utilisez localhost Le client myslq sous linux essaie d'utiliser un socket unix au lieu d'une connexion TCP au serveur.

158voto

Cela sera utile pour certaines personnes :

Depuis la ligne de commande MySQL :

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

Malheureusement, à ce stade, le nouvel utilisateur n'a pas le droit de faire quoi que ce soit avec les bases de données. En fait, si le nouvel utilisateur essaie même de se connecter (avec le mot de passe, password), il ne sera pas en mesure d'atteindre le shell MySQL.

Par conséquent, la première chose à faire est de fournir à l'utilisateur l'accès aux informations dont il aura besoin.

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

Les astérisques dans 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 mettre en place pour vos nouveaux utilisateurs, veillez toujours à recharger tous les privilèges.

FLUSH PRIVILEGES;

Vos modifications seront désormais effectives.

Pour plus d'informations : http://dev.mysql.com/doc/refman/5.6/en/grant.html

Si vous n'êtes pas à l'aise avec la ligne de commande, vous pouvez utiliser un client tel que Banc d'essai MySQL , Navicat o SQLyog

35voto

Bhavnesh Points 401

 1. Créez la base de données

CREATE DATABASE db_name;

 2. Créez le nom d'utilisateur pour la base de données db_name

GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';

 3. Utilisez la base de données

USE db_name;

 4. Enfin, vous êtes dans la base de données db_name et vous exécutez les commandes comme les opérations create, select et insert.

24voto

Nick Points 16

Ce SQL accorde sur toutes les bases de données mais seulement des privilèges de base. Ils sont suffisants pour Drupal ou Wordpress et, accessoirement, permettent un compte de développeur pour les projets locaux.

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

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