2010-06-10 26 views
2

Pourquoi l'instruction d'octroi suivante ne fonctionne-t-elle pas?Problème de subvention MySQL

grant all on kylie.* to 'kylie'@'localhost' identified by 'foo'; 

Voici la sortie complète.

$ mysql -A 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 63 
Server version: 5.1.37 Source distribution 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql> show databases like 'kylie%'; 
+-------------------+ 
| Database (kylie%) | 
+-------------------+ 
| kylie    | 
+-------------------+ 
1 row in set (0.00 sec) 

mysql> grant all on kylie.* to 'kylie'@'localhost' identified by 'foo'; 
Query OK, 0 rows affected (0.02 sec) 

mysql> exit 
Bye 

$ mysql -u kylie 
ERROR 1045 (28000): Access denied for user 'kylie'@'localhost' (using password: YES) 

Il semble que ces options de subvention me soient toujours utiles. Je pense que je les ai mémorisés et que les docs semblent aussi vérifier, mais ils échouent souvent à travailler. Qu'est-ce que je rate?

+0

Je suppose que vous avez laissé une ligne entre les deux dernières lignes (celle qui demande le mot de passe 'foo')? – Senseful

+0

Non, c'est le problème. MySQL ne demande pas le mot de passe et me donne simplement une erreur d'accès refusé. –

+0

Avez-vous un fichier ~/.my.cnf dans lequel le client peut éventuellement lire un mot de passe (incorrect)? –

Répondre

1

Essayez quelque chose comme:

mysql -ukylie -pfoo kylie 

La dernière kylie devrait lui dire d'utiliser kylie comme la base de données par défaut (à savoir celui que vous avez la permission de). Ce n'est peut-être pas nécessaire, mais je me demande si cela fonctionnera ou non pour vous.

Mis à jour grâce aux commentaires.

+0

Cela me donne la sortie MySQL indiquant l'utilisation, comme la commande est tout simplement faux. J'ai également essayé ce qui suit. "mysql -ukylie -pfoo" Cela a fonctionné! Se demander pourquoi. –

+0

Lorsque vous utilisez l'option -p suivie d'un espace, mysql vous demande de taper votre mot de passe. Cela prend foo comme nom de la base de données à laquelle se connecter. Comme il n'y a pas de base de données nommée foo, elle génère une erreur. Si vous omettez l'espace, mysql interprète foo comme mot de passe et kylie comme base de données, ce qui est correct. Si vous incluez le mot de passe dans la commande, il apparaît dans vos fichiers d'historique etc. Il est plus sûr d'utiliser l'option -p sans le mot de passe: mysql -p -u kylie kylie Dans ce cas, il vous sera demandé votre mot de passe, qui n'apparaîtra pas dans les fichiers d'historique, etc. – titanoboa