Domanda

Il sistema su cui sto attualmente lavorando richiede una certa sicurezza basata sui ruoli, che è ben gestita nello stack Java EE.Il sistema intende essere un framework su cui gli esperti del settore aziendale possano scrivere il proprio codice.

Tuttavia, esiste anche un obbligo di dati security.Cioè, quali informazioni sono visibili a un utente finale.

Ciò significa effettivamente ridurre la visibilità delle righe (e forse anche delle colonne) nel database.

Stiamo usando Hibernate per la nostra persistenza.Tuttavia, utilizziamo le nostre annotazioni per non esporre la nostra scelta di persistenza agli esperti del settore aziendale.

Per la sicurezza basata su righe ciò significa che potremmo aggiungere un'annotazione come @Secured a livello di entità, cosa comporterebbe l'aggiunta di una colonna aggiuntiva alla tabella sottostante per limitare le nostre selezioni?

Per la sicurezza basata su colonne, forse avremmo potuto @Secured per assistere nella generazione di query o magari utilizzare un aspetto per filtrare le informazioni restituite?

Sono curioso di sapere in che modo ciò potrebbe influire anche sui meccanismi di memorizzazione nella cache dell'ibernazione?

Sono sicuro che molti altri avranno avuto lo stesso problema e mi chiedevo come hai affrontato questo problema?

Molto apprezzato...

È stato utile?

Soluzione

L'ibernazione ha un meccanismo di filtro potrebbe funzionare per te.I filtri riscriveranno le query generate dall'ibernazione per includere una clausola aggiuntiva per limitare le righe restituite.Non sono a conoscenza di nulla in ibernazione per mascherare/nascondere le colonne.

Anche il tuo database potrebbe supportare questa funzionalità.Oracle, ad esempio, ha il Database privato virtuale (VPD) che riscriverà le tue query a livello di database.Questa soluzione ha il vantaggio aggiuntivo che qualsiasi programma esterno (ad es.strumenti di reporting) che vanno contro il tuo database verranno applicate le restrizioni di sicurezza.VPD supporta anche la mascheratura delle colonne riservate con NULL.

Sfortunatamente, le soluzioni di cui sopra non sono state adeguate a supportare i requisiti di sicurezza per i tipi di progetti su cui lavoro solitamente.Di solito c'è una sorta di contesto che non può essere facilmente espresso nelle soluzioni di cui sopra.Ad esempio, gli utenti possono visualizzare i dati che hanno creato, o che sono stati contrassegnati come pubblici, o che appartengono a un progetto che gestiscono.

In genere creiamo oggetti query/finder/DAO in cui passiamo i valori richiesti per applicare la sicurezza e quindi creiamo la query di conseguenza.

Spero che aiuti

Altri suggerimenti

Quando si utilizzano i filtri di ibernazione è necessario tenere presente che le restrizioni aggiuntive non verranno applicate alle istruzioni SQL generate dal file load() O get() metodi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top