Per ogni record di dati (o set di record, se gli stessi utenti possono sempre accedere a tutti i record di un set), creare una chiave di crittografia casuale. Quindi crittografare una copia di questa chiave con la chiave di ciascun utente a cui è consentito accedere ai dati.
(Le chiavi utente possono essere derivate direttamente dalla password dell'utente utilizzando una funzione di derivazione chiave idonea come PBKDF2 , oppure puoi generare una chiave per utente casuale da ciascun utente e crittografarla con la chiave derivata dalla password. Quest'ultima opzione è un po 'più complicata, ma ha il vantaggio che hai solo bisogno di ricodificare una chiave quando un utente cambia la propria password.)
Per ulteriori informazioni, vedi ad es. questa domanda correlata su crypto.SE .
Modifica: ho appena notato la menzione di LDAP nella tua domanda. Non ho molta familiarità con LDAP, ma per quanto ne so, se la tua applicazione agisce come un client LDAP, in modo che l'utente inserisca la sua password per l'applicazione, che quindi interroga il server LDAP per convalidarlo, quindi puoi principalmente eseguirlo come descritto sopra.
L'unica cosa con cui avrai problemi è la modifica della password, a meno che tu non possa in qualche modo ottenere che il server LDAP ti informi su di loro e di includere la vecchia e la nuova password nella notifica. Un'opzione sarebbe avere la tua app anche controllare la password inserita contro il proprio database, ad es. memorizzando un hash della chiave di crittografia dell'utente (derivata dalla password con PBKDF2) nel database. Se la password supera la convalida LDAP ma fallisce questo controllo, significa che l'utente ha cambiato la sua password, nel qual caso devi chiedere loro di inserire anche la loro vecchia password in modo da poter ricodificare nuovamente la password i dati.
Tuttavia, la soluzione ideale sarebbe quella di memorizzare i dati crittografati (o almeno le chiavi per utente) sul server LDAP, se il server può essere configurato per farlo in modo sicuro. Basato su Google, almeno alcuni di essi possono essere