Zanim błąd i szef zapukają do drzwi

    2 komentarze

    Czy zdażyło się wam odtwarzać po raz kolejny bazę danych po logicznym uszkodzeniu plików?

    Wlaściwie kiedy ostatnio sprawdzano ją dostępnymi narzędziami?
    Kiedy ostanio dokonano pełnej, różnicowej kopii bezpieczeństwa, jak często odkładane są logi transakcyjne?
    Czy baza ma poprawny model recovery ?
    Jeśli na chociaż jedno pytanie pojawiły się w głowie wątpliwości, to dobrze, że przed awarią…

     

    Pomocny skrypt

    Hipotetyczny rezultat powyższego zapytania

    database_name total_size_gb recovery_model_desc LastDBCCCHeckDB_RunDate
    XYZ 153.8079 SIMPLE 1900-01-01 00:00:00.000
    tempdb 58.6021 SIMPLE 1900-01-01 00:00:00.000
    HURT 49.2092 SIMPLE 1900-01-01 00:00:00.000
    ABC 46.6123 SIMPLE 1900-01-01 00:00:00.000
    ZZA 0.4893 FULL 1900-01-01 00:00:00.000
    model 0.1470 SIMPLE 1900-01-01 00:00:00.000
    master 0.0148 SIMPLE 1900-01-01 00:00:00.000
    msdb 5.8594 SIMPLE 2015-10-06 13:34:30.730

    Na co zwrócić uwagę ?

    Bazy systemowe (master, model,msdb,tempdb) mają ustawiony recovery model równy SIMPLE. Żadna z nich, poza msdb nie była nigdy sprawdzona narzędziem DBCC CheckDB ? To dobrze ?

    Jedyna baza w trybie FULL teź nigdy nie została sprawdzona.

    Do odważnych świat należy,ale nie do nieroztropnych.

    https://www.mssqltips.com/sqlservertip/4381/sql-server-dbcc-checkdb-overview/

    Categories: implementacja, migawka, t-sql

    Szyfrowanie danych dla RODO – droga na skróty

    No Comments

    SQL Server ma wbudowane dwie funkcje, które pozwalają na szyfrowanie i odszyfrowanie danych w sposób odwracalny.
    Czy to nie wystarczy do zapewnienia bezpieczeństwa i realizacji wymogów RODO ?

    Przykładowy kod:

    Wynik działania

    clearText :  Tajna wiadomosc do zaszyfrowania

    encrypted  : 0x010000007662E7BC0D6744BEE84DDD103891A2B21EEDE7DD99FEDD8E11D18F81FEA37028B5ED9060EC65FC9A19CD8ABDED32CA5D974D214D4D12109C495B2F2045F2B7F1A06A3D327EA6765C25EC8C8802E94A064ABCB41B91433E99

    decrypted : Tajna wiadomosc do zaszyfrowania

     

    Niestety w takim przypadku mamy do czynienia z pseudonimizacją. Dla tych, dla których to pojęcie jest nowe, proponuję na początek krótkie wprowadzenie

    http://blog.e-odo.pl/category/reforma-ochrony-danych-osobowych/anonimizacja-i-pseudonimizacja/

    Categories: implementacja, RODO, t-sql

    Generowanie losowych odpowiedników dla danych wrażliwych dla RODO . Część 2

    No Comments

    1. Dedykowany widok wykorzystujący funkcje pseudolosowe.

    Do czego jest potrzebny ten widok? To jest obejście znanego problemu braku możliwości wykorzystania funkcji pseudolosowych w funkcjach skalarnych/tabelarycznych.
    Przykładowo:

    2. Dedykowane funkcje tabelaryczne

    Z założenia jedynym wykorzystywanym obiektem jest powyższy widok, pozostała implementacja nie wymaga dodatkowych struktur,tabel,dedykowanych funkcji i innych obiektów.
    Każda z funkcji jest budowana schematycznie przy wykorzystaniu CTE, podobnie jest zapytania w pierwszej części artykułu. Dane generowane przez alias CTE zwracają wartość w postaci surowej i jeśli trzeba ją uzupełnić o poprawną sumę kontrolną odpowiednie podmiany postaci surowej na poprawną są w instrukcji select aliasu.
    Funkcje przyjmują dwa parametry wejściowe @value i @algorithm. Ta ostatnia jest do poźniejszego wykorzystania w ramach rozwoju grupy algorytmów dla takiej samej domeny. Aktualne wersje funkcji nie korzystają z wartości wejściowej, ale można będzie to zmodyfikować na następnych iteracjach w ramach rozwoju, tak by wykorzystywany kod np. w procedurach składowanych nie ulegał zmianie ze względu liczbę argumentów funkcji.

    Generowanie numerów PESEL

    Generowanie EMAIL

    Generowanie dowodu osobistego

    Generowanie rachunku bankowego

    Generowanie imion

    Generowanie kodu pocztowego

    3. Generowanie danych testowych (TODO)

    4. Wykorzystanie funkcji tabelarycznych do zmiany wygenerowanych danych testowych (TODO)

    Categories: implementacja, RODO, t-sql

    Generowanie losowych odpowiedników dla danych wrażliwych dla RODO . Część 1

    1 Comment

    Wyobraźmy sobie sytuację, że mamy w bazie danych mnóstwo wrażliwych informacji, numery PESEL, adresy e-mail, numery telefonów, numery dokumentów tożsamości, konta bankowe.

    Te dane należy tak anonimizować, by  uzyskany rezultat nie dawał  możliwości  odtworzenia oryginalnej wartości i jednocześnie spełniał, jeżeli trzeba reguły poprawności danego wzorca. Dotyczy to m.in. długości, formatu i sumy kontrolnej.

     

    Zacznijmy na przykładzie numeru dowodu osobistego w formacie ABC123456.  Czy jest on poprawny ?

    Dla tych, którzy przyzwyczaili się do sumy kontrolnej na ostatnim miejscu wzorca dziwne może być to, że suma kontrolna to pierwsza z cyfr (czwarty element).

    Powyższe zapytanie zwróci jako poprawny numer dowodu wartość ABC523456, czyli 5 jest poprawną cyfrą kontrolną, a nie 1.

    1. Na początku wygenerujmy  1 mln sztucznych dowodów osobistych.

    W posobny sposób można uzyskać inne typy danych wrażliwych

    Przykładowy generator numerów PESEL

    Generator polskich numerów NRB.

    Budowa mechanizmu generowania danych jest szablonowa. Wykorzystywany jest CTE (Common Table Expression) w taki sposób, że
    a) za pomocą kilku obiektów (aliasy PoziomX) można kontrolować liczbę zwracanych rekordów, ograniczenie dla pięciu poziomów jest liczbą rzędu 2 do potęgi 32 (ok 4 mld),
    b) budowany jest napis o formacie zgodnych z danym typem numeru (długość, format) ale bez poprawnej sumy kontrolnej, nazywamy postacią surową
    c)postać surowa jest dynamicznie podmieniana w taki sposób, że podmianiana jest część w tym miejsciu, gdzie występuje suma kontrolna, czasem jest to poczatek, środek lub koniec napisu.

    2. Załóżmy, że te wygenerowane dokumenty/numery/konta są prawdziwe. Jak je zaktualizować, tak by wyglądały na poprawne i spełniały reguły? Ważne jest też to, by generować nowe wartości optymalnie i w miarę możliwości prostym kodem t-sql.
    Zacznijmy od budowy pomocniczej perpektywy

    Widok zwraca jeden rekord, za każdym razie z innymi wartościami.

    CryptUID Crypt1 Crypt2 Crypt3 Crypt4 CryptYear CryptMonth CryptDay
    F463175E-DD3C-479E-834F-BB850552FF56 189347 549814 23651 661922 10 5 11

    Do czego ma służyć ten widok ? Funkcja systemowa RAND() nie może zostać użyta wewnątrz funkcji skalarnej, takie mamy ograniczenie silnika. A takie właśnie funkcje będą podstawą procesu podmiany danych.O tym napiszę w drugiej części.

    Categories: implementacja, RODO, t-sql