aplicación conectarse a la base de datos

Resuelto prolink007 asked hace 13 años • 1 respuestas

Estoy trabajando en una aplicación que será utilizada por las escuelas. Cada escuela configurará su base de datos. Y cada escuela proporcionará su propio archivo de "configuración" a la aplicación. El archivo de configuración contendrá la URL de la base de datos de la escuela específica que creó el archivo de configuración. Esto es para que un estudiante que use la aplicación pueda simplemente cargar un archivo de configuración diferente si desea conectarse a una base de datos diferente.

Mi pregunta es, ¿cómo protejo el nombre de usuario y la contraseña utilizados para conectarme a la base de datos? Entonces, SÓLO la aplicación tiene acceso de lectura y escritura a la base de datos. ¿Y la aplicación tiene acceso de lectura y escritura solo a esa escuela específica?

Si necesita más información, hágamelo saber.

Gracias

prolink007 avatar Oct 11 '11 10:10 prolink007
Aceptado

Eche un vistazo a Jasypt , es una biblioteca de Java que permite al desarrollador agregar capacidades básicas de cifrado a sus proyectos con el mínimo esfuerzo y sin la necesidad de tener un conocimiento profundo sobre cómo funciona la criptografía.

En caso de que uses Spring, puedes definirlo db.propertiescomo:

 jdbc.driver=com.mysql.jdbc.Driver
 jdbc.url=jdbc:mysql://localhost/yourdb
 jdbc.username=userName
 jdbc.password=ENC(A6L729KukPEx7Ps8didIUWb01fdBRh7d)

y configúrelo con Jasypt y Spring como:

<bean class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">
   <constructor-arg>
     <bean class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
       <property name="config">
         <bean class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
           <property name="algorithm" value="PBEWithMD5AndDES" />
           <property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />
         </bean>
       </property>
     </bean>
   </constructor-arg>
   <property name="locations">
     <list>
       <value>classpath:/META-INF/props/db/db.properties</value>
     </list>
   </property>   
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

Esto ocultaría la contraseña real (puede hacer lo mismo con username) a los estudiantes, por lo que no podrían derivar la cadena de conexión al mirar el archivo de propiedades.

En caso de que no estés usando Spring, aquí tienes una guía de Jasypt para lograr lo mismo "manualmente".

tolitius avatar Oct 11 '2011 03:10 tolitius