Hidesense för databaser • Secorum
21671
page-template,page-template-full_width,page-template-full_width-php,page,page-id-21671,page-child,parent-pageid-21581,ajax_updown_fade,page_not_loaded,boxed,select-child-theme-ver-1.0.0,select-theme-ver-3.7,,wpb-js-composer js-comp-ver-5.0.1,vc_responsive
hidesense för databaser

Hidesense för databaser

Hidesense arbetar med textfiler och inte direkt med databaser. Det är både en fördel och en nackdel. Nackdelen är att en databasadministratör inte kan använda sitt favoritverktyg för att gå in i den databas som organisationen har, men fördelarna uppväger. Genom att exportera databasen till en textbaserad dump-fil kan hidesense-sviten användas direkt på innehållet. hidesense förblir produktoberoende och programmet kan agera brygga mellan originaldatabasen och en tvättad databas.
Logger är en produkt som är bra på två saker:

Varför behövs databastvättar?

I datalagringsdirektivet är reglerna hårda för när produktionsdata får användas i teständamål och en organisation kan få kraftiga böter (reglerade som en procent av omsättningen) om de bryter mot direktivet. Grundregeln är att personuppgifter inte får användas i teständamål. Många organisationer gör detta idag på grund av att de testar ett system som ska vara så produktionslikt som möjligt, men genererat testdata har inte samma entropi som riktigt data vilket gör behovet av verklighetsliknande testdata mycket stort.

 

Lösningen är då att tvätta databasen: exportera produktionsdatabasen som en databasdump, identifiera tabeller och fält som ska tvättas, skriv en konfigurationsfil, tvätta tabellerna och läs in i testmiljön.

Hidesense separerar ut den känsliga informationen från produktionsmiljön så att den resterande informationen kan användas för teständamål

Tvätt av en databas

Nedan följer ett exempel på användandet av hidesense-core för att tvätta en databas från personuppgifter.

 

Förutsättningar

 

Databasdump. Här används MySql employee-databas, som kan hämtas från https://launchpad.net/test-db/+download

employees_db-full-1.0.6.tar.bz2

Möjlighet att packa upp tar och bz2. I OSX finns detta inbyggt.

MySQL. Här används en MySql på RHEL 6.4

hidesense-core.jar

Fil med förnamn: fname.txt

Fil med efternamn: ename.txt

Java 1.8.0 eller senare.

 

Packa upp databasen

 

Packa upp samtliga filer i en katalog. Öppna ett kommandofönster i den katalogen.

Verifiera att databasen inte är installerad.

# mysql -u root -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Syslog             |
| mysql             |
+--------------------+
3 rows in set (0.00 sec)

mysql> exit
Bye
#

I katalogen där databasen är uppackad, kör följande kommando:

# mysql -u root -p -t < employees.sql

Databasen ska visas.

Verifiera att databasen är installerad.

# mysql -u root -p

(Ange lösenord för root-användaren på mysql)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Syslog             |
| employees         |
| mysql             |
+--------------------+
4 rows in set (0.00 sec)

Notera att databasen employees finns.

mysql> use employees
Database changed
mysql> show tables;
+---------------------+
| Tables_in_employees |
+---------------------+
| departments         |
| dept_emp           |
| dept_manager       |
| employees           |
| salaries           |
| titles             |
+---------------------+
6 rows in set (0.00 sec)

Visa användartabellen:

mysql> select * from employees limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date |
+--------+------------+------------+-----------+--------+------------+
| 10001 | 1953-09-02 | Georgi     | Facello    | M     | 1986-06-26 |
| 10002 | 1964-06-02 | Bezalel    | Simmel     | F     | 1985-11-21 |
| 10003 | 1959-12-03 | Parto      | Bamford    | M     | 1986-08-28 |
| 10004 | 1954-05-01 | Chirstian  | Koblick    | M     | 1986-12-01 |
| 10005 | 1955-01-21 | Kyoichi    | Maliniak   | M     | 1989-09-12 |
| 10006 | 1953-04-20 | Anneke     | Preusig    | F     | 1989-06-02 |
| 10007 | 1957-05-23 | Tzvetan    | Zielinski  | F     | 1989-02-10 |
| 10008 | 1958-02-19 | Saniya     | Kalloufi   | M     | 1994-09-15 |
| 10009 | 1952-04-19 | Sumant     | Peac       | F     | 1985-02-18 |
| 10010 | 1963-06-01 | Duangkaew  | Piveteau   | F     | 1989-08-24 |
+--------+------------+------------+-----------+--------+------------+
10 rows in set (0.00 sec)

Vi ska anonymisera användartabellen och visa den nya efter datatvätten. Ta bort databasen först.

mysql> drop table employees;
exit

Skapa översättningsfil

 

Gå till katalogen där hidesense-core är installerat. Kopiera filen load_employees.dump till den katalogen.

Skapa översättningsfilen med följande innehåll:

rules.numberof=3
# debug-loggning
log.level=5

rule[0].type=ListSubstituter
rule[0].name=Efternamn
rule[0].file=files/enamn.txt
rule[0].from=[a-zA-Z]{2,}
rule[0].surrounding=\\d','[a-zA-Z]{2,}'
rule[0].to=${value}
rule[0].unique=false
rule[0].random=true

rule[1].type=ListSubstituter
rule[1].name=F\u00f6rnamn
rule[1].file=files/fnamn.txt
rule[1].from=[a-zA-Z]{2,}
rule[1].surrounding='[a-zA-Z]{2,}','(F|M)'
rule[1].to=${value}
rule[1].unique=false
rule[1].random=true

rule[2].type=DateSubstituter
rule[2].name=Datum
rule[2].format=yyyy-MM-dd
rule[2].from=\\d{4}\\-\\d{2}\\-\\d{2}
rule[2].surrounding='\\d{4}\\-\\d{2}\\-\\d{2}'
# Byt till datum inom området -100 dagar, till
rule[2].random.low=-100
# + 200 dagar
rule[2].random.high=200

Notera att files/fnamn.txt och files/enamn.txt måste finnas och innehålla förnamn respektive efternamn. Ett namn per rad.

Spara översättningsfilen med namn employees.properties.

Kör översättningen genom följande kommando.

$ java -jar hidesense-core.jar -c employees.properties -n db load_employees.dump

Undersök den filtrerade dump-filen så att den inte innehåller några namn.

Den översatta filen sparas nu under logs/oppen/load_employees.filtered.dump.

Spara original-filen load_employees.dump

cd till katalogen där dump-filerna finns.

mv load_employees.dump load_employees.dump.original
cp ……../logs/oppen/load_employees.filtered.dump load_employees.dump

Läs in den tvättade databasen

 

Följ anvisningarna för att packa upp databasen igen.

Databasen ska nu inte innehålla några namn.

mysql> select * from employees limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date |
+--------+------------+------------+-----------+--------+------------+
| 10001 | 1953-08-30 | Bergström   | Per       | M     | 1986-04-20 |
| 10002 | 1964-03-04 | Falk        | Irene     | F     | 1985-10-04 |
| 10003 | 1959-09-11 | Berglund    | Therese   | M     | 1986-08-09 |
| 10004 | 1954-06-30 | Sandberg    | Inga      | M     | 1987-06-18 |
| 10005 | 1954-11-29 | Hermansson  | Elisabeth | M     | 1989-11-28 |
| 10006 | 1953-06-25 | Lundberg    | Lisbeth   | F     | 1989-04-26 |
| 10007 | 1957-10-17 | Holmqvist   | Ulrika    | F     | 1989-06-25 |
| 10008 | 1958-08-09 | Wikström    | Martin    | M     | 1995-02-19 |
| 10009 | 1952-08-11 | Wallin      | Christian | F     | 1985-03-16 |
| 10010 | 1963-12-09 | Lindholm    | Ingvar    | F     | 1990-01-02 |
+--------+------------+------------+-----------+--------+------------+
10 rows in set (0.00 sec)

Notera att födelsedatum och anställningsdatum är något förändrade (inom ett knappt år) samt att för- och efternamn är helt nya.

Vi har inte tagit hänsyn till kön och namn i det här exemplet men det går naturligtvis att göra med andra regler.