Question

Le système sur lequel je travaille actuellement nécessite une certaine sécurité basée sur les rôles, qui est bien prise en charge dans la pile Java EE.Le système se veut un cadre sur lequel les experts du domaine métier peuvent écrire leur code.

Cependant, il existe également une exigence de données security.Autrement dit, quelles informations sont visibles par un utilisateur final.

Cela signifie effectivement réduire la visibilité des lignes (et peut-être même des colonnes) de la base de données.

Nous utilisons Hibernate pour notre persistance.Cependant, nous utilisons nos propres annotations afin de ne pas exposer notre choix de persistance aux experts du domaine métier.

Pour la sécurité basée sur les lignes, cela signifie que nous pourrions ajouter une annotation telle que @Secured au niveau de l'entité, ce qui entraînerait l'ajout d'une colonne supplémentaire à la table sous-jacente pour contraindre nos sélections ?

Pour la sécurité basée sur les colonnes, nous pourrions peut-être avoir @Secured soit pour aider à la génération de requêtes, soit peut-être utiliser un aspect pour filtrer les informations renvoyées ?

Je suis curieux de savoir comment cela pourrait également affecter les mécanismes de mise en cache d'Hibernate ?

Je suis sûr que beaucoup d'autres ont eu le même problème, et je me demandais comment vous aviez abordé ce problème ?

Très appréciée...

Était-ce utile?

La solution

Hibernate a un mécanisme de filtre cela peut fonctionner pour vous.Les filtres réécriront les requêtes générées par Hibernate pour inclure une clause supplémentaire pour limiter les lignes renvoyées.Je ne suis au courant de rien en veille prolongée pour masquer/masquer les colonnes.

Votre base de données peut également prendre en charge cette fonctionnalité.Oracle, par exemple, a le Base de données privée virtuelle (VPD) qui réécrira vos requêtes au niveau de la base de données.Cette solution présente l'avantage supplémentaire que tout programme externe (par ex.outils de reporting) qui va à l'encontre de votre base de données verra vos restrictions de sécurité appliquées.VPD prend également en charge le masquage des colonnes restreintes avec des valeurs NULL.

Malheureusement, les solutions ci-dessus ne suffisent pas à répondre aux exigences de sécurité des types de projets sur lesquels je travaille habituellement.Il existe généralement une sorte de contexte qui ne peut pas être facilement exprimé dans les solutions ci-dessus.Par exemple, les utilisateurs peuvent afficher les données qu'ils ont créées, ou qui ont été marquées comme publiques, ou qui appartiennent à un projet qu'ils gèrent.

Nous créons généralement des objets requête/finder/DAO dans lesquels nous transmettons les valeurs requises pour appliquer la sécurité, puis créons la requête en conséquence.

J'espère que ça aide

Autres conseils

Lorsque vous utilisez des filtres Hibernate, vous devez savoir que les restrictions supplémentaires ne seront pas appliquées aux instructions SQL générées par le load() ou get() méthodes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top