2
votes

MySQL: LOAD DATA LOCAL INFILE ne fonctionne pas après la mise à jour du pilote de 5 à 8

Nous avons récemment mis à jour nos ordinateurs clients de Windows 7 vers Windows 10, et avec cela, mis à jour nos pilotes MySQL de "MySQL ODBC 5.3 Unicode Driver" à "MySQL ODBC 8.0 Unicode Driver".

J'utilise la commande LOAD DATA LOCAL INFILE via le package RODBC R pour importer des données d'un fichier CSV local vers un serveur MySQL. Aucune modification n'a été effectuée sur le serveur et l'instruction SQL est toujours la même qu'avant, mais depuis la mise à jour du pilote, j'obtiens le message d'erreur suivant:

"La commande utilisée n'est pas autorisée avec cette version de MySQL"

La commande fonctionne toujours lorsque je l'exécute sur l'une des anciennes machines Win7, ce qui signifie qu'il ne s'agit pas d'un problème de serveur (tel que local-infile = 0 dans le fichier de configuration ).

Quelqu'un d'autre a-t-il vécu cela?

Merci et cordialement,

Johannes


3 commentaires

C'est également quelque chose qui doit être activé lors de la connexion du client à la base de données. Le package RODBC devrait avoir une option pour cela.


Merci pour les réponses rapides! Je ne parviens pas à trouver l'option dans le package RODBC pour activer local-infile côté client. Peut-être que le package est trop ancien pour prendre en charge une option explicite pour cela. Dans tous les cas, voici ma solution de contournement: je télécharge le fichier csv via curl sur le serveur et lis le contenu sans la partie LOCAL. Ce n'est pas la meilleure option, je sais, mais j'ai dû trouver une solution de travail rapidement.


Possibilité de duplication de MySQL LOAD DATA LOCAL INFILE non autorisé sur ODBC


3 Réponses :



1
votes

Il a été désactivé en raison d'une vulnérabilité dans la façon dont le pilote client MySQL gère le local-infile côté client, voir aussi: Percona répond à Problèmes de sécurité MySQL LOCAL INFILE .

L'activation de la fonctionnalité sur le client rend votre pilote client vulnérable pour une injection (extérieure). Considérez donc que si la machine utilisant le pilote odbc peut être (ab) utilisée par des connexions extérieures, elle pourrait devenir vulnérable pour la directive local-infile .


0 commentaires

1
votes

Les dernières versions de MySQL ODBC Connector (> 8.0.14) vous permettent de définir

odbcDriverConnect("DSN=dsnName;ENABLE_LOCAL_INFILE=1")

dans les détails de connexion odbc.ini.

Dans votre code R , essayez:

ENABLE_LOCAL_INFILE=1

Sinon, essayez de modifier l'entrée de registre Windows pour votre connexion ODBC:

  1. Ouvrez l'éditeur de registre Windows - cliquez sur l'icône Windows et saisissez regedit
  2. Accédez à HKEY_LOCAL_MACHINE \ SOFTWARE \ ODBC \ ODBC.INI . C'est là que se trouvent mes entrées ODBC.
  3. Sélectionnez la connexion ODBC que vous souhaitez modifier et choisissez Modifier> Nouveau> Valeur de chaîne dans le menu.
  4. Donnez à la nouvelle entrée le nom ENABLE_LOCAL_INFILE et définissez sa valeur sur 1.

https : //dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-parameters.html

La mise à niveau de mon connecteur et la mise à jour de odbc.ini ont abouti à succès pour moi.


0 commentaires