Sto provando a connettermi a un server mysql su dreamhost da uno script php situato in un server su slicehost (due diverse società di hosting). Ho bisogno di fare questo in modo da poter trasferire nuovi dati su slicehost su dreamhost. L'uso di un dump non è un'opzione perché le strutture delle tabelle sono diverse e ho solo bisogno di trasferire un piccolo sottoinsieme di dati (100-200 record giornalieri) Il problema è che sto usando il nuovo metodo di hashing di password MySQL su slicehost, e DreamHost usa quello vecchio, in modo da ottenereMysql metodo di hashing della password vecchio vs nuovo
$link = mysql_connect($mysqlHost, $mysqlUser, $mysqlPass, FALSE);
Warning: mysql_connect() [function.mysql-connect]: OK packet 6 bytes shorter than expected
Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using old authentication
Warning: mysql_query() [function.mysql-query]: Access denied for user 'nodari'@'localhost' (using password: NO)
fatti:
- ho bisogno di continuare a utilizzare il nuovo metodo a slicehost e non posso utilizzare una versione precedente di PHP/biblioteca
- il il database è troppo grande per trasferirlo ogni giorno con una discarica
- Anche se ho fatto questo, le tabelle hanno strutture diverse
- ho bisogno di copiare solo un piccolo sottoinsieme di esso, in una base quotidiana (solo le modifiche della giornata, 100-200 record)
- Dal momento che le tabelle sono così diversi, ho bisogno di usare il PHP come un ponte per normalizzare i dati
- già concentrandoci
- già parlato con entrambi i Staf supporto
la soluzione più ovvia per me sarebbe quella di iniziare a utilizzare il nuovo Metodo di hashing di password MySQL su dreamhost, ma non lo cambieranno e non lo farò Quindi non posso farlo da solo.
Qualche idea selvaggia?
By VolkerK sugestion:
mysql> SET SESSION old_passwords=0;
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT @@global.old_passwords,@@session.old_passwords, Length(PASSWORD('abc'));
+------------------------+-------------------------+-------------------------+
| @@global.old_passwords | @@session.old_passwords | Length(PASSWORD('abc')) |
+------------------------+-------------------------+-------------------------+
| 1 | 0 | 41 |
+------------------------+-------------------------+-------------------------+
1 row in set (0.00 sec)
La cosa più ovvia sarebbe ora essere eseguito un mysql> SET GLOBAL old_passwords = 0; ma ho bisogno privilegio SUPER per farlo e si suole dare a me
se corro la query
SET PASSWORD FOR 'nodari'@'HOSTNAME' = PASSWORD('new password');
ottengo l'errore
ERROR 1044 (42000): Access denied for user 'nodari'@'67.205.0.0/255.255.192.0' to database 'mysql'
io non sono radice ..
Il tizio al supporto di dreamhost insiste dicendo che il problema è alla mia fine. Ma ha detto che eseguirà qualsiasi query che gli dica dato che si tratta di un server privato. Quindi, ho bisogno di dire a questo ragazzo ESATTAMENTE cosa correre. Così, dicendogli di correre
SET SESSION old_passwords=0;
SET GLOBAL old_passwords=0;
SET PASSWORD FOR 'nodari'@'HOSTNAME' = PASSWORD('new password');
grant all privileges on *.* to [email protected] identified by 'new password';
sarebbe un buon inizio?
'old_passwords per la sessione del = 0 'dovrebbero essere sufficienti, non c'è bisogno di cambiare l'impostazione globale per questa soluzione one-shot (altrimenti potrebbero semplicemente riavviare il mysqld, senza che l'opzione). L'ho provato sul mio server 5.1.37 locale. Per confermare che un nuovo hash è in realtà "nuovo", lascia che il tipo di supporto esegua la query "SELECT \" Host \ ", Length (\' PASSWORD \ ') FROM mysql.user WHERE \ User \' = 'nodari''. Remeber: 41 è buono, 16 è vecchio = cattivo ;-) – VolkerK
Oh, e proverei prima senza la concessione. Non dovrebbe essere necessario per il tuo account esistente. Probabilmente non fa male a nessuno, ma introduce una nuova domanda: "Il 'identificato da' obbedisce esattamente alle stesse regole di PASSWORD()?" Molto probabilmente, ma non si sa mai ;-) – VolkerK
non è una cosa di una volta, dovrò farlo quotidianamente durante un periodo ... E a meno che nel prossimo riavvio questa cosa vecchia_password tornerà a mordimi nel culo –