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.

23voto

Dutch Glory Points 14715
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

18voto

GnanaPrakash Points 316

J'ai pu le faire fonctionner uniquement en ajoutant GRANT OPTION sans cela, on reçoit toujours une erreur de permission refusée

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

16voto

gastonnina Points 40

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 ensuite

FLUSH PRIVILEGES;

12 votes

flush privileges n'est pas nécessaire lorsque vous utilisez grant des commandes. x4

0 votes

Note : La liste exacte dans le GRANT varie selon les versions de MySQL.

13voto

Promise Preston Points 783

J'ai eu ce défi en travaillant sur MySQL Ver 8.0.21

Je voulais accorder les permissions d'une base de données nommée my_app_db à la root utilisateur fonctionnant sur localhost hôte.

Mais quand je lance la commande :

use my_app_db;

GRANT ALL PRIVILEGES ON my_app_db.* TO 'root'@'localhost';

Je reçois l'erreur :

ERREUR 1064 (42000) : Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe à utiliser près de 'my_app_db.* TO 'Root'@'localhost'' à la ligne 1>.

Voici comment j'ai réparé :

Connectez-vous à votre console MySQL. Vous pouvez modifier root à la utilisateur avec lequel vous voulez vous connecter :

mysql -u root -p

Entrez votre mysql Mot de passe racine

Ensuite, dressez la liste de tous les utilisateurs et de leur hôte sur le serveur MySQL. Contrairement à PostgreSQL, ceci est souvent stocké dans le fichier mysql base de données. Nous devons donc sélectionner le mysql la base de données en premier :

use mysql;
SELECT user, host FROM user;

Nota : si vous n'exécutez pas le use mysql vous obtenez le no database selected erreur.

Cela devrait vous donner un résultat de ce type :

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

Ensuite, sur la base des informations obtenues dans la liste, accordez les privilèges à l'utilisateur que vous souhaitez. Nous devrons d'abord sélectionner la base de données avant de lui accorder des droits. Pour moi, j'utilise la base de données root qui fonctionne sur le localhost hôte :

use my_app_db;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';

Nota : Le site GRANT ALL PRIVILEGES ON database_name.* TO 'root'@'localhost'; peut ne pas fonctionner pour les versions modernes de MySQL. La plupart des versions modernes de MySQL remplacent la commande database_name con * en el accorder des privilèges après avoir sélectionné la base de données que vous voulez utiliser.

Vous pouvez alors quitter la console MySQL :

exit

C'est tout.

J'espère que cela vous aidera

8voto

Developer Points 401

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

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

Pour accéder à toutes les bases de données à partir du serveur distant.

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

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