Codificando senhas em datasources no Jboss

Escrito por Gionei Mistura em 30 de abril de 2010, 11:09h

Quando um datasource é configurado no Jboss, as informações de usuário e senha são armazenadas em cleartext no arquivo datasource-ds.xml. Para não manter estas informações abertas no arquivo, existe a possibilidade de codificar a senha. Basicamente, a senha é codificada e inserida em um “Security-Domain”, que é utilizado pelo datasource para fazer a autenticação no banco de dados.

Importante: Não faça alterações nos arquivos do Jboss se não tiver conhecimento de sua estrutura. Como a maioria dos arquivos de configuração está em formato xml, qualquer alteração indevida ou erro de sintaxe poderá ocasionar a parada do servidor de aplicação. Lembrando que é de extrema importância a realização de um backup antes de iniciar estes procedimentos. Com o backup pronto, mãos a obra:

O primeiro passo é gerar a senha codificada, a partir do comando abaixo:

java -cp lib/jboss-common.jar;lib/jboss-jmx.jar;server/default/lib/jbosssx.jar;server/default/lib/jboss-jca.jar org.jboss.resource.security.SecureIdentityLoginModule senha

Este comando retornará a senha codificada (Encoded Password):

image

Com a senha codificada em mãos, criaremos um novo Security Domain, onde serão armazenadas as informações do login (JBOSS_SERVER\conf\login-config.xml).

    <application-policy name="ems-encrypted-password">
        <authentication>
            <login-module code="org.jboss.resource.security.SecureIdentityLoginModule" flag="required">
                <module-option name="username">pub</module-option>
                <module-option name="password">2c077faef802b2d1</module-option>
                <module-option name="managedConnectionFactoryName">jboss.jca:name=ems,service=LocalTxCM</module-option>
            </login-module>
        </authentication>
    </application-policy>

Deve ser criado um Security Domain (application-policy) para cada banco de dados, mesmo que as informações de login sejam iguais. Isso é necessário pois a opção managedConnectionFactoryName recebe como valor o nome da conexão que é criada no arquivo datasource-ds.xml.

Substitua as informações de login do arquivo datasource-ds.xml, para que o datasource faça a autenticação com as informações do Security Domain (negrito):

   <local-tx-datasource>
      <jndi-name>ems</jndi-name>
      <connection-url>jdbc:datadirect:openedge://THUNDERCATS:23620;databaseName=emsdev</connection-url>
      <driver-class>com.ddtek.jdbc.openedge.OpenEdgeDriver</driver-class> 
      <security-domain>ems-encrypted-password</security-domain>
         <new-connection-sql>select count(*) from dtsuser</new-connection-sql>
      <check-valid-connection-sql>select count(*) from dtsuser</check-valid-connection-sql>
      <metadata>
         <type-mapping>PostgreSQL 7.2</type-mapping>
      </metadata>
      <min-pool-size>5</min-pool-size>
      <max-pool-size>10</max-pool-size>
   </local-tx-datasource>

Se a instância estiver em execução durante este procedimento, ao salvar o arquivo o Jboss fará a leitura do arquivo datasource-ds.xml automaticamente, o que poderá gerar alguns exceptions. Porém, recomenda-se executar esta configuração com a instância parada.

Ao final do processo, inicie o Jboss e verifique se existe algum erro de conexão nos logs. Também é importante fazer um teste na aplicação, para ter certeza que as rotinas que façam conexão aos bancos estão operacionais.

Categorias:

Comentários (3) -

em 28 de junho de 2011, 15:01h

ola Gionei,

eu tenho um aplicação com o servidor jboss na versão jboss-5.1.0.GA e trabalhando com banco progress 10.1c, so que eu tenho dois problema estou trabalhando com ele sempre em modo console e o outro problema é que ele ocupa sempre uma conexão no banco e quando eu paro o banco tenho que reiniciar o console novamente. Como devo resolver esse problema.

desde ja agradeço.

Luciano

em 29 de junho de 2011, 10:26h

Luciano,

O modo padrão de utilização do Jboss é através do Console. Porém, você pode configurar sua instância do Jboss para ser executada como serviço. Informações adicionais podem ser encontradas nesta página http://community.jboss.org/wiki/JBossNativeWindows.
Sobre a questão do Jboss consumir uma conexão no banco de dados, vai depender de como sua aplicação é construída. De qualquer forma, o número de conexões do parâmetro <min-pool-size> sempre permanecerá aberto, independente da aplicação estar acessando o banco de dados ou não. O que você pode fazer, é definir este parâmetro para "0" e colocar o parâmetro <idle-timeout-minutes> para o datasource em questão. Dessa forma, quando o tempo ocioso para o datasource chegar ao valor definido neste parâmetro, as conexões serão fechadas, até chegar ao mínimo do pool, que foi previamente configurada para "0".
Porém, como comentei antes, vai depender da forma que sua aplicação acessa o banco de dados. De qualquer forma, faça um teste com os parâmetros e valores que te passei.

Gionei.

gionei

em 18 de setembro de 2011, 20:25h

Legal... fiz algo similar no JBoss 6 jbossdivers.wordpress.com/.../

Mauricio

Comentar




biuquote
  • Comentário
  • Pré-visualização
Loading


Acesso LogMeIn

Informe o código PIN: