quinta-feira, 21 de março de 2013

Banco orientado a Regras de acesso

Pois é, o costume de um banco é criarmos um usuário para ter acesso "GRANTS" para outros OWNERS, isso funciona muito bem, tem segurança dos dados e facilita o acesso, apenas utilizando o usuário da aplicação. Mas se um dia esse usuário for capturado, o usuário que conseguiu capturar vai ter acesso a toda base e pode executar uma bagunça imensa.

Vi uma situação na empresa feita por um AD (Administrador de dados) que achei fantástico, criou-se ROLES para acessos as GRANTS dos outros OWNERS, mas temos um grande problema como a aplicação irá acessar esta ROLE?

Vamos detalhar a aplicação, estamos utilizando Spring, Primefaces, Hibernate e JPA, mas como o JPA irá setar a ROLE? Foi uma pergunta que me tirou o sono, pois nem sempre é feito dessa forma e para este projeto foi uma coisa nova, jamais havia experimentado esta forma de trabalho.

Como a arquitetura do sistema é MAVEN, como o MAVEN irá subir o Data Source?

É conseguimos executar de forma brilhante isso e gostaria de compartilhar estas informações com todos, segue abaixo o trecho do código:

No pom.xml tem um trecho de código que acrescentamos no Data Source do pom.xml.

<database.driver>oracle.jdbc.driver.OracleDriver</database.driver>
<database.username>teste</database.username>
<database.password>teste</database.password>
<database.role>SET ROLE RO_TESTE_T IDENTIFIED BY POST78452L8K8Y9362</database.role>
<database.role.enabled>true</database.role.enabled>

No momento que sobe a aplicação, ele identifica toda a regra da ROLE e quando executamos algum comando para insert, delete, update e select, a ROLE é setado.

Espero que isso sirva de conhecimento para pessoas que passaram pelo mesmo problema ou querem utilizar, uma forma mais segura de acessar o banco de dados.

Só para finalizar de essa forma quem capturar o login e senha do banco não terá acesso a nenhuma informação destinada aquele usuário, pois necessita da ROLE, que é rodada em background na aplicação.

Caso precise de ajuda é só entrar em contato.