Monday, March 11, 2013

Administrative Tools and Security MySQL

Username dan password pada MySQL

Account pada MySQL didasarkan pada username dan host dari client. Account juga memiliki password. Berikut ini merupakan ketntuan username dan password pada MySQL:

Username yang digunakan pada MySQL dipakai untuk otentifikasi, namun tidak berhubungan dengan username yang digunakan pada Windows atau Unix. Pada Unix, secara default client dari MySQL munggunakan username pada Unix, namun hasl ini bisa diubah dengan mudah.
Username pada MySQL bisa menggunakan hingga 16 karakter. Batasan ini merupakan hard-coded di dalam MySQL server dan MySQL client sehingga tidak bisa diubah oleh siapapun.
Password dari MySQL sama sekali tidak berhubungan dengan password dari OS.
Enkripsi pada password MySQL menggunakan suatu algoritma tertentu dan berbeda dengan yang digunakan oleh Unix. Enkripsi pada password MySQL diimplementasikan dengan fungsi PASSWORD() SQL. Sementara pada Unix enkripsi password diimplementasikan dengan fungsi ENCRYPT() SQL . Pada MySQL versi 4.1 ke atas, proteksi yang digunakan lebih aman dari pada yang digunakan sebelumnya.


Bagaimana Privilege System bekerja

MySQL mempunyai prosedur keamanan non-standar. Salah satunya adalah privilege system (pengaturan hak-hak pengguna). Fungsi utama dari system ini adalah melakukan pengecekan user yang mengakses dari sebuah host dan memberikan sebuah atau beberapa hak seperti SELECT, INSERT, UPDATE, dan DELETE.

Privilege system memastikan pengguna hanya bisa melakukan operasi tertentu saja. Ketika seorang user mengakses server MySQL maka sistem akan mencari identitasnya dengan melihat host dan username yang dipakai olehnya. Setelah itu, sistem akan menentukan apa saja yang bisa dia lakukan (privilege).

MySQL melihat kedua hal tersebut karena mungkin saja ada user adit yang mengakses dari office.adcom.com namun ada user lain yang juga bernama adit yang mengakses dari home.adcom.com. MySQL menghandle masalah ini dengan memisahkan user yang berbeda host namun memiliki username yang sama. Kedua user tersebut dapat memiliki privilege yang berbeda.

MySQL access control melakukan dua tahap ketika sebuah client program yang mengakses server yaitu :

Server melihat apakah client tersebut memiliki hak untuk mengakses server tersebut
Server melihat apa saja yang bisa dilakukan untuk client tersebut untuk memastikan client tidak melakukan illegal operation


Pasword Hashing

User account pada MySQL disimpan pada tabel user pada database mysql. Masing-masing account menunjuk pada satu password pada kolom password. Namun data password yang disimpan tidak berupa plaintext namun berupa hash value yang didapat dari fungsi PASSWORD()

MySQL menggunakan password dalam dua fase pada komunikasi client/server

Ketika sebuah client mengakses server, ada langkah inisialisasi dimana password yang diberikan oleh client memiliki hash value yang sama dengan hash value yang berada di dalam tabel user
Ketika client terhubung dengan server, dia bisa (jika mempunyai privilege tersebut) mengubah password untuk account yang ada di tabel user dengan menggunakan fungsi  PASSWORD() untuk menggenerate password hash atau menggunakan GRANT atau SET PASSWORD statements.

Penggunaan password hashing telah diupdate pada MySQL 4.1 untuk memperbaiki keamanan dan mengurangi kemungkinan password diambil oleh user yang tidak berhak. Namun, penggunaan cara ini hanya bisa dipahami oleh MySQL 4.1 ke atas sehingga bisa menyebabkan masalah kompatibilitas. MySQL versi 4.1 keatas bisa mengakses MySQL versi sebelumnya karena MySQL bersifat backward-compatible yaitu kompatibel ke belakang. Namun dari MySQL versi sebelumnya akan menemui kesulitan dalam menghubungi MySQL 4.1 keatas. Contohnya, sebuah client dengan MySQL 3.23 yang mencoba mengakses server dengan MySQL 5.1 mungkin akan gagal dengan pesan kesalahan sbeagai berikut:

shell> mysql -h localhost -u root
Client does not support authentication protocol requested
by server; consider upgrading MySQL client

Berikut ini akan membahas tentang perbedaan cara password hashing pada MySQL versi awal dan versi terbaru.

Sebelum MySQL 4.1, fungsi hashing pada password akan menghasilkan nilai sepanjang 16 bytes.

+--------------------+
| PASSWORD('mypass') |
+--------------------+
| 6f8c114b58f2ce9e   |
+--------------------+

Sementara pada  MySQL 4.1, fungsi hashing telah diubah sehingga akan menghasilkan nilai sepanjang 41 bytes.

+-------------------------------------------+
| PASSWORD('mypass')                        |
+-------------------------------------------+
| *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 |
+-------------------------------------------+

Sabuah hasil dari fungsi hash yang baru akan menghasilkan nilai yang berawalan ‘*’. Password yang lebih panjang tentu saja memiliki properti kriptografi yang lebih baik sehingga lebih aman dibandingkan dengan metode hashing yang sebelumnya diterapkan.

Koneksi yang aman

MySQL mendukung penggunaan koneksi enkripsi yang aman  antara server dan client MySQL menggunakan Secure Sockets Layer (SSL) protocol. Konfigurasi standar dari MySQL menerapkan kecepatan yang paling tinggi sehingga koneksi enkripsi tidak digunakan secara default. Menggunakan koneksi enkripsi tentu menggunakan porsi CPU yang besar yang membutuhkan beberapa pekerjaan tambahan sehingga memperlambat kerja MySQL. Untuk aplikasi yang memang membutuhkan pengamanan tingkat tinggi dibutuhkan komputasi ekstra.

MySQL mengijinkan penggunaan enkripsi secara personal. Koneksi biasa atau koneksi enkripsi bisa dipilih tergantung dari kebutuhan aplikasi secara individu.


SSL adalah sebuah protokol yang menggunakan algoritma enkripsi untuk memastikan data yang ditransfer melalui public network aman. SSL ini memiliki mekanisme untuk mendeteksi perubahan, kehilangan atau pengiriman ulang data. SSL juga memiliki algoritma yang bisa melakukan verifikasi identitas.

0 comments:

Post a Comment

 
Copyright © . Only-me - Posts · Comments
Theme Template by BTDesigner · Powered by Blogger