Tutorial Belajar MySQL Part 32: Jenis-jenis Hak Akses (Privileges) dalam MySQL

Jika pada tutorial sebelumnya kita telah membahas cara membuat user dalam MySQL, Dalam tutorial kali ini kita akan membahas jenis-jenis hak akses yang ada pada MySQL. Hak akses ini nantinya digunakan untuk membatasi hak dari masing-masing user dalam mengunakan MySQL.


Jenis Hak Akses Berdasarkan Cakupan Akses Level

Seperti yang telah kita pelajari pada tutorial Cara Membuat Hak Akses (Privileges) User MySQL, bahwa MySQL menyediakan berbagai tingkatan level hak akses. Setiap user dapat dibatasi untuk dapat mengakses baik itu sebuah database tertentu saja, tabel tertentu, atau bahkan hanya kolom tertentu.

Jika didasarkan pada pengelompokkan ini, kita dapat membagi hak akses MySQL menjadi 4 level tingkatan, yaitu:

1. Hak Akses Global (*.*)

Hak akses ini berarti user dapat memiliki hak akses untuk seluruh database yang terdapat di dalam MySQL. Contoh penulisan query GRANT untuk level ini adalah:

GRANT SELECT ON *.* TO 'user'@'localhost';

Perhatikan cara penulisan nama_database.nama_tabel, dimana kita menulisnya dengan *.*, sehingga user tersebut dapat mengakses seluruh tabel pada seluruh database.

2. Hak Akses Level Database (nama_database.*)

Hak akses ini berarti user memiliki hak akses penuh untuk sebuah database. Contoh penulisan query GRANT untuk level database ini adalah:

GRANT SELECT ON universitas.* TO 'user'@'localhost';

Untuk penulisan nama_database.nama_tabel, kita membatasi nama database, namun memberikan hak akses untuk seluruh tabel, penulisannya adalah nama_database.*

3. Hak Akses Level Tabel (nama_database.nama_tabel)

Hak akses ini berarti user memiliki hak akses untuk sebuah tabel yang berada pada sebuah database. Contoh penulisan query GRANT untuk level ini adalah:

GRANT SELECT ON universitas.mahasiswa_ilkom TO 'user'@'localhost';

Hak akses yang dimiliki user hanya terbatas pada level sebuah tabel saja.

4. Hak Akses Level Kolom (nama_kolom)

Hak akses ini adalah hak akses paling kecil yang dapat diberikan kepada sebuah user. Dengan hak akses level kolom, user hanya memiliki hak akses untuk beberapa kolom pada sebuah tabel. Contoh penulisan query GRANT untuk level kolom ini adalah:

GRANT SELECT (nama,umur) ON universitas.mahasiswa_ilkom TO 'user'@'localhost';

Level paling akhir ini kita membatasi hak akses user hanya untuk kolom tertentu saja. Penulisan kolom yang diperbolehkan diletakkan di dalam tanda kurung.


Tipe-Tipe Hak Akses dalam MySQL

Untuk setiap level diatas, kita dapat menerapkan berbagai tipe hak akses yang ingin diberikan, apakah itu hanya untuk melihat saja (query SELECT), menambahkan data (query INSERT), mengupdate data (query UPDATE), bahkan menghapus data (query DELETE).

Pada tabel dibawah ini saya melampirkan seluruh tipe hak akses yang dapat diberikan/dibatasi untuk user. Tabel tersebut diambil langsung dari manual resmi MySQL. Kebanyakan dari hak akses tersebut akan jarang digunakan dan belum kita pelajari, namun tabel dibawah dapat dijadikan referensi terkait hak akses (privileges).

Hak AksesKeterangan
ALL [PRIVILEGES]Memberikan seluruh hak akses, kecuali GRANT OPTION
ALTERHak akses untuk merubah tabel (ALTER TABLE)
ALTER ROUTINEHak akses untuk merubah stored routines
CREATEHak akses untuk membuat tabel dan database
CREATE ROUTINEHak akses untuk membuat dan menghapus stored routine
CREATE TABLESPACEHak akses untuk membuat, mengubah dan menghapus tablespaces dan log file
CREATE TEMPORARYTABLESHak akses untuk membuat tabel sementara CREATE TEMPORARY TABLE
CREATE USERHak akses untuk membuat, menghapus, dan mengubah user (CREATE USER, DROP USER, RENAME USER, dan REVOKE ALL PRIVILEGES)
CREATE VIEWHak akses untuk membuat dan mengubah views
DELETEHak akses untuk menghapus data (DELETE)
DROPHak akses untuk menghapus database, tabel dan view
EVENTHak akses untuk membuat event
EXECUTEHak akses untuk menjalankan stored routines
FILEHak akses untuk membuat server membaca maupun membuat file
GRANT OPTIONHak akses untuk memberikan hak akses kepada user lainnya.
INDEXHak akses untuk membuat dan menghapus index
INSERTHak akses untuk menambahkan data (query INSERT)
LOCK TABLESHak akses untuk mengunci tabel (LOCK TABLES)
PROCESSHak akses untuk melihat seluruh proses (SHOW PROCESSLIST)
PROXYHak akses untuk proses proxy
REFERENCESBelum diimplementasikan
RELOADHak akses untuk operasi FLUSH
REPLICATION CLIENTHak akses untuk mengubah urutan master dan slave server
REPLICATION SLAVEHak akses untuk server replikasi untuk membaca log event biner dari server master
SELECTHak akses untuk melihat data (query SELECT)
SHOW DATABASESHak akses untuk melihat seluruh database (SHOW DATABASES)
SHOW VIEWHak akses untuk melihat pembuatan view (SHOW CREATE VIEW)
SHUTDOWNHak akses untuk mysqladmin shutdown
SUPERHak akses untuk fungsi administrasi server, seperti CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, dan perintah debug mysqladmin
TRIGGERHak akses untuk operasi trigger
UPDATEHak akses untuk memperbaharui data (UPDATE)
USAGESama artinya dengan “tanpa hak akses”


Pengertian Hak Akses GRANT ALL

Pada tutorial Cara Membuat Hak Akses (Privileges) User MySQL dengan query GRANT, kita telah melihat penulisan hak akses GRANT ALL. Namun sebenarnya apa saja hak akses yang bisa dilakukan dengan GRANT ALL? Dan apa saja hak akses lainnya?

GRANT ALL adalah cara penyingkatan memberikan hampir semua hak akses kepada sebuah user tertentu. Hak akses ini mencakup seluruh query dasar:

ALTER, CREATE, CREATE TEMPORARY TABLES, DELETE, DROP, EXECUTE, FILE, INDEX, INSERT, LOCK TABLES, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SELECT, SHOW DATABASES, SHUTDOWN, SUPER, dan UPDATE.

Sebagian besar hak akses diatas belum kita bahas, namun ini dapat menjadi referensi jika anda memberikan hak akses dengan GRANT ALL kepada sebuah user.


Untuk lebih memahami cara pembuatan user dan hak aksesnya, saya akan memberikan beberapa contoh, dan jika anda sudah mempelajari tutorial sebelumnya, contoh disini akan mudah dipahami.

1. Buatlah user 'dosen_ilkom' yang dapat melihat, merubah dan menambahkan data ke tabel mahasiswa_ilkom, namun tidak dapat menghapus data yang ada. User tersebut hanya dapat diakses dari localhost.

Berikut adalah query yang dibutuhkan:

mysql> CREATE USER 'dosen_ilkom'@'localhost' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT SELECT,INSERT,UPDATE ON universitas.mahasiswa_ilkom 
TO 'dosen_ilkom'@'localhost';
Query OK, 0 rows affected (0.07 sec)

2. Buatlah user 'sensus_ilkom' yang dapat melihat seluruh tabel di dalam database mahasiswa_ilkom, namun hanya pada kolom nim, nama, dan umur. User tersebut akan mengakses database dari IP 192.168.0.4 .

Berikut adalah query yang dibutuhkan:

mysql> CREATE USER 'sensus_ilkom'@'192.168.0.4' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT SELECT(nim,nama,umur) ON universitas.mahasiswa_ilkom 
TO 'sensus_ilkom'@'192.168.0.4';
Query OK, 0 rows affected (0.00 sec)

3. Buatlah user 'admin_kampus' yang dapat mengedit, membuat, dan menghapus tabel dalam database universitas, namun tidak bisa melakukan manipulasi data di dalam tabel tersebut. User ini bisa diakses dari komputer manapun.

Berikut adalah query yang dibutuhkan:

mysql> CREATE USER 'admin_kampus'@'%' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT CREATE,DROP,ALTER ON universitas.* TO 'admin_kampus'@'%';
Query OK, 0 rows affected (0.00 sec)

Dalam merancang aplikasi yang memerlukan database MySQL, pembatasan hak akses seperti diatas memerlukan seni tersendiri. Permasalahan muncul jika tiba-tiba user yang sudah dibatasi ternyata memerlukan akses ke tabel lain. Kita sebaiknya sudah memperkirakan level apa saja yang bisa diakses oleh user tertentu dan pada tabel apa saja sebelum aplikasi direlease.

Jika anda membangun aplikasi, biasanya pengguna tidak akan diberikan akses langsung dengan MySQL Server, namun kita biasanya akan memandu pengguna melalui interface lainnya seperti halaman web (untuk situs online) atau form visual basic (untuk aplikasi desktop). Dalam aplikasi web, kode PHPlah (atau lebih tepatnya: web server) yang mengakses MySQL, pengguna hanya dihadapkan pada halaman form website.

Untuk hal keamanan database, Jika anda telah membatasi hak akses pengguna pada level PHP, hal tersebut bisa dikatakan sudah cukup. Namun jika terdapat kemungkinan pengguna mengakses MySQL Server secara langsung, kita sedapat mungkin telah mengantisipasinya dengan membuat user berlapis (dari kode PHP dan dari dalam MySQL).


 

Dalam tutorial selanjutnya, kita akan membahas cara melihat daftar user MySQL dan hak aksesnya dengan query SHOW GRANTS FOR.

14 Comments

  1. Ibnu Toha
    10 Dec 14
    • Andre
      10 Dec 14
  2. Anonymous
    21 Aug 16
    • Andre
      21 Aug 16
  3. Anonymous
    21 Aug 16
  4. Azka
    05 Nov 17
    • Andre
      07 Nov 17
  5. Fakih Hidayat
    07 May 18
  6. Herlambang
    26 May 18
    • Andre
      28 May 18
  7. Vicky
    26 Jan 19
    • Andre
      27 Jan 19

Add Comment