FCLT#64662 Anonimiseren routine in code opnemen
svn path=/Database/trunk/; revision=49163
This commit is contained in:
@@ -11,7 +11,14 @@ CREATE OR REPLACE PACKAGE ano AS
|
||||
PROCEDURE anonymizebez (p_startdatum IN DATE, p_einddatum IN DATE);
|
||||
PROCEDURE anonymizemld (p_startdatum IN DATE, p_einddatum IN DATE);
|
||||
PROCEDURE anonymizeprs (p_startdatum IN DATE, p_einddatum IN DATE);
|
||||
PROCEDURE anonymizefull(p_flags NUMBER DEFAULT 65535);
|
||||
PROCEDURE anonymize (p_startdatum IN DATE, p_einddatum IN DATE);
|
||||
FUNCTION postcode(postcode_veld IN VARCHAR2) RETURN VARCHAR2;
|
||||
FUNCTION telefoon(telefoon_veld IN VARCHAR2) RETURN VARCHAR2;
|
||||
FUNCTION adres(adres_veld IN VARCHAR2) RETURN VARCHAR2;
|
||||
FUNCTION naam(naam_veld IN VARCHAR2) RETURN VARCHAR2;
|
||||
FUNCTION email(email_veld IN VARCHAR2) RETURN VARCHAR2;
|
||||
FUNCTION memo(memo_veld IN VARCHAR2) RETURN VARCHAR2;
|
||||
END ano;
|
||||
/
|
||||
|
||||
@@ -386,6 +393,117 @@ CREATE OR REPLACE PACKAGE BODY ano AS
|
||||
END LOOP;
|
||||
END;
|
||||
|
||||
PROCEDURE anonymizefull(p_flags NUMBER DEFAULT 65535)
|
||||
AS
|
||||
BEGIN
|
||||
-- Destructive obstrufication of personal data.
|
||||
UPDATE prs_perslid
|
||||
SET prs_perslid_naam = INITCAP (DBMS_RANDOM.string ('l', LENGTH (prs_perslid_naam)))
|
||||
WHERE prs_perslid_naam NOT LIKE 'INACTIEF:%'
|
||||
AND prs_perslid_naam NOT LIKE 'Facilitor'
|
||||
AND (prs_perslid_oslogin IS NULL OR SUBSTR(prs_perslid_oslogin, 1, 1) <> '_');
|
||||
|
||||
UPDATE prs_perslid
|
||||
SET prs_perslid_voornaam = INITCAP (DBMS_RANDOM.string ('l', LENGTH (prs_perslid_voornaam)))
|
||||
WHERE prs_perslid_voornaam IS NOT NULL
|
||||
AND (prs_perslid_oslogin IS NULL OR SUBSTR(prs_perslid_oslogin, 1, 1) <> '_');
|
||||
|
||||
UPDATE prs_perslid
|
||||
SET prs_perslid_voorletters = UPPER (DBMS_RANDOM.string ('l', LENGTH (prs_perslid_voorletters)))
|
||||
WHERE prs_perslid_voorletters IS NOT NULL;
|
||||
|
||||
UPDATE prs_perslid
|
||||
SET prs_perslid_naam = 'INACTIEF:' || INITCAP (DBMS_RANDOM.string ('l', LENGTH (prs_perslid_naam) - 9))
|
||||
WHERE prs_perslid_naam LIKE 'INACTIEF:%';
|
||||
|
||||
UPDATE prs_perslid
|
||||
SET prs_perslid_email='E' || TO_CHAR(prs_perslid_key) || '@facilitor.nl'
|
||||
WHERE prs_perslid_email IS NOT NULL;
|
||||
|
||||
UPDATE prs_perslid
|
||||
SET prs_perslid_oslogin2='O' || TO_CHAR(prs_perslid_key)
|
||||
WHERE prs_perslid_oslogin2 IS NOT NULL;
|
||||
|
||||
UPDATE prs_perslid
|
||||
SET prs_perslid_wachtwoord_hash = null;
|
||||
|
||||
UPDATE prs_perslid
|
||||
SET prs_perslid_apikey = 'TEST_' || dbms_utility.get_hash_value(prs_perslid_apikey , 0, power(2,24))
|
||||
WHERE prs_perslid_apikey IS NOT NULL;
|
||||
|
||||
DELETE FROM fac_imp_perslid;
|
||||
|
||||
UPDATE prs_contactpersoon
|
||||
SET prs_contactpersoon_naam = INITCAP (DBMS_RANDOM.string ('l', LENGTH(prs_contactpersoon_naam)));
|
||||
|
||||
UPDATE prs_contactpersoon
|
||||
SET prs_contactpersoon_voornaam = INITCAP (DBMS_RANDOM.string ('l', LENGTH(prs_contactpersoon_voornaam)))
|
||||
WHERE prs_contactpersoon_voornaam IS NOT NULL;
|
||||
|
||||
UPDATE prs_contactpersoon
|
||||
SET prs_contactpersoon_voorletters = SUBSTR(prs_contactpersoon_voornaam,1,1) || SUBSTR(prs_contactpersoon_voorletters,2)
|
||||
WHERE prs_contactpersoon_voorletters IS NOT NULL;
|
||||
|
||||
UPDATE prs_contactpersoon
|
||||
SET prs_contactpersoon_email='anonymous@facilitor.nl'
|
||||
WHERE prs_contactpersoon_email IS NOT NULL;
|
||||
|
||||
EXECUTE IMMEDIATE 'ALTER TRIGGER bez_t_bez_afspraak_B_IU DISABLE';
|
||||
|
||||
UPDATE bez_afspraak
|
||||
SET bez_afspraak_gastheer = (SELECT SUBSTR(prs_perslid_naam_full,1,50)
|
||||
FROM prs_v_perslid_fullnames_all
|
||||
WHERE prs_perslid_key = bez_afspraak_host_key
|
||||
)
|
||||
WHERE bez_afspraak_host_key IS NOT NULL;
|
||||
|
||||
UPDATE bez_afspraak
|
||||
SET bez_afspraak_gastheer = INITCAP (DBMS_RANDOM.string ('l', LENGTH (bez_afspraak_gastheer)))
|
||||
WHERE bez_afspraak_host_key IS NULL;
|
||||
|
||||
EXECUTE IMMEDIATE 'ALTER TRIGGER bez_t_bez_afspraak_B_IU ENABLE';
|
||||
|
||||
UPDATE bez_bezoekers
|
||||
SET bez_afspraak_naam = UPPER(SUBSTR(bez_afspraak_naam,1,1)) || '. Bezoeker'
|
||||
WHERE bez_afspraak_naam IS NOT NULL
|
||||
AND bez_afspraak_naam <> 'Anoniem';
|
||||
|
||||
UPDATE bez_bezoekers
|
||||
SET bez_afspraak_bedrijf = UPPER(SUBSTR(bez_afspraak_bedrijf,1,1)) || 'areon B.V.'
|
||||
WHERE bez_afspraak_bedrijf IS NOT NULL
|
||||
AND bez_afspraak_bedrijf <> 'Anoniem';
|
||||
|
||||
UPDATE prs_bedrijf
|
||||
SET prs_bedrijf_naam = ano.naam(prs_bedrijf_naam)
|
||||
, prs_bedrijf_post_adres = ano.adres(prs_bedrijf_post_adres)
|
||||
, prs_bedrijf_post_postcode = ano.postcode(prs_bedrijf_post_postcode)
|
||||
, prs_bedrijf_bezoek_adres = ano.adres(prs_bedrijf_bezoek_adres)
|
||||
, prs_bedrijf_bezoek_postcode = ano.postcode(prs_bedrijf_bezoek_postcode)
|
||||
, prs_bedrijf_telefoon = ano.telefoon(prs_bedrijf_telefoon)
|
||||
, prs_bedrijf_telefoon2 = ano.telefoon(prs_bedrijf_telefoon2)
|
||||
, prs_bedrijf_fax = ano.telefoon(prs_bedrijf_fax)
|
||||
, prs_bedrijf_email = ano.email(prs_bedrijf_email)
|
||||
, prs_bedrijf_contact_persoon = ano.naam(prs_bedrijf_contact_persoon)
|
||||
, prs_bedrijf_contact_telefoon = ano.telefoon(prs_bedrijf_contact_telefoon)
|
||||
, prs_bedrijf_contact_fax = ano.telefoon(prs_bedrijf_contact_fax);
|
||||
|
||||
UPDATE prs_bedrijfadres
|
||||
SET prs_bedrijfadres_url = ano.email(prs_bedrijfadres_url)
|
||||
, prs_bedrijfadres_username = ano.naam(prs_bedrijfadres_username)
|
||||
, prs_bedrijfadres_password = NULL;
|
||||
|
||||
UPDATE aut_idp
|
||||
SET aut_idp_secret = 'TEST_' || DBMS_RANDOM.string('a', 10)
|
||||
WHERE aut_idp_secret IS NOT NULL
|
||||
AND aut_idp_internal = 0;
|
||||
|
||||
UPDATE aut_sp
|
||||
SET aut_sp_secret = 'TEST_' || DBMS_RANDOM.string('a', 10)
|
||||
WHERE aut_sp_secret IS NOT NULL
|
||||
AND aut_sp_internal = 0;
|
||||
|
||||
END;
|
||||
|
||||
PROCEDURE anonymize (p_startdatum IN DATE,
|
||||
p_einddatum IN DATE)
|
||||
AS
|
||||
@@ -396,6 +514,174 @@ CREATE OR REPLACE PACKAGE BODY ano AS
|
||||
anonymizeprs(p_startdatum, p_einddatum);
|
||||
END;
|
||||
|
||||
FUNCTION postcode(postcode_veld IN VARCHAR2) RETURN VARCHAR2
|
||||
IS
|
||||
c VARCHAR2(1);
|
||||
code VARCHAR2(15) := '';
|
||||
BEGIN
|
||||
IF (postcode_veld IS NOT NULL)
|
||||
THEN
|
||||
FOR i IN 1..LENGTH(SUBSTR(postcode_veld,1,15))
|
||||
LOOP
|
||||
c := SUBSTR(postcode_veld,i,1);
|
||||
BEGIN
|
||||
c := TO_CHAR(TO_NUMBER(c));
|
||||
c := TO_CHAR(TRUNC(DBMS_RANDOM.value(0,10)));
|
||||
EXCEPTION
|
||||
WHEN VALUE_ERROR THEN
|
||||
IF (c NOT IN (' ','-'))
|
||||
THEN
|
||||
c := DBMS_RANDOM.string('u',1);
|
||||
END IF;
|
||||
END;
|
||||
code := code||c;
|
||||
END LOOP;
|
||||
END IF;
|
||||
RETURN code;
|
||||
END postcode;
|
||||
|
||||
FUNCTION telefoon(telefoon_veld IN VARCHAR2) RETURN VARCHAR2
|
||||
IS
|
||||
n NUMBER;
|
||||
r NUMBER;
|
||||
i NUMBER;
|
||||
f VARCHAR2(5) := '+-_ *'; -- alleen deze laten we staan
|
||||
tel VARCHAR2(30) := '';
|
||||
c VARCHAR2(1);
|
||||
BEGIN
|
||||
IF (telefoon_veld IS NOT NULL)
|
||||
THEN
|
||||
n := DBMS_RANDOM.value(0,1);
|
||||
tel := TO_CHAR(TRUNC(n * POWER(10,LENGTH(telefoon_veld))));
|
||||
FOR r IN 0..3
|
||||
LOOP
|
||||
c := SUBSTR(f,r,1);
|
||||
i := 1;
|
||||
WHILE (INSTR(telefoon_veld, c, 1, i) > 0)
|
||||
LOOP
|
||||
tel := REGEXP_REPLACE(tel
|
||||
,'(^.{'||(INSTR(telefoon_veld,c,1,i)-1)||'})(.{1})(.*)$'
|
||||
,'\1'||c||'\3'
|
||||
);
|
||||
i := i + 1;
|
||||
END LOOP;
|
||||
END LOOP;
|
||||
END IF;
|
||||
RETURN tel;
|
||||
END telefoon;
|
||||
|
||||
FUNCTION adres(adres_veld IN VARCHAR2) RETURN VARCHAR2
|
||||
IS
|
||||
c VARCHAR2(1);
|
||||
adres VARCHAR2(100) := '';
|
||||
BEGIN
|
||||
IF (adres_veld IS NOT NULL)
|
||||
THEN
|
||||
FOR i IN 1..LENGTH(adres_veld)
|
||||
LOOP
|
||||
c := SUBSTR(adres_veld,i,1);
|
||||
BEGIN
|
||||
c := TO_CHAR(TO_NUMBER(c));
|
||||
EXCEPTION
|
||||
WHEN VALUE_ERROR THEN
|
||||
IF (c <> ' ')
|
||||
THEN
|
||||
c := DBMS_RANDOM.string('l',1);
|
||||
END IF;
|
||||
END;
|
||||
adres := adres||c;
|
||||
END LOOP;
|
||||
END IF;
|
||||
RETURN INITCAP(adres);
|
||||
END adres;
|
||||
|
||||
FUNCTION email(email_veld IN VARCHAR2) RETURN VARCHAR2
|
||||
IS
|
||||
s NUMBER;
|
||||
c VARCHAR2(1);
|
||||
p VARCHAR2(9) := '';
|
||||
z VARCHAR2(3) := '';
|
||||
email VARCHAR2(500) := '';
|
||||
BEGIN
|
||||
IF (email_veld IS NOT NULL)
|
||||
THEN
|
||||
s := 1+INSTR(email_veld,':',1);
|
||||
IF (s > 1)
|
||||
THEN
|
||||
p := SUBSTR(email_veld,1,s-1);
|
||||
IF (SUBSTR(email_veld,s,2) = '//')
|
||||
THEN
|
||||
s := s+2;
|
||||
p := p||'//';
|
||||
END IF;
|
||||
END IF;
|
||||
IF (SUBSTR(email_veld,LENGTH(email_veld)-2,1) = '.')
|
||||
THEN
|
||||
z := SUBSTR(email_veld, -3);
|
||||
END IF;
|
||||
FOR i IN s..(LENGTH(email_veld)-NVL(LENGTH(z),0))
|
||||
LOOP
|
||||
c := SUBSTR(email_veld,i,1);
|
||||
IF (c NOT IN ('.','@'))
|
||||
THEN
|
||||
c := DBMS_RANDOM.string('l',1);
|
||||
END IF;
|
||||
email := email||c;
|
||||
END LOOP;
|
||||
email := p||email||z;
|
||||
END IF;
|
||||
RETURN email;
|
||||
END email;
|
||||
|
||||
FUNCTION naam(naam_veld IN VARCHAR2) RETURN VARCHAR2
|
||||
IS
|
||||
a NUMBER;
|
||||
i VARCHAR2(1);
|
||||
v VARCHAR2(55) := '';
|
||||
naam VARCHAR2(200) := '';
|
||||
BEGIN
|
||||
IF (naam_veld IS NOT NULL)
|
||||
THEN
|
||||
a := LENGTH(naam_veld)-1;
|
||||
IF (SUBSTR(naam_veld,LENGTH(naam_veld),1) = ')' AND INSTR(naam_veld,'(',-1) > 0)
|
||||
THEN
|
||||
v := DBMS_RANDOM.string('l',LENGTH(naam_veld) - INSTR(naam_veld,'(',-1) -1);
|
||||
v := ' ('||SUBSTR(v,1,50)||')';
|
||||
a := LENGTH(naam_veld) - LENGTH(v) -1;
|
||||
END IF;
|
||||
i := SUBSTR(naam_veld,1,1);
|
||||
naam := UPPER(i)||DBMS_RANDOM.string('l', a)||v;
|
||||
END IF;
|
||||
RETURN naam;
|
||||
END naam;
|
||||
|
||||
FUNCTION memo(memo_veld IN VARCHAR2) RETURN VARCHAR2
|
||||
IS
|
||||
memo VARCHAR2(4000) := '';
|
||||
c VARCHAR2(1) := '';
|
||||
r VARCHAR2(1);
|
||||
BEGIN
|
||||
IF (memo_veld IS NOT NULL)
|
||||
THEN
|
||||
FOR i IN 1..LENGTH(memo_veld)
|
||||
LOOP
|
||||
r := SUBSTR(memo_veld,i,1);
|
||||
IF (r NOT IN (' ','.') )
|
||||
THEN
|
||||
c := DBMS_RANDOM.string('l',1);
|
||||
IF (r = UPPER(r))
|
||||
THEN
|
||||
c := UPPER(c);
|
||||
END IF;
|
||||
ELSE
|
||||
c := r;
|
||||
END IF;
|
||||
memo := memo||c;
|
||||
END LOOP;
|
||||
END IF;
|
||||
RETURN memo;
|
||||
END memo;
|
||||
|
||||
END ano;
|
||||
/
|
||||
|
||||
|
||||
Reference in New Issue
Block a user