Хотите ли вы удалить искушение или сделать невозможным для пользователей поиск имени пользователя / пароля для ручного подключения к базе данных?
Если вы просто хотите удалить искушение, вы можете, конечно, зашифроватьфайл.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 больше не будет запускать запросы самостоятельно, поэтому ему вообще не понадобятся учетные данные базы данных.;учетные данные базы данных будут храниться на сервере приложений.