Stiamo costruendo un'app web cloud supportata da un db multi-tenant. Per massimizzare la sicurezza, abbiamo in programma di crittografare i dati di ciascun cliente con una chiave separata. Il problema è l'interrogazione. Diciamo che sono nello scrittore di report e vogliono ordinare la loro 1.000.000 di clienti da LastName. Ciò funzionerebbe in modo orribile perché tutte le righe 1M dovrebbero essere non crittografate e quindi ordinate su ogni query!
Ecco le uniche opzioni che potrei trovare. Cosa faresti? Ci sono altre opzioni?
-
Codifica solo le colonne NPI nel db e non consentire mai loro di ordinare o filtrare in base ai valori NPI.
PRO : protegge i dati sensibili fornendo al tempo stesso prestazioni eccezionali per le query su colonne non NPI
CON : non un ottimo UX per i nostri utenti
-
Come il # 1 ma mantiene una cache non crittografata di colonne NPI nella RAM
PRO : migliore UX
CON : ora DataInUse non è crittografato (è meglio di DataAtRest non crittografato ??). Inoltre, i filtri con colonne NPI e non NPI sarebbero molto brutti da codificare. Ad esempio, se il filtro era SELEZIONA TUTTI I CLIENTI DOVE NOME LASTNAME "S%" E BIZTYPE="MEDICO", l'ID del record del cognome dovrebbe prima venire dalla cache e poi inviato al database per limitare ulteriormente i record di biztype.
-
Rinuncia e conserva tutti i dati non crittografati nel database e applica la crittografia db (SQLServer TDE) o la crittografia del disco.
PRO : ottimo UX e prestazioni
CON : le prestazioni ne risentirebbero. Inoltre, se la chiave fosse compromessa, tutti i dati dei nostri clienti sarebbero esposti e saremmo sulla copertina del Wall Street Journal.