Вы хотите устранить соблазн или сделать так, чтобы пользователи не могли найти имя пользователя/пароль для ручного подключения к базе данных?
Если вы просто хотите избавиться от соблазна, вы, конечно, можете зашифровать файл. MyBatis (я вижу, что вы отметили свой вопрос mybatis
и ibatis
, поэтому я буду использовать MyBatis в своем коде) не предлагает готового способа использования зашифрованных учетных данных, но вы можете вмешаться в код, где учетные данные используются и делают вашу расшифровку там. Вам просто нужно создать собственную фабрику источников данных.
Предполагая, что у вас есть такой источник данных:
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://someServer/someDB" />
<property name="username" value="${user}" />
<property name="password" value="${password}" />
</dataSource>
с файлом свойств для ключей:
user=JohnDoe
password=p@$$word
вы можете зашифровать файл, а затем создать собственную фабрику источников данных следующим образом (убедитесь, что вы расширяете правильный: объединенный, не объединенный и т. д.):
package com.test;
import java.util.Properties;
import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;
public class CustomDataSourceFactory extends UnpooledDataSourceFactory {
@Override
public void setProperties(Properties properties) {
String user = null;
String pass = null;
// decrypt the file, use some fancy obfuscation, connect somewhere to get
// the username and password dynamically at startup, whatever...
//
// user = "JohnDoe";
// pass = "p@$$word";
properties.put("username", user);
properties.put("password", pass);
super.setProperties(properties);
}
}
Затем ваш источник данных изменится на:
<dataSource type="com.test.CustomDataSourceFactory">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://someServer/someDB" />
</dataSource>
И теперь пользователи больше не могут видеть учетные данные.
Но учтите, что это не защитит имя пользователя/пароль. Что бы вы ни выбрали, чтобы избавиться от искушения (шифрование, обфускация, какой-то сложный алгоритм и т. д.), дело в том, что у вашего пользователя есть все, что ему нужно, чтобы отменить процесс прямо на его машине (расшифровать ключ, извлечь архив , декомпилировать код, обратное проектирование и т. д.).
Чтобы сделать невозможным получение имени пользователя/пароля, переместите iBatis/myBatis на сервер приложений; т.е. превратите свой толстый клиент в тоньше. Вы получаете разделение между приложением Windows и базой данных. Ваш сервер приложений будет выполнять все запросы к базе данных на основе команд, полученных приложением Windows.
В этом случае приложение Windows больше не будет выполнять запросы самостоятельно, поэтому ему вообще не понадобятся учетные данные базы данных; учетные данные базы данных будут храниться на сервере приложений.
person
Bogdan
schedule
26.12.2011