Pergunta

O sistema no qual estou trabalhando atualmente requer alguma segurança baseada em funções, que é bem atendida na pilha Java EE.O sistema pretende ser uma estrutura para especialistas do domínio de negócios escreverem seu código.

No entanto, há também uma exigência de dados security.Ou seja, quais informações ficam visíveis para o usuário final.

Isso significa efetivamente reduzir a visibilidade das linhas (e talvez até das colunas) no banco de dados.

Estamos usando o Hibernate para nossa persistência.No entanto, estamos usando nossas próprias anotações para não expor nossa escolha de persistência aos especialistas do domínio de negócios.

Para segurança baseada em linhas, isso significa que poderíamos adicionar uma anotação como @Secured no nível da entidade, o que faria com que uma coluna extra fosse adicionada à tabela subjacente para restringir nossas seleções?

Para segurança baseada em colunas, talvez pudéssemos ter @Secured para auxiliar na geração de consultas ou talvez usar um aspecto para filtrar as informações retornadas?

Estou curioso para saber como isso também pode afetar os mecanismos de cache do hibernate.

Tenho certeza de que muitos outros terão tido o mesmo problema e gostaria de saber como você abordou isso.

Muito apreciado...

Foi útil?

Solução

O Hibernate tem um mecanismo de filtro isso pode funcionar para você.Os filtros reescreverão as consultas geradas pelo hibernate para incluir uma cláusula adicional para limitar as linhas retornadas.Não estou ciente de nada em hibernação para mascarar/ocultar colunas.

Seu banco de dados também pode ter suporte para esta funcionalidade.A Oracle, por exemplo, tem o Banco de dados privado virtual (VPD) que reescreverá suas consultas no nível do banco de dados.Esta solução tem a vantagem adicional de que qualquer programa externo (por ex.ferramentas de relatórios) que vão contra o seu banco de dados terão suas restrições de segurança aplicadas.O VPD também oferece suporte para mascarar colunas restritas com NULLs.

Infelizmente, as soluções acima não foram adequadas para suportar os requisitos de segurança dos tipos de projetos em que normalmente trabalho.Geralmente há algum tipo de contexto que não pode ser facilmente expresso nas soluções acima.Por exemplo, os usuários podem visualizar dados que criaram, ou que foram marcados como públicos, ou pertencem a um projeto que gerenciam.

Normalmente criamos objetos de consulta/localizador/DAO onde passamos os valores necessários para reforçar a segurança e, em seguida, criamos a consulta de acordo.

Eu espero que isso ajude

Outras dicas

Ao usar filtros do Hibernate você precisa estar ciente de que as restrições adicionais não serão aplicadas às instruções SQL geradas pelo load() ou get() métodos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top