web-dev-qa-db-fra.com

Pourquoi GRANT ne fonctionne-t-il pas dans MySQL?

Je me gratte la tête en voyant une tonne de sites Web auxiliaires montrant comment créer des utilisateurs MySQL et octroyer des privilèges, mais pour une raison quelconque, cela ne fonctionne tout simplement pas pour moi. J'ai essayé à la fois WinXP et un ordinateur portable MacBook Pro avec la dernière version de MySQL installée.

Ce qui suit est juste un exemple de quand j'ai travaillé avec WordPress. La base de données actuelle est quelque chose de différent, mais les mêmes problèmes.

Voici les étapes:

mysql> mysql -uroot -p<password>
mysql> CREATE DATABASE wwordpress;
mysql> CREATE USER 'www'@'localhost' IDENTIFIED BY 'basic';

Requête OK, 0 ligne affectée (0.14 sec)

mysql> GRANT INSERT ON wordpress.* TO 'www'@'localhost' IDENTIFIED BY 'basic';

Requête OK, 0 lignes affectées (0.00 s)

mysql> FLUSH PRIVILEGES;

Requête OK, 0 ligne affectée (0.03 sec)

mysql> SELECT * FROM mysql.user WHERE User='www' \G
 **************************** 1. rangée ***************** ********** 
 Hôte: localhost 
 Utilisateur: www 
 Mot de passe: * E85C94AF0F09C892339D31CF7570A970BCDC5805 
 Select_priv: N 
 Insert_priv: N 
 Update_priv: N 
 Delete_priv: N 
 Create_priv: N 
 Drop_priv: N 
 Reload_priv: N 
 Shutdown_priv: N 
 Process_priv: N 
 File_priv: N 
 Grant_priv: N 
 References_priv: N 
 Index_priv: N 
 Alter_priv: N 
 Show_db_priv: N 
 Super_priv: N 
 Create_tmp_table_priv: N 
 Lock_tables_priv: N 
 Execute_priv: N 
 Repl_slave_priv: N 
 Repl_client_priv: N 
 Create_view_priv: N 
 Show_view_priv: N 
 Create_routine_priv: N 
 Alter_routine_priv: N 
 Create_user_priv: N 
 Event_priv: N 
 Trigger_priv: N 
 ssl_type: 
 ssl_cipher: 
 x509_issuer: 
 x509_subject: 
 max_questions: 0 
 max_updates: 0 
 max_connections: 0 
 max_user_connections: 0 
 1 ligne dans l'ensemble (0.00 sec) 

 mysql> 

Comme vous pouvez le voir, "Insert_priv: N" devrait être "Y".

Aucune suggestion?

Merci d'avance.

37
Christopher

ce que vous sélectionnez sont les privilèges globaux . vous donnez cependant des privilèges spécifiques à la base de données (et à l'hôte, mais cela n'a pas d'importance).

GRANT INSERTON wordpress.* TO 'www'@'localhost' IDENTIFIED BY 'basic';

ces autorisations sont stockées dans la table db.

juste pour vous orienter dans la bonne direction:

SHOW GRANTS FOR 'www'@'localhost'

http://dev.mysql.com/doc/refman/5.0/en/show-grants.html

35
The Surrican

Ce n'est pas là que sont stockés le plus grand nombre de droits octroyés par un utilisateur - essayez

SHOW GRANTS FOR 'www'@'localhost'

pour voir les autorisations spécifiques à la base de données à la place. (Un octroi n'apparaîtrait dans la table utilisateur que s'il s'agissait de toutes les bases de données.)

Voici un détail (plutôt ancien) étape par étape de comment les autorisations sont stockées dans MySQL - Je ne pense pas que les choses aient beaucoup changé.

11
martin clayton

Cela devrait fonctionner:

GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';

Vous devez consulter les tables mysql.db ou mysql.tables_priv si vous devez sélectionner Y ou N si vous essayez de définir certaines restrictions à partir de la page à partir de laquelle un utilisateur peut modifier, insérer ou supprimer ... Ces tables sont automatiquement mises à jour avec les Y et les N car ils sont uniquement conçus pour montrer les privilèges d’un utilisateur sur les tables ou les colonnes, par opposition à mysql.user, dont le but est de montrer qu’un certain utilisateur peut se connecter (créer une connexion) à une base de données.

1
Titus Kamau Mbugua