plugin - verificar java instalado
datos de ''seguridad'' con java e hibernación (2)
El sistema en el que estoy trabajando actualmente requiere cierta seguridad basada en roles, la cual está bien atendida en la pila Java EE. El sistema pretende ser un marco para que los expertos en el dominio empresarial escriban su código además de.
Sin embargo, también existe un requisito para la security
datos. Es decir, qué información es visible para un usuario final.
Esto efectivamente significa reducir la visibilidad de las filas (y tal vez incluso las columnas) en la base de datos.
Estamos usando Hibernate para nuestra persistencia. Sin embargo, estamos utilizando nuestras propias anotaciones para no exponer nuestra opción de persistencia a los expertos del dominio de negocios.
Para la seguridad basada en filas, esto significa que podríamos agregar una anotación como @Secured
a nivel de entidad, lo que provocaría que se agregara una columna adicional a la tabla subyacente para restringir nuestras selecciones.
Para la seguridad basada en columnas, quizás podríamos haber @Secured
para ayudar en la generación de consultas, o tal vez usar un aspecto para filtrar la información devuelta?
Tengo curiosidad por saber cómo esto podría afectar los mecanismos de caché de hibernate también?
Estoy seguro de que muchos otros habrán tenido el mismo problema, y me preguntaba cómo te acercaste a esto.
Muy apreciado...
Hibernate tiene un mecanismo de filtro que puede funcionar para usted. Los filtros reescribirán las consultas que hibernate genera para incluir una cláusula adicional para limitar las filas devueltas. No conozco nada en Hibernate para enmascarar / ocultar columnas.
Su base de datos también puede tener soporte para esta funcionalidad. Oracle, por ejemplo, tiene la base de datos virtual privada (VPD) que reescribirá sus consultas en el nivel de la base de datos. Esta solución tiene el beneficio adicional de que se aplicarán las restricciones de seguridad de cualquier programa externo (por ejemplo, herramientas de informes) que vaya en contra de su base de datos. VPD también tiene soporte para enmascarar columnas restringidas con NULLs.
Desafortunadamente, las soluciones anteriores no han sido adecuadas para respaldar los requisitos de seguridad para los tipos de proyectos en los que normalmente trabajo. Por lo general, hay algún tipo de contexto que no se puede expresar fácilmente en las soluciones anteriores. Por ejemplo, los usuarios pueden ver los datos que han creado, o que han sido marcados como públicos o que pertenecen a un proyecto que administran.
Normalmente creamos objetos query / finder / DAO donde pasamos los valores necesarios para aplicar la seguridad y luego creamos la consulta en consecuencia.
espero que esto ayude
Al utilizar los filtros Hibernate, debe tener en cuenta que las restricciones adicionales no se aplicarán a las declaraciones SQL generadas por los métodos load()
o get()
.