Archivi categoria: MySQL, DB Server

MySQL, il database opensource più diffuso nel mondo, attualmente con la versione 5.0 stabile lancia la sfida ad Oracle e compagnia bella…

Nasce caraffinity.it il primo social network per chi vende e compra auto

E’ ormai online da qualche mese il primo portale di automotive social oriented, www.caraffinity.it .
Interamente sviluppato dal sottoscritto, utilizza svariate tecnologie sia del mondo Microsoft che del mondo Linux.

Microsoft

Linux

Se vi state domandando perchè ho scelto di mixare Microsoft e Linux è semplice, un ambiente eterogeneo per quanto più complesso da gestire, consente di sfruttare il meglio di ambedue le tecnologie.

A morte i talebani informatici! :-)

Parametro tmp dir MySQL, attenzione allo spazio

Nella configurazione di MySQL (mi pare anche nella standard da RPM delle redhat based) non viene configurato il parametro il parametro: tmpdir che normalmente assume il valore di default del sistema. Su Linux naturalmente /tmp.

Qualora per motivi di spazio o banalmente convinti che la /tmp non sia necessario renderla di ampie dimensioni, potrebbe accadere che durante certe operazioni molto pesanti su tabelle con quantitativi di record notevoli, il sistema esaurisca lo spazio nella partizione temporanea durante la fase di elaborazione dati e scrittura di una tmp table, proprio su questa partizione.

La query abortira’ con un messaggio del tipo no space left on device o qualcosa del genere.

In tal caso andra’ allargata la partizione tmp di sistema (o dove si appoggia MySQL) o in alternativa cambiato il path (che deve essere scrivibile dallo user “mysql”), fermato il servizio mysql e riavviato.

Transazioni con Zend Framework

Recentemente avendo sviluppato nelle ore serali un progetto web ( www.animalhelp-spb.com ) per supportare e cercare di far trovare casa a cani e gatti randagi russi, ho deciso di realizzarlo iniziando a farmi le ossa con Zend Framework.

Premetto che devo ancora dettagliare ed approfondire la conoscenza di questo strumento, in particolare nell’utilizzo secondo la logica MVC (model – viewer – controller), però l’ho trovato molto interessante, in particolare per la gestione delle transazioni.

In sostanza prima di tutto istanzio la classe corretta parametrizzando gli accessi al database:

$dbparams = array(‘host’ => DB_HOST, ‘username’ => DB_USER, ‘password’ => DB_PWD, ‘dbname’ => DB_NAME);
$db = new Zend_Db_Adapter_Mysqli($dbparams);
$db->setFetchMode(Zend_Db::FETCH_OBJ);

Successivamente apro la transazione:

$db->beginTransaction();
try
{
…. query 1 ….
…. query 2 ….

$db->commit();
}
catch (Exception $e)
{
$db->rollBack();
….
}

In sostanza nel caso vi sia un errore all’interno della transazione viene automaticamente rollbackato secondo una modalità simile a quella usata da adodb “Smart Transaction”.

Potenziale SQL Injection con AdoDB e driver mysqli

[SEGNALO CHE HO SCOPERTO QUESTA COSA DA POCO E LIMITANDOMI AD ALCUNI TEST E PROVE VELOCI MA REALI, PERCUI OGNI EVENTUALE APPROFONDIMENTO/SMENTITA ETC… E’ BEN ACCETTO]

Segnalo una problematica di sicurezza abbastanza importante per coloro che utilizzano adodb utilizzando il driver mysqli (le nuove funzioni di connessione con mysql native in php 5).

In sostanza le nuove funzioni mysqli consentono mediante la seguente funzione: mysqli_multi_query di poter eseguire più statement SQL in MySQL come ad esempio:

SELECT * FROM TBL1 WHERE id = 1; DROP table TBL2;

Questa query utilizzando le vecchie librerie mysql (es. mysql_connect) dava errore.
La possibilità di eseguire più query SQL è supportata su MySQL 5.0.x anche da command line, non saprei se anche vecchie versioni lo consentivano.

Questo significa che se per esempio utilizziamo in PHP una query del tipo:

$sql = “SELECT * FROM tbl1 WHERE id = $_GET[‘id’]”; // (Premesso che venga come minimo fatto l’escape dei caratteri come ‘ o “)

Possiamo rischiare che qualche burlone passi in GET il seguente valore:
“1; DROP TABLE tbl2;”
Il che comporterebbe che l’SQL eseguito sia:

SELECT * FROM TBL1; DROP table TBL2;

Di fatto quindi con AdoDB con driver mysqli, la seconda query viene effettivamente eseguita.

Diventa quindi essenziale fare un controllo sull’input dell’utente per $_GET[‘id’]. Ad esempio verificando che sia un numero intero.

La soluzione più rapida è quella di cambiare la connect di AdoDB dicendogli di usare il driver mysql anziché mysqli, la soluzione migliore e da fare comunque resta in ogni caso il filtraggio di tutti i dati in input.

MySQL 5.1 GA, attenzione a possibili bug fatali

Di seguito l’articolo in italiano di Punto Informatico:

http://punto-informatico.it/2494271/PI/News/mysql-51-una-falsa-partenza.aspx

E qui l’articolo ufficiale in lingua inglese di Michael Widenius ex CTO della MySQL AB acquistata tempo fa da SUN.

http://monty-says.blogspot.com/2008/11/oops-we-did-it-again-mysql-51-released.html

Io per adesso rimango sul 5.0 sul quale onestamente ho avuto pochi problemi.