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) 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'
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).
Bien que cette réponse puisse résoudre le problème d'accès, WITH GRANT OPTION
crée un utilisateur MySQL qui peut [modifier les permissions des autres utilisateurs] (https://dev.mysql.com/doc/refman/5.6/en/privileges-provided.html#priv_grant-option).
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 tout 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] (https://stackoverflow.com/a/15707789/2370483) pour ce type d'utilisation.
C'est une vieille question mais je ne pense pas que la réponse acceptée soit sûre. Elle est bonne 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, pour lesquelles le localhost
est prévu. WITH GRANT OPTION
n'est bon que pour le super utilisateur, sinon c'est généralement un risque pour la sécurité.
J'espère que cela vous aidera.
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 pourra pas 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 l'utilisateur peut 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 comme [MySQL workbench][1], [Navicat][2] ou [SQLyog][3].
[1] : http://www.mysql.com/products/workbench/ [2] : http://www.navicat.com [3] : http://www.webyog.com