Newsgroup: it.comp.software.database
Titolo: [MySql] LOAD DATA INFILE

Ciao a tutti.
Ho installato con successo MySql 4.0.9 su una Linux Mandrake 9.0.
Da mysql-root ho creato un database:
mysql> CREATE DATABASE prova;
Poi ho dato tutti i poteri su questo database all'utente pinco:
mysql> GRANT ALL PRIVILEGES TO prova.* TO pinco@localhost IDENTIFIED BY 
'password' ;
Poi ho aggiornato la tavola dei privilegi:
mysql> FLUSH PRIVILEGES;
A questo punto, loggandomi come mysql-pinco, accedo al database, creo 
tabelle, le elimino e fin qui tutto bene. Poi quando ho bisogno di caricare 
dati da un file esterno digito:
mysql> LOAD DATA INFILE '/home/pinco/dati_da_caricare' INTO TABLE 
tabella_da_riempire;
A questo punto mi viene restituito il seguente errore:
ERROR 1045: Access denied for user 'pinco@localhost' (Using password: YES)
Perchè mi viene negato l'accesso alla funzione FILE? Non ho dato tutti i 
privilegi a 'pinco' con l'istruzione precedente???
Grazie mille per l'attenzione prestatami.
mick
-- 
Per favore non inviatemi allegati di tipo MS-Office.
Ci sono tante buone ragioni per questo,
ma la principale è che non posso leggerli.
Grazie.

 'password' ;
Ops......chiedo scusa per l'errore. Il comando esatto che ho dato č:
mysql> GRANT ALL PRIVILEGES ON prova.* TO pinco@localhost IDENTIFIED BY 
'password';            
-- 
Per favore non inviatemi allegati di tipo MS-Office.
Ci sono tante buone ragioni per questo,
ma la principale č che non posso leggerli.
Grazie.

 
la tua tabella mysql.user com'č fatta?
dumpaci la query select * from mysql.user where name='pinco';
ciao
-- 
punkarruso

 dumpaci la query select * from mysql.user where name='pinco';
Allora, dopo il canonico tazzone di caffé, per evitare errori ho eliminato 
l'utente pinco e il database di prova.
mysql> DELETE FROM user WHERE user='pinco';
mysql> DROP DATABASE prova;
A questo punto ho ricominciato da capo:
mysql> CREATE DATABASE prova;
mysql> GRANT ALL PRIVILEGES ON prova.* TO pinco@localhost IDENTIFIED BY 
'password';
Query OK, 0 rows affected (0,00 seconds)
Prima domanda: questo significa che la query è ok, ma che non è successo 
nulla, giusto??
Seconda domanda: dovevo selezionare il database "prova" prima di dare i 
privilegi?
(Ho provato entrambi, e il risultato mi sembra uguale)
Ok, andiamo avanti.
A questo punto faccio il dump della query SELECT:
mysql> SELECT * FROM mysql.user WHERE user='pinco' INTO OUTFILE 'dump';
(lasciamo perdere che non riesco a scrivere né su /root, né su /home/pinco, 
perchè il proprietario del file 'dump' risulta essere mysql - anche se il 
client lo lancia system-root).
Ti riporto il dump:
localhost       pinco   password_md5    N       N       N       N
N       N       N       N       N       N       N       N       N
N       N       N       N       N       N       N       N       0
0       0
(ho spezzato la riga su più righe)
A questo punto, mi loggo al server mysql come 'pinco' e provo a creare una 
tabella e a caricare dati da un file:
Shell> mysql -u pinco -p
Passwor:
mysql> USE prova;
mysql> CREATE TABLE partite(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY 
KEY, data DATE,squadra1 INT(1) NOT NULL,squadra2 INT(1) NOT NULL);
E' solo una tabella di esempio. Tutto bene fin qui. Poi:
mysql> LOAD DATA INFILE '/home/pinco/partite' INTO TABLE 
partite(data,squadra1,squadra2);
La risposta è sempre la stessa:
ERROR 1045: Access denied for user: 'pinco@localhost' (Using password: YES)
Come posso dare anche questo privilegio all'utente 'pinco'??
Grazie ancora per l'attenzione.
mick
-- 
Per favore non inviatemi allegati di tipo MS-Office.
Ci sono tante buone ragioni per questo,
ma la principale è che non posso leggerli.
Grazie.

 Come posso dare anche questo privilegio all'utente 'pinco'??
il privilegio "file" non è proprio del database ma del server più in 
generale.
quindi, devi darlo a livello di mysql.user e non di mysql.db:
update mysql.user set file_priv='Y' where user='pinco' and host='localhost';
flush priviliges;
ciao
-- 
punkarruso

 host='localhost'; flush priviliges;
Ho eseguito la query ed è andata a buon fine. Ora l'utente 'pinco' carica i 
file nella tabella.  Ti ringrazio, in quanto hai risolto il mio problema. 
Ma mi piacerebbe capire questa cosa:
Non basta, quindi, dare i giusti privilegi sul db? Devi dare i giusti 
privilegi anche a livello server? 
Mi spiego meglio: nel mio caso, avevo dato i giusti privilegi all'utente 
'pinco' sul database, ma questi ultimi non corrispondevano ai privilegi 
dati allo stesso utente a livello server. Quindi, tra i due, prevalevano 
quelli del server, giusto?
Ti ringrazio per i suggerimenti.Spero di poter ricambiare,un giorno.


 Ti ringrazio per i suggerimenti.Spero di poter ricambiare,un giorno.
se vuoi farmi (e farti) un favore, promettimi che qualsiasi problema di 
questo tipo lo cercherai prima sul manuale online (
www.mysql.com
).
non c'è fonte più ricca per capire come funziona mysql.
ciao
-- 
punkarruso

 non c'è fonte più ricca per capire come funziona mysql.
Penso che prima o poi mi banneranno dal mirror italiano del sito per eccesso 
di traffico! hehehehehe
Scherzi a parte, hai perfettamente ragione, e cerco di non scrivere per ogni 
cosa. In questo caso, però, era un problema che non sapevo nemmeno come 
cercare sul manuale.
Grazie ancora.


 'password';
prova a fare "grant all on prova.* to ecc."
omettendo "privileges"  fa piu' cose, io sul mio se metto "grant all" riesco
a vederlo e manipolarlo con mysqladmin, se metto "grant all privileges",
mysqladmin non mi fa vedere il database.
B.