Sa spunem ca am un fisier excel cu 10.000 linii si 10 coloane, pe care vreau sa-l import in baza de date (SQL Server)
Initial, pentru fiecare coloana ii iau top1000 linii si ii aflu tipul (int, decimal, string, date, bool - cam la astea m-am rezumat), dupa care creez tabelul dinamic cu tipurile respective, si din nou, citesc fiecare linie a fisierului pentru a o adauga intr-o lista de obiecte (cu parametrii convertiti la tipurile de mai sus). Pentru inserare, lista asta o adaug intr-un DataTable, apoi folosesc SqlBulkCopy.
Mi se pare ca sunt deja destule operatiuni care, momentan nu dureaza foarte mult, maxim 2 secunde, dar vreau ca toate aceste date sa fie criptate. Deci, inca o actiune in plus (si inca una la citirea datelor din tabela / decriptare). Separat, am un alt tabel, in care salvez id-ul coloanei si tipul ei (aflat din cele 1000 randuri).
Exemplu:
Excel:
Id | Nume | Data
1 | Gigi | 20.07.1995
2 | Raluca | 14.05.2001
- citire coloane: Id, Nume, Data (de pe primul rand al Excelului)
- aflare tip coloana: calcul pentru top1000 id-uri, top1000 nume, top1000 data
- citire fisier si adaugare date intr-o lista de obiecte cu “n” parametri : rows = List
- compunere query si creare tabelul dinamic, coloanele avand tipurile de la pasul 2.
- trecere rows in DataTable, unde fiecare valoare o convertesc la tipul ei. Deci, ar fi 100000 convertiri doar la pasul asta)
- bulk insert in tabela.
Eh, la pasul 5 ar trebui sa se produca o schimbare. In locul convertirii la tipul respectiv, valoarea sa fie criptata (folosind o cheie locala, de pe server, sau setata de client, care la randul ei trebuie criptata) si sa fie salvata cu tipul nvarchar/byte[] … sau byte, aici sunt mai mult ca sigur ca gresesc, scriu doar din imaginatie :))) nu m-am documentat destul inca, ma gandesc totusi ca ar fi ceva asemanator cu criptarea parolei folosite pentru Identity User.
Ca exemplu … pentru criptarea tokenului, folosesc o cheie salvata in setarile serverului. Pentru parole am vazut ca se salveaza hash si salt in tabela, dar daca baza de date este sparta, prin combinarea celor doua nu se poate afla parola?
Apoi, la citirea din tabela, ar trebui ca fiecare valoare sa fie decriptata + convertita la tipul ei (stocat in alta tabela).
Problema mea cea mare este ca nu stiu unde si sub ce forma sa stochez cheia. Pe langa asta,e loc mult de optimizat pentru operatiile de mai sus, dar astea fac parte dintr-un alt subiect
~ asta cred ca e una din regulile GDPR care trebuie aplicata pentru datele cu caracter personal?!?
merci