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.
FYI…
kalo di versi 5.7 kolom password nya bernama (authentication_string)
jadi syntaxnya: SELECT user,authentication_string,host FROM user;
Terima Kasih
Terimakasih infonya gan,.. :)
terimakasih gan
thx gan, pantes ngecek syntax berulang kali kok tetep aja gagal :D
FYI lagi Gan,
query yang diperlukan untuk melihat password seluruh user dalam MySQL 5.7.17 pake dibawah ini
SELECT user, password('password'), host FROM user;
sukses bisa tampil kayak tutorial dari master Andre
Sip gan, password('password') sbgai pengganti authentication_string ya? Tapi output dr kolom "password" nya kok beda ya antara yg password('password') dgn yg authentication_string? Saya pakai MySQL 5.7.23 gan…
Mungkin ada yg bisa menjelaskan apa beda "maksud" dari password('password') dan authentication_string? Trims all :D
maksudny aitu hashing jadi biar walopun database nya dibaca ga bakal ketemu