2008-08-29 12 views
6

El sistema en el que estoy trabajando actualmente requiere una cierta seguridad basada en roles, que 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.data 'security' con java e hibernación

Sin embargo, también existe un requisito para los datos security. Es decir, qué información es visible para un usuario final.

Esto significa efectivamente reduciendo la visibilidad a filas y columnas (quizá incluso) en la base de datos.

Estamos utilizando 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 fila esto significa que podríamos añadir una anotación como @Secured a nivel de entidad, lo que causaría una columna adicional que se añade a la tabla subyacente para limitar nuestras selecciona?

para la seguridad basada columna, tal vez podríamos tener @Secured a cualquiera ayudar en la generación de consultas, o tal vez usar un aspecto filtrar la información que se devuelve?

Tengo curiosidad por saber cómo esto podría afectar los mecanismos de almacenamiento en caché de hibernate también?

Estoy seguro de que muchos otros habrán tenido el mismo problema, y ​​me preguntaba cómo se acercó a esto?

Muy apreciado ...

Respuesta

6

Hibernate tiene un filter mechanism 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 Virtual Private Database (VPD), que volverá a escribir sus consultas a nivel de 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 soportar 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 a

1

Al utilizar filtros de Hibernate que hay que tener en cuenta que las restricciones adicionales que no se aplicarán a las sentencias SQL generted por los métodos load() o get().