Tutorial Belajar MySQL Part 34: Cara Menghapus Hak Akses User MySQL (REVOKE)

Dalam maintenance database, kadang kita perlu mengubah dan menghapus beberapa user. Dalam tutorial MySQL kali ini kita akan mempelajari query REVOKE yang digunakan untuk mencabut previlege (hak akses) dari user MySQL.

Hak akses yang diberikan ke seorang user, adakalanya perlu dilakukan perubahan, tergantung kondisi dan kebijakan pengguna. Untuk menghapus user, kita dapat menggunakan query DROP user, namun kadang kita perlu hanya menghapus hak aksesnya saja, tanpa menghapus user yang bersangkutan. Untuk hal ini MySQL menyediakan perintah REVOKE.


Cara Penggunaan Query REVOKE untuk Menghapus Hak Akses

Langkah pertama sebelum membuat query REVOKE adalah mengetahui user siapa dan hak apa saja yang akan dihapus. Dari tutorial MySQL: Jenis-jenis Hak Akses (Privileges) dalam MySQL , kita telah mempelajari bahwa setiap user bisa memiliki hak akses yang berbeda-beda. Untuk melihat hak akses apa saja yang dimiliki oleh seorang user, dapat menggunakan query SHOW GRANTS FOR (kita telah mempelajarinya pada tutorial Cara Melihat Daftar User MySQL dan Hak Aksesnya)

Untuk tutorial kali ini saya akan membuat user baru admin_data. User admin_data akan diberikan hak akses untuk query SELECT,INSERT,UPDATE, dan DELETE untuk seluruh tabel yang berada di dalam database universitas. Berikut adalah query yang saya gunakan dengan user root:

D:\MySQL\bin>mysql -u root -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> CREATE USER 'admin_data'@'localhost'IDENTIFIED by 'r4hasia';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON universitas.* 
TO 'admin_data'@'localhost';
Query OK, 0 rows affected (0.00 sec)

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

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

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

Jika anda telah mempelajari tutorial sebelumnya, perintah query diatas dapat dengan mudah dimengerti. Pada query pertama, saya membuat user admin_data dengan perintah CREATE USER, lalu memberikan hak akses dengan query GRANT, dan memeriksa hak akses dengan query SHOW GRANTS FOR.

Setelah menjalankan perintah diatas, user admin_data memiliki 4 jenis hak akses, yaitu SELECT,INSERT,UPDATE, dan DELETE. Query REVOKE dapat di buat untuk menghapus seluruh atau salah satu hak akses saja. Berikut adalah format dasar penulisan query REVOKE:

REVOKE jenis_hak_akses (kolom1,kolom2) ON 
nama_database.nama_tabel FROM nama_user@lokasi_user;
  • Jenis_hak_akses adalah privileges yang akan dihapus dari user tersebut. Kita bisa membuat hak akses secara satu persatu untuk keperluan yang spesifik, atau mengisikan perintah ALL PRIVILEGES untuk menghapus seluruh hak akses.
  • kolom1,kolom2 adalah nama judul kolom yang hak aksesnya akan dicabut. Jika tidak diisi, maka dianggap query REVOKE akan menghapus pada seluruh kolom.
  • nama_database adalah nama database yang ingin dihapuskan hak aksesnya. nama_database bisa ditulis dengan tanda bintang (*) untuk merujuk kepada seluruh database.
  • nama_tabel adalah nama tabel yang ingin dihapuskan hak aksesnya. nama_tabel bisa ditulis dengan tanda bintang (*) untuk merujuk kepada seluruh tabel.
  • nama_user adalah nama dari user yang akan dihapus hak aksesnya.
  • lokasi_user adalah alamat IP dari user yang akan dihapus hak aksesnya.

Sebagai contoh, saya akan menghapus hak akses SELECT dari user admin_data:

mysql> exit;
Bye

D:\MySQL\bin>mysql -uadmin_data -pr4hasia

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2

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 |
| universitas        |
+--------------------+
2 rows in set (0.08 sec)

mysql> USE universitas;
Database changed

mysql> SHOW tables;
+-----------------------+
| Tables_in_universitas |
+-----------------------+
| mahasiswa_ekonomi     |
| mahasiswa_ilkom       |
+-----------------------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM mahasiswa_ilkom;
+-----------+-----------------+------+--------------+------+
| nim       | nama            | umur | tempat_lahir | IPK  |
+-----------+-----------------+------+--------------+------+
| 089045001 | Andi Suryo      |   23 | Jakarta      | 2.70 |
| 109245021 | Santi Syanum    |   21 | Malang       | 3.20 |
| 099145055 | Neil Situmorang |   22 | Medan        | 1.90 |
+-----------+-----------------+------+--------------+------+
3 rows in set (0.07 sec)

mysql> exit;
Bye

D:\MySQL\bin>mysql -u root -pqwerty

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3

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> REVOKE SELECT ON universitas.* FROM 'admin_data'@'localhost';
Query OK, 0 rows affected (0.00 sec)

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

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

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

Dari contoh query MySQL diatas, pertama-tama saya keluar dari user root dengan perintah exit;, dan masuk sebagai admin_data. Selanjutnya saya ingin menguji user admin_data untuk menampilkan isi tabel mahasiswa_ilkom, dan melakukan pengecekan hak akses user tersebut.

Setelah memastikan hak akses admin_data,  saya kembali menggunakan user root dan menghapus hak akses SELECT dari admin_data dengan query REVOKE, dan kembali memeriksa hak aksesnya.

Untuk menguji bahwa user admin_data sudah tidak dapat melihat database universitas lagi, saya akan kembali masuk sebagai user admin_data:

mysql> exit;
Bye

D:\MySQL\bin>mysql -uadmin_data -pr4hasia

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5

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 |
| universitas        |
+--------------------+
2 rows in set (0.00 sec)

mysql> USE universitas;
Database changed

mysql> SHOW tables;
+-----------------------+
| Tables_in_universitas |
+-----------------------+
| mahasiswa_ekonomi     |
| mahasiswa_ilkom       |
+-----------------------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM mahasiswa_ilkom;
ERROR 1142 (42000): SELECT command denied to user 
'admin_data'@'localhost' fortable 'mahasiswa_ilkom'

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

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

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

mysql> INSERT INTO mahasiswa_ilkom VALUES ('129245021', 'Ginara Maulida', 
22, 'Malang', 3.8);
Query OK, 1 row affected (0.11 sec)

Pada saat menggunakan user admin_data, saya mencoba melakukan query SELECT, dan seperti yang diharapkan, MySQL menolak untuk memperlihatkan isi tabel mahasiswa_ilkom karena hak akses untuk query SELECT telah dihapus.

Namun karena user admin_data masih memiliki hak akses INSERT, UPDATE dan DELETE, pada perintah terakhir saya mencoba menambahkan data baru kedalam tabel mahasiswa_ilkom, dan berhasil.

Untuk menghapus hak akses lainnya, anda tinggal membuat perintah REVOKE untuk masing-masing hak akses, atau menggunakan REVOKE ALL untuk menghapus seluruh hak akses.


Cara Penggunaan Query REVOKE ALL untuk Menghapus Seluruh Hak Akses

Jika pada penjelasan sebelumnya kita diberikan fleksibilitas untuk dapat memilih hak akses apa saja yang akan dihapus, namun sebagai cara singkat, MySQL menyediakan query REVOKE ALL untuk mencabut seluruh hak akses.

Sebagai lanjutan dari user admin_data, saya memutuskan untuk mencabut seluruh hak aksesnya kembali. Silahkan masuk sebagai root, dan jalankan perintah berikut:

D:\MySQL\bin>mysql -u root -pqwerty

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6

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 GRANTS FOR 'admin_data'@'localhost'\G

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

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

mysql> REVOKE ALL ON universitas.* FROM 'admin_data'@'localhost';
Query OK, 0 rows affected (0.00 sec)

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

*************************** 1. row ***************************
Grants for admin_data@localhost: GRANT USAGE ON *.* TO 
'admin_data'@'localhost' IDENTIFIED BY PASSWORD 
'*7438236BE048F242AA18D2EE074296F078CD701A'
1 row in set (0.00 sec)

Pada perintah pertama, saya menggunakan query SHOW GRANTS FOR untuk melihat hak akses admin_data, lalu menggunakan query REVOKE ALL untuk menghapus seluruh hak aksesnya, dan memastikannya lagi dengan memeriksa query SHOW GRANTS FOR.


Dari tutorial cara menghapus hak akses user MySQL dengan query REVOKE ini kita telah mempelajari cara menghapus dan mencabut hak akses dari user tertentu tanpa menghapus user tersebut, Dalam tutorial selanjutnya kita akan mempelajari tentang query GRANT OPTION, yaitu sebuah hak akses yang dapat digunakan untuk memberikan hak akses tersebut kepada user lainnya.

Dalam tutorial MySQL berikutnya, kita akan membahas Pengertian Fungsi Hashing dan cara kerja MySQL dalam menyimpan password user.

One Response

  1. Yendri
    20 Oct 23

Add Comment