web-dev-qa-db-fra.com

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 de partout, 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'. Je reçois 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'
563
marioosh
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

C’est ainsi que je crée mes privilèges "Super utilisateur" (bien que je spécifierais normalement un hôte).

NOTE IMPORTANTE

Alors que cette réponse peut résoudre le problème de l'accès, WITH GRANT OPTION crée un utilisateur MySQL qui peut modifier les permissions des autres utilisateurs

Le privilège GRANT OPTION vous permet de donner à d'autres utilisateurs ou de supprimer des 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 d'utilisateur pour un processus auquel le public aura accès (c'est-à-dire un site Web). Il est recommandé de créer un utilisateur disposant uniquement des privilèges de base de données pour ce type d'utilisation.

844
diagonalbatman

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

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 de socket, que la localhost est pour. WITH GRANT OPTION n'est utile que pour le super utilisateur, sinon c'est généralement un risque pour la sécurité.

J'espère que cela t'aides.

490
akostadinov

Cela sera utile pour certaines personnes:

En ligne de commande MySQL:

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

Malheureusement, à ce stade, newuser n’a pas le droit de faire quoi que ce soit avec les bases de données. En fait, si newuser tente même de se connecter (avec le mot de passe, mot de passe), ils ne pourront pas accéder à MySQL Shell. 

Par conséquent, la première chose à faire est de fournir à l'utilisateur un 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, éditer, exécuter et exécuter toutes les tâches de toutes les bases de données et tables. 

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

FLUSH PRIVILEGES;

Vos modifications seront maintenant en vigueur.

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

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

107
user3008525

1. Créer la base de données 

CREATE DATABASE db_name;

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

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 vous trouvez dans la base de données nom_base, puis exécutez les commandes telles que créer, sélectionner et insérer des opérations.

28
Bhavnesh

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

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
20
s6712
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

Fonctionne pour les privilèges sur le schéma :) 

Facultatif: après mypasswd, vous pouvez ajouter WITH GRANT OPTION

13
Dutch Glory

Bonjour, j'ai utilisé ce code pour avoir le super utilisateur dans mysql

GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE,
    CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP,
    EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, CREATE USER, FILE,
    LOCK TABLES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN,
    SUPER
        ON *.* TO mysql@'%'
    WITH GRANT OPTION;

et alors

FLUSH PRIVILEGES;
12
gastonnina

Je pouvais le faire fonctionner seulement en ajoutant GRANT OPTION, sans que toujours recevoir l'erreur refusée autorisation

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;
12
GnanaPrakash

Pour accéder à la base de données mydb uniquement depuis un serveur distant

GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';

Accéder depuis le serveur distant à toutes les bases de données.

GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';
5
Developer

Pour accorder tous les privilèges sur la base de données: mydb à l'utilisateur: myuser, exécutez simplement:

GRANT ALL ON mydb.* TO 'myuser'@'localhost';

ou:

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';

Le mot clé PRIVILEGES n'est pas nécessaire.

De plus, je ne sais pas pourquoi les autres réponses suggèrent que le IDENTIFIED BY 'password' soit mis à la fin de la commande. Je crois que ce n'est pas nécessaire.

0
pgmank