Искате ли да премахнете изкушението или да направите невъзможно потребителите да намерят потребителското име/парола за ръчно свързване към базата данни?
Ако просто искате да премахнете изкушението, разбира се можете да шифровате файла. 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