diff --git a/FAC/FAC_PACANO.SRC b/FAC/FAC_PACANO.SRC index dc719424..b14415fc 100644 --- a/FAC/FAC_PACANO.SRC +++ b/FAC/FAC_PACANO.SRC @@ -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; /