Итак, мое решение анонимизировать данные на нашем сервере резервного копирования, где мы храним резервные копии баз данных MySQL в .sql
файлы следующие:
Создал скрипт, копирующий .sql
файл с резервного сервера на мою локальную рабочую станцию, автоматически импортирует его на мой сервер базы данных, анонимизирует конфиденциальные данные, экспортирует базу данных в другую .sql
файл, удаляет оригинал .sql
а также удаляет базу данных. Таким образом, я получаю анонимный .sql
файл. Однако я хочу сделать это быстрее, напрямую переписав значения в исходном .sql
подать сам.
Как вы думаете, какой для этого самый простой способ или мое решение уже самое лучшее? Думал об использовании sed
команда каким-то образом, но я просто понятия не имею, банкомат, как сказать скрипту, что заменить, где, сколько раз и чем. : /
В конце концов, все ваши ответы были хорошими, но не повысили производительность и не сократили время, необходимое для обслуживания анонимной базы данных для разработчиков. Вот мой сценарий bash:
#!/bin/bash
if [ -z "$1" ]; then
echo ""
echo "No anonymization PHP file present."
echo "Please create first a project specific anonymization PHP file!"
echo ""
exit
fi
if [ -z "$2" ]; then
echo ""
echo "You have not specified where the backup SQL files are located"
echo "Example: /backup/daily-raid/websites/projectnumberone/sqldump/"
echo ""
exit
fi
phpconfig=$1
route=$2
file=$(ssh backup "ls -t $route | head -1 && exit")
dbname=$(echo $file | head -c -11)
dbslug=$(echo $dbname | sed -e "s/-/_/g")
createdb="create database $dbslug"
dropdb="drop table $dbslug"
scp backup:$route$file /home/sysadmin/dumps
mysql -u root -e "$dropdb"
mysql -u root -e "$createdb"
mysql -u root $dbslug < /home/sysadmin/dumps/$file
rm -rf /home/sysadmin/dumps/$file
php $phpconfig $dbslug
exit
Не обращайте внимания на тот факт, что корень локальных серверов БД не имеет пароля.
Файл PHP основан на следующих проектах GitHub:
Просто создайте файл php, который знает, какие данные необходимо анонимизировать, и сценарий bash запустит его. OFC вам необходимо установить PHP на локальную рабочую станцию и сервер MySQL.
Что следует учитывать:
UPDATE
на месте проходит весь транзакционный материал; это приводит к лишним попаданиям. Так что, возможно UPDATEing
не лучший подход.CREATE TABLE
и DROP TABLE
потребовать некоторых усилий, но не таких, как чтение или запись всей таблицы.Я бы рассмотрел следующее (если это сработает для вашей ситуации):
CREATE DATABASE AnonDB ...;
USE AnonDB;
CREATE TABLE t1 LIKE RealDB.t1;
INSERT INTO t1
SELECT id, ok_data, Anonymizer(sensitive_data), ...
FROM RealDB.t1;
... t2 ...
etc.
Ноты...
DROP RealDB
в конце?Anonymizer
.sed
.С Mysql легко экспортировать и импортировать данные в формате csv.
Таким образом, можно было бы манипулировать данными с помощью простых команд оболочки в цикле. Намного проще, чем разобрать sql.
Такой же простой пример для работы:
for row in $(cat test.csv);
col1 = (echo $row | cut -d ',' -f 1);
col2 = (echo $row | cut -d ',' -f 2);
col3 = "Value to change"
echo "$col1,$col2,$col3" >> outpu.csv
done