Tutorial Belajar MySQL Part 33: Cara Melihat Daftar User MySQL dan Hak Aksesnya (SHOW GRANTS FOR)

Pada tutorial MySQL kali ini kita akan membahas tentang cara melihat siapa saja user yang terdaftar dalam MySQL, dan melihat hak akses apa saja yang diberikan kepada user tersebut menggunakan query SHOW GRANTS FOR.

Pada artikel sebelumnya, kita telah belajar cara membuat user MySQL dan hak akses user MySQL. Untuk sistem yang besar, pemantauan dan manajemen user akan sangat diperlukan. Selain untuk kenyamanan pengguna, hal ini juga berkaitan erat dengan keamanan Server MySQL. Misalnya, untuk user yang tidak aktif lagi sebaiknya dihapus dari sistem, karena bisa saja disalahgunakan oleh orang lain.


Cara Melihat Daftar User MySQL

Untuk melihat user yang terdaftar di dalam MySQL Server, kita dapat mengaksesnya dengan melihat tabel user yang terdapat di dalam database mysql.

Database mysql digunakan secara internal untuk manajemen meta data MySQL (metadata adalah data tentang sistem mysql itu sendiri) dimana salah satunya adalah tabel user MySQL. Karena pentingnya database ini, biasanya hanya user root yang memiliki hak akses penuh untuk database mysql.

Database mysql terdiri dari banyak tabel, namun untuk keperluan user, kita hanya akan menggunakan tabel user. Berikut query untuk melihat seluruh user yang terdaftar dalam MySQL:

SELECT user,host FROM mysql.user;

Dari query SELECT diatas, kita bisa melihat user apa saja dan pada alamat mana saja yang terdaftar.

Jika anda mengikuti tutorial MySQL untuk membuat user dalam duniailkom ini, didalam MySQL Server akan terdapat beberapa user, berikut adalah contoh perintah melihat user pada MySQL:

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.11 sec)

mysql> USE mysql;
Database changed

mysql> SELECT user,host FROM mysql.user;
+------------------+-------------+
| user             | host        |
+------------------+-------------+
| admin_kampus     | %           |
| sensus_ilkom     | 192.168.0.4 |
| sensus_mahasiswa | 192.168.0.4 |
| dosen_ilkom      | localhost   |
| ekonomi_admin    | localhost   |
| ilkom_admin      | localhost   |
| mahasiswa        | localhost   |
| root             | localhost   |
| tamu             | localhost   |
+------------------+-------------+
9 rows in set (0.12 sec)

Dari perintah diatas, pertama kali saya login sebagai root, lalu menggunakan database mysql, dan terakhir menjalankan query SELECT user,host FROM mysql.user untuk melihat daftar user yang ada di dalam MySQL. Secara total terdapat 9 user yang merupakan user yang saya buat pada penjelasan tutorial sebelum ini. Jika anda perhatikan terdapat juga user root di dalam daftar tersebut.


Cara Melihat Hak Akses User MySQL (SHOW GRANTS FOR)

Setelah mendapatkan daftar user MySQL, tentunya kita ingin melihat apa saja hak akses yang dimiliki oleh masing-masing user tersebut. Untuk melihat hak aksesnya, MySQL menyediakan query SHOW GRANTS FOR.

Perhatikan bahwa MySQL menggunakan kata bentuk jamak GRANTS (bukan GRANT) dan jika anda lupa menambahkan 'S' kepada GRANTS, MySQL akan menghasilkan error.

Format dasar query SHOW GRANTS FOR adalah sebagai berikut:

SHOW GRANTS FOR 'nama_user'@'lokasi_user';
  • nama_user adalah nama dari user yang akan diquery.
  • lokasi_user adalah alamat IP dari user nama_user, dapat berupa: localhost, 192.168.0.5, atau '%'.

Sebagai contoh, kita akan melihat hak akses untuk user admin_kampus dengan query berikut:

mysql> SHOW GRANTS FOR 'admin_kampus' \G

*************************** 1. row ***************************
Grants for admin_kampus@%: GRANT USAGE ON *.* TO 'admin_kampus'@'%'
IDENTIFIED BY PASSWORD '*7438236BE048F242AA18D2EE074296F078CD701A'

*************************** 2. row ***************************
Grants for admin_kampus@%: GRANT CREATE, DROP, ALTER ON `universitas`.*
TO 'admin_kampus'@'%'
2 rows in set (0.00 sec)

Saya menambahkan perintah \G sebagai pengganti titik koma (;) diakhir query agar hasil tampilan tidak dalam bentuk tabel, tetapi ditampilakan per baris kebawah (pernah kita bahas pada tutorial Dasar Penulisan Query MySQL), hal ini karena hasil query SHOW GRANTS FOR bisa menjadi sangat panjang sehingga susah membacanya jika dalam bentuk tabel (silahkan mencoba query tersebut tanpa format \G untuk melihat perbedaan yang saya maksud, ganti \G menjadi titik koma ';').

Hasil query SHOW GRANTS FOR diatas terdiri dari 2 baris, baris pertama berisi:

GRANT USAGE ON *.* TO 'admin_kampus'@'%' IDENTIFIED BY PASSWORD '......'

Barisi ini lebih kepada penjelasan bahwa user admin_kampus berada pada lokasi '%' dan memiliki password. Password yang tertera di sini adalah hasil fungsi hashing yang digunakan secara internal oleh MySQL untuk menyimpan password. Saya akan membuat artikel tersendiri untuk menjelaskan bagaimana password untuk user disimpan dan diproses oleh MySQL. Untuk saat ini kita sepakati saja bahwa MySQL tidak menyimpan password dalam bentuk aslinya.

Baris kedua berisi :

GRANT CREATE, DROP, ALTER ON `universitas`.* TO 'admin_kampus'@'%'

Inilah hasil query yang menjelaskan hak akses apa saja yang dimiliki oleh user admin_kampus. Terlihat bahwa user admin_kampus memiliki hak akses CREATE, DROP, dan ALTER untuk seluruh tabel dalam database universitas.

Query SHOW GRANTS FOR akan meminta masukan alamat lokasi user jika alamat user tersebut tidak didefenisikan sebagai '%', berikut contoh yang saya maksud:

mysql> SHOW GRANTS FOR 'dosen_ilkom' \G

ERROR 1141 (42000): There is no such grant defined for user 
'dosen_ilkom' on host '%'

mysql> SHOW GRANTS FOR 'dosen_ilkom'@'localhost'\G

*************************** 1. row ***************************
Grants for dosen_ilkom@localhost: GRANT USAGE ON *.* TO 'dosen_ilkom'
@'localhost' IDENTIFIED BY PASSWORD
'*7438236BE048F242AA18D2EE074296F078CD701A'

*************************** 2. row ***************************
Grants for dosen_ilkom@localhost: GRANT SELECT, INSERT, UPDATE ON
`universitas`.`mahasiswa_ilkom` TO 'dosen_ilkom'@'localhost'
2 rows in set (0.00 sec)

Terlihat bahwa MySQL mengeluarkan pesan error pada saat perintah SHOW GRANTS FOR 'dosen_ilkom' dijalankan, karena secara default MySQL akan mengeksekusi SHOW GRANTS FOR 'dosen_ilkom'@'%', padahal user dosen_ilkom berada pada localhost, bukan pada '%' (perhatikan hasil tabel user yang menjelaskan dosen_ilkom berada di localhost).

Sehingga ketika saya menggantinya menjadi SHOW GRANTS FOR 'dosen_ilkom'@'localhost', MySQL sukses menjalankan query tersebut.


Dalam tutorial kali ini kita telah membahas query SHOW GRANTS FOR untuk melihat hak akses sebuah user. Jika anda ingin menghapus beberapa user diatas, bisa menggunakan perintah DROP USER, seperti yang telah kita bahas pada tutorial Cara Membuat dan Menghapus User MySQL.

Sedangkan jika anda ingin mencabut hak akses user yang ada tanpa menghapus user tersebut, dapat menggunakan query REVOKE yang akan kita bahas pada tutorial selanjutnya, Cara menghapus hak akses user MySQL menggunakan query REVOKE.

10 Comments

  1. junita
    26 Nov 14
    • Andre
      28 Nov 14
  2. mang jojot
    16 Jan 15
    • Andre
      19 Jan 15
  3. hasbullah
    11 Apr 15
    • Andre
      12 Apr 15
  4. E.Daniels
    11 May 15
  5. Ade
    04 Apr 16
  6. Davina Aulia
    02 Feb 21

Add Comment