aplicación conectarse a la base de datos
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
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.properties
como:
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".