web-dev-qa-db-fra.com

MYSQL dans le fichier de sortie "accès refusé" - mais mon utilisateur a un accès "TOUS" .. et le dossier est CHMOD 777

Des idées?

SELECT * INTO OUTFILE '/home/myacnt/docs/mysqlCSVtest.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '*'
LINES TERMINATED BY '\n'
FROM tbl_property 
WHERE managerGroupID = {$managerGroupID}

Erreur:

Access denied for user 'asdfsdf'@'localhost' (using password: YES)
68
Shackrock

Essayez d’exécuter cette commande SQL:

> grant all privileges 
  on YOUR_DATABASE.* 
  to 'asdfsdf'@'localhost' 
  identified by 'your_password';
> flush privileges; 

Il semble que vous rencontriez des problèmes pour vous connecter à la base de données et ne pas écrire dans le dossier que vous mentionnez.

Assurez-vous également que vous avez accordé FILE à l'utilisateur 'asdfsdf'@'localhost'.

> GRANT FILE ON *.* TO 'asdfsdf'@'localhost';
110
Pablo Santa Cruz

Honnêtement, je n'ai pas pris la peine de traiter avec les subventions et cela a fonctionné même sans les privilèges:

echo "select * from employee" | mysql --Host=HOST --port=PORT --user=UserName --password=Password DATABASE.SCHEMA > output.txt
44
user1028904

Comme @fijaaron le dit,

  1. GRANT ALL n'implique pas GRANT FILE
  2. GRANT FILE ne fonctionne qu'avec *.*

Alors faites

GRANT FILE ON *.* TO user;
19
e18r

Depuis que cP/WHM a perdu la possibilité de modifier les privilèges utilisateur en tant que root dans PHPMyAdmin, vous devez utiliser la ligne de commande pour:

mysql>  GRANT FILE ON *.* TO 'user'@'localhost';

L'étape 2 consiste à permettre à cet utilisateur de transférer un fichier dans un dossier spécifique. Il y a plusieurs façons de faire cela mais j'ai fini par mettre un dossier dans:

/home/user/tmp/db

et

chown mysql:mysql /home/user/tmp/db

Cela permet à l'utilisateur mysql d'écrire le fichier. Comme les précédentes affiches l'ont dit, vous pouvez aussi utiliser le dossier temporaire MySQL. Je suppose que cela n'a pas vraiment d'importance, mais vous ne voulez absolument pas lui donner l'autorisation 0777 (accessible en écriture), à ​​moins que vous ne souhaitiez que le monde entier voie vos données. Il y a un problème potentiel si vous voulez rincer-répéter le processus car INTO OUTFILE Ne fonctionnera pas si le fichier existe. Si vos fichiers appartiennent à un autre utilisateur, le simple fait d'essayer de unlink($file) ne fonctionnera pas. Si vous êtes comme moi (paranoïaque à propos de 0777), vous pouvez définir votre répertoire cible à l'aide de:

chmod($dir,0777)

juste avant de faire la commande SQL, puis

chmod($dir,0755)

immédiatement après, suivi de unlink(file) pour supprimer le fichier. Cela permet de garder tout cela sous votre utilisateur Web et ne nécessite pas d'appeler l'utilisateur mysql.

4
Grindlay