Ho pensato a come progettare un'infrastruttura per una delle nostre applicazioni aziendali con il seguente requisito:
- I dati scritti da alcuni utenti possono essere letti solo da quell'utente e dal suo superiore e da una terza persona ancora da definire
Sto pensando di utilizzare una sorta di algoritmo asimmetrico, come RSA per la crittografia dei dati.
Possiamo generare una coppia di chiavi pubblica-privata per ciascun utente e archiviare la chiave pubblica di ciascuno in modo aperto su un database, ma come dovremmo gestire la chiave privata?
Se lasciamo che gli utenti gestiscano la loro chiave privata un giorno avremo un grosso mal di testa se uno di loro perde la chiave.
Se la chiave privata diventa pubblica in qualche modo, anche i dati diventerebbero pubblici, rendendo l'architettura non valida.
La nostra infrastruttura è strongmente orientata alla tecnologia Microsoft: tutte le applicazioni sono ASP.Net MVC3, la nostra dabatase è SQL Server 2005 e utilizziamo Active Directory per l'autenticazione dell'utente e i dati di base, come il numero di e-mail / telefono.
Come vorresti che architetti una soluzione per risolvere questo problema?
Bottom-line: questa non è un'applicazione bancaria o finanziaria, è una sorta di sistema di feedback personale a 360 gradi.
EDIT: Aggiunta di ulteriori requisiti, sperando di renderlo più chiaro:
- Questo database sarà nell'ambiente di produzione, in cui gli sviluppatori non hanno accesso;
- Una volta ripristinato il database, gli sviluppatori non dovrebbero essere in grado di recuperare i dati;
- Il DBA non dovrebbe essere in grado di visualizzare i dati SELEZIONANDO le righe sulle tabelle;
EDIT 2: informazioni di Bounty. Bounty è andato alla risposta con più upvotes, anche se la mia opinione personale è che nessuna delle risposte fornite ha risolto correttamente la domanda. Per questo motivo, concedo la taglia ma non contrassegno la risposta come corretta.