È possibile anonimizzare un intero database, colonna per colonna, riga per riga, cella per cella usando un semplice script.
Lo script che vi propongo è stato scritto in PHP, in collaborazione con BriganteMik.
Prima di lanciarlo è necessario solo configurare opportunamente i parametri di accesso al database.
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "dbname";
$destinatario = "myemail.com"; // ES: "tolkien.us" will be <random-name>@tolkien.us
function email_cleanup($servername, $username, $password, $dbname){
// Connecting to database
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else {
print("Connected to db: ".$dbname);
}
$table_query = "SHOW TABLES";
$result = $conn->query($table_query);
while($row = $result->fetch_assoc()) {
$table_name = ($row['Tables_in_'. $dbname]);
$columns_query = 'SHOW COLUMNS FROM ' . $table_name . ' WHERE (TYPE LIKE "VARCHAR%")'; // OR TYPE LIKE "TEXT")';
$result_column = $conn->query($columns_query);
var_dump("TABLE: " . $table_name);
while( $row_column = $result_column->fetch_assoc() ) {
$data_query = "UPDATE ". $table_name . " SET " . $row_column['Field'] . " =
REPLACE(
" . $row_column['Field'] . ",
SUBSTRING(
" . $row_column['Field'] . ",
INSTR(" . $row_column['Field'] . ", '@') - 1
),
CONCAT(FLOOR(RAND() * (1000) +1),'@" . $destinatario . "'))
WHERE " . $row_column['Field'] . " RLIKE '[A-Z0-9._-]+@[A-Z0-9.-]+\.[A-Z]{2,4}'" ;
$conn->query($data_query);
var_dump("Query executed: $data_query");
}
}
$conn->close();
}