Tutorial Belajar MySQL Part 36: Pengertian Fungsi Hashing dan Cara Kerja Password MySQL

Dalam tutorial tentang user MySQL sebelumnya, saya selalu menambahkan password dalam membuat user baru agar lebih aman, namun bagaimana sebenarnya MySQL menyimpan password tersebut? dalam tutorial kali ini saya akan membahas tentang fungsi hashing dan kaitannya dengan cara kerja sistem password MySQL dalam mengelola password user.


Mengenal Sistem Enkripsi Hashing

Dalam mengelola user, MySQL menyimpan password di dalam tabel user yang berada di dalam database mysql. Sampai pada tutorial ini, tentunya kita telah membuat beberapa user yang harusnya terdapat di dalam tabel ini, saya akan mencoba melihat password tiap-tiap user yang terdaftar dengan melihatnya dari tabel user ini.

Berikut query yang diperlukan untuk melihat password seluruh user dalam MySQL (masuklah sebagai root):

D:\MySQL\bin>mysql -uroot -pqwerty

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.27 MySQL Community Server (GPL)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mahasiswa          |
| mysql              |
| performance_schema |
| test               |
| universitas        |
+--------------------+
6 rows in set (0.54 sec)

mysql> USE mysql;
Database changed

mysql> SELECT user,password,host FROM user;
+------------------+-------------------------------------------+-------------+
| user             | password                                  | host        |
+------------------+-------------------------------------------+-------------+
| root             | *AA1420F182E88B9E5F874F6FBE7459291E8F4601 | localhost   |
| ilkom_admin      | *7438236BE048F242AA18D2EE074296F078CD701A | localhost   |
| mahasiswa        | *7438236BE048F242AA18D2EE074296F078CD701A | localhost   |
| ekonomi_admin    | *7438236BE048F242AA18D2EE074296F078CD701A | localhost   |
| tamu             |                                           | localhost   |
| dosen_ilkom      | *7438236BE048F242AA18D2EE074296F078CD701A | localhost   |
| sensus_mahasiswa | *7438236BE048F242AA18D2EE074296F078CD701A | 192.168.0.4 |
| admin_kampus     | *7438236BE048F242AA18D2EE074296F078CD701A | %           |
| ilkom_admin1     | *7438236BE048F242AA18D2EE074296F078CD701A | localhost   |
+------------------+-------------------------------------------+-------------+
13 rows in set (0.16 sec)

Dari query diatas, kita dapat melihat seluruh user, password, dan lokasi dari user yang terdaftar dalam MySQL. Namun seperti yang terlihat, isian dari password disimpan dalam angka yang acak. Ini adalah hasil fungsi hashing yang digunakan MySQL untuk menangani password.


Pengertian Fungsi Hashing MySQL

Dalam ilmu komputer, fungsi hashing biasanya dipelajari bersama-sama dengan kriptografi, yaitu ilmu tentang pembuatan pesan rahasia dan cara memecahkannya.

Secara sederhana, fungsi hashing adalah sebuah fungsi yang digunakan untuk mengacak sebuah kata menjadi kata lain yang tidak bermakna dan sedapat mungkin kata hasil hashing tidak bisa ditebak dari kata apa kata tersebut berasal.

Seluruh password user yang disimpan MySQL, terlebih dahulu diproses melalui fungsi hashing ini. Tujuannya, agar user yang tidak berhak, tidak dapat melihat password user lainnya.

Sepanjang tutorial MySQL dalam duniailkom ini, saya menggunakan password qwerty untuk user root. Tetapi seperti yang terlihat dari hasil diatas, MySQL bukan menyimpan kata qwerty, tetapi menyimpannya menjadi : "AA1420F182E88B9E5F874F6FBE7459291E8F4601". Ini adalah hasil fungsi hashing dari kata qwerty yang disimpan sebagai password MySQL.


Mengenal Fungsi PASSWORD()

Untuk mendapatkan hasil hashing untuk password MySQL, kita bisa menggunakan fungsi PASSWORD yang disediakan MySQL. Berikut contoh query untuk penggunaan fungsi PASSWORD:

mysql> SELECT PASSWORD('qwerty');
+-------------------------------------------+
| PASSWORD('qwerty')                        |
+-------------------------------------------+
| *AA1420F182E88B9E5F874F6FBE7459291E8F4601 |
+-------------------------------------------+
1 row in set (0.16 sec)

Seperti yang terlihat, MySQL meng-hashing kata qwerty menjadi karakter-karakter acak sepanjang 41 karakter. Hasil hashing inilah yang disimpan dalam tabel user diatas.

Lalu bagaimana cara MySQL membandingkan password saat user masuk ke sistem? MySQL cukup membandingkan isian password yang diinput penguna, memasukkannya ke dalam fungsi PASSWORD, dan membandingkan hasilnya dengan yang terdapat di tabel user. Jika hasil hashing nya bernilai sama, maka password tersebut benar dan pengguna berhak masuk ke dalam sistem.

Anda bisa mencoba kata-kata lainnya ke dalam fungsi PASSWORD ini, misalnya untuk user ilkom_admin, saya menggunakan password 'r4hasia'.

mysql> SELECT PASSWORD('r4hasia');
+-------------------------------------------+
| PASSWORD('r4hasia')                       |
+-------------------------------------------+
| *7438236BE048F242AA18D2EE074296F078CD701A |
+-------------------------------------------+
1 row in set (0.00 sec)

Fungsi hashing ini dirancang untuk tidak bisa ditebak dari apa kata password 'yang asli' berasal. Namun bagaimana jika terdapat user yang lupa passwordnya sendiri? Caranya adalah dengan membuat password baru untuk user tersebut, atau menghapus password tersebut. Langkah-langkah untuk merubah dan menghapus password user MySQL akan kita bahas pada tutorial selanjutnya.

7 Comments

  1. SA
    23 Sep 16
    • Andre
      24 Sep 16
    • fahson
      24 Dec 16
    • Francis
      15 Aug 18
  2. Anonymous
    15 Jan 18
    • Francis
      16 Aug 18
      • Anonymous
        09 Feb 23

Add Comment

Leave a Reply to fahson Cancel reply