Enkripsi JDBC Properties
Posted on January 16th, 2009 | by endy |Enkripsi Password Database dengan Jasypt
Bila kita membuat aplikasi Java yang menggunakan database, pasti kita akan membuat satu file untuk konfigurasi koneksi database, biasanya diberi nama jdbc.properties. Isinya kira-kira sebagai berikut:
jdbc.driver = com.mysql.jdbc.Driver jdbc.url = jdbc:mysql://localhost/belajar jdbc.username = belajar jdbc.password = java
Cepat atau lambat, kita akan menemui kebutuhan untuk menyembunyikan nilai yang diisikan ke dalam file tersebut untuk alasan keamanan. Tentunya kita tidak ingin orang yang bisa membaca file tersebut login ke database dan melihat berbagai data rahasia dalam database.
Kita ingin mengenkripsi minimal variabel jdbc.password, supaya tidak bisa dibaca sembarang orang. Bila kita menggunakan Spring Framework untuk membaca file tersebut, kita bisa menggunakan Jasypt yang mampu menangani masalah enkripsi file tersebut.
Biasanya, kita membaca file jdbc.properties di dalam konfigurasi Spring, seperti ini.
<context:property-placeholder location="classpath:jdbc.properties"/>
atau dalam versi yang lebih konvensional, seperti ini
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"></property>
</bean>
dan menggunakannya dalam konfigurasi dataSource seperti ini.
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
Dengan menggunakan Jasypt, kita dapat mengenkripsi jdbc.properties sehingga menjadi seperti ini.
jdbc.driver = com.mysql.jdbc.Driver jdbc.url = jdbc:mysql://localhost/belajar jdbc.username = belajar jdbc.password = ENC(y5+6JdRA4Xv/qbYjmYdo7A==)
Agar jdbc.password bisa dibaca dengan baik, kita ganti PropertyPlaceholderConfigurer dengan miliknya Jasypt, sehingga konfigurasi Spring kita menjadi seperti ini.
<bean class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer"> <constructor-arg> <bean class="org.jasypt.util.text.BasicTextEncryptor"> <property name="password" value="test1234"/> </bean> </constructor-arg> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> </bean>
Terakhir, bagaimana cara kita mengetahui bahwa hasil enkripsi dari ‘java’ adalah ‘y5+6JdRA4Xv/qbYjmYdo7A==’ ??
Gampang, buat saja kode Java sederhana seperti ini.
public class Main {
public static void main(String[] args) {
String encryptionPassword = "test1234";
BasicTextEncryptor encryptor = new BasicTextEncryptor();
encryptor.setPassword(encryptionPassword);
String jdbcPassword = "java";
System.out.println("String "+jdbcPassword+" diencrypt menjadi : "+encryptor.encrypt(jdbcPassword));
}
}
8 Responses to “Enkripsi JDBC Properties”
By Tabloid Internet on Jan 16, 2009 | Reply
Mantap tutornya. thx.
Bos, jangan lupa maen-amen ke blog supportnya Tabloid Internet. Kalo mau juga posting artikel tutornya disana. Pasti dimuat di tabloid internet edisi cetak.
By Vyor on Feb 5, 2009 | Reply
Terima Kasih untuk ilmunya. Saya sudah pernah menggunakan Jasypt tetapi belum tau yang namanya SPRING.
By deChan on Feb 13, 2009 | Reply
mantab juga,dulu aku buat manual je…
By mbahsomo on Apr 11, 2009 | Reply
Mas kalo saya pingin file konfigurasi databasenya bambilnya bukan dari path dan bukan juga dari file *.properties, jadi misal saya buat program yang udah jadi jar.
File konfigurasi tidak mati jadi bisa di ubah – ubah yang file tersebut satu folder dengan jar, semisal. kira – kira konfigurasinya gimana ya mas
By cokrojoyo on Nov 30, 2009 | Reply
Pak gimana cara mengoneksikan database MySQL dengan program aplikasi yang dibuat dari java, tetapi Databasenya ada di Komputer A dan program aplikasinya di Komputer B, aku sudah coba mengganti nama hostnya menjadi IP milik komputer A tapi programnya tidak bisa jalan, tapi kalo Databasenya ada di komputer B programnya bisa jalan. Tolong pak gimana cara penyelesaiannya?. Oya pak saya buat programnya itu pake JBDC untuk akses ke databasenya. Thank you.
By endy on Dec 4, 2009 | Reply
Itu berarti bukan di Java-nya, tapi di databasenya. Pastikan username databasenya sudah diijinkan connect dari host A.
Sebagai contoh, kalo pake MySQL gini caranya :
grant all on namadb.* to namauser@ip-host-a identified by ‘passwordnya’
By cokrojoyo on Dec 5, 2009 | Reply
Pak terima kasih atas penjelasannya. Sebentar saya coba dulu ya? oK.
Oya tentang tutotial yang ruthless test itu saya masih bingung maklum masih baru belajar java, kalo umpama saya pakai netbeans gimana implementasinya pak? Thank’s