Anonimizzare le email di un database con uno script

È 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();
}