Hak akses MySQL selain dibatasi dengan query apa saja , juga dapat dibatasi pada level dimana query tersebut akan dijalankan, misalkan pada level database, level tabel atau level kolom. Kita akan membahasnya secara lengkap diartikel ini.

Dalam perancangan aplikasi yang membutuhkan database, pada user yang akan mengakses database akan memiliki batasan masing-masing sesuai dengan fungsinya. Sebagai contoh, pada database akademik_stmikpalcomtech yang telah kita buat, terdapat 4 buah tabel, yakni mahasiswa,nilai,dosen dan matkul

kita membuat user mahasiswa. User mahasiswa ini hanya diberikan hak akses untuk melihat-lihat data tabel mahasiswa , namun tidak bisa merubah apapun di dalam tabel tersebut. Di dalam MySQL, user mahasiswa ini hanya kita berikan hak akses SELECT

Contoh lainnya, untuk keperluan administrasi, user Kholid sebagai administrator akan diberikan hak akses untuk dapat menginput data dan merubah data dari tabel mahasiswa. Tetapi , user Dayat tidak bisa melihat dan merubah tabel mahasiswa, karena hak akses itu seharusnya diberikan kepada Kholid.

Cara Memberikan Hak Akses Kepada User dengan query GRANT

Hak akses kepada sebuah user, MySQL menyediakan query GRANT. Berikut format dasar query GRANT:

GRANT hak_akses ON nama_database.nama_tabel TO 'nama_user'@'lokasi_user';
  • hak_akses adalah privileges yang akan berikan kepada user tersebut. Hak akses disini berisi query yang diperbolehkan, seperti: SELECT, INSERT, UPDATE, DELETE, atau query lainnya. Jika kita ingin memberikan hak penuh untuk semua query dasar tersebut, hak_akses ini bisa diisi dengan ALL.
  • nama_database adalah nama database yang ingin diberikan hak akses. Jika kita mengizinkan user tersebut dapat mengakses semua database yang ada, nama_database bisa ditulis dengan tanda bintang (*).
  • nama_tabel adalah nama tabel yang ingin diberikan hak akses. Jika kita mengizinkan user dapat menggunakan semua  tabel, nama_tabel bisa ditulis dengan tanda bintang (*).
  • nama_user adalah nama dari user yang akan diberikan hak akses.
  • lokasi_user adalah alamat IP dari user yang ingin diberikan hak akses.
Sebagai contoh penggunaan query GRANT, misalkan kita ingin memberikan privileges kepada Kholid untuk dapat melihat (melakukan query SELECT) pada tabel mahasiswa yang berada pada database akademik_stmikpalcomtech , maka berikut query yang kita gunakan:

Query diatas terdiri 2 bagian, pada bagian pertama kita membuat user Kholid yang harus diakses dari komputer localhost (komputer yang sama dengan server MySQL berada), dan memberikan password ‘12345’. Selanjutnya pada bagian kedua, kita memberikan hak akses dengan query GRANT pada untuk user Kholid .

Perhatikan penulisan query GRANT tersebut,  SELECT disini adalah hak akses yang ingin di berikan kepada user, saya memberikan hak SELECT karena user admin saat ini hanya dapat melakukan perintah SELECT.

Setelah SELECT, diikuti dengan penulisan tabel yang diperbolehkan, yakni akademik_stmikpalcomtech .mahasiswa (dibaca:tabel mahasiswa pada database akademik_stmikpalcomtech ). Bagian terakhir adalah user yang akan diberikan hak aksesnya, yakni Kholid pada localhost.

Untuk mencoba user Kholid , keluarlah dari root, dan masuk sebagai Kholid :

Dari contoh query diatas, dapat dilihat bahwa pada saat Kholid menjalankan perintah SHOW TABLES, ia hanya dapat melihat satu tabel, yakni tabel mahasiswa. Padahal dalam database tersebut kita juga telah membuat tabel mahasiswa, namun karena hak akses yang diberikan, Kholid hanya dapat melihat tabel yang diperbolehkan.

Setelah menampilkan isi tabel mahasiswa,  user Kholid mencoba menghapus tabel mahasiswa. Tetapi karena kita membatasi hak aksesnya, Kholid tidak dapat menjalankan query DELETE dan DROP, dan akan langsung ditolak oleh MySQL.


Cara Memberikan Hak Akses Untuk Seluruh Tabel

contoh kedua, kali ini kita akan membuat user mahasiswa yang diberikan hak akses untuk dapat melihat seluruh tabel yang ada pada database akademik_stmikpalcomtech , berikut querynya:

 

Pembuatan user ozie ini hampir sama dengan perintah saat membuat user Kholid. Kecuali kali ini untuk penulisan tabel kita menggunakan format akademik_stmikpalcomtech.* yang berarti dapat mengakses seluruh tabel pada database akademik_stmikpalcomtech.

Selanjutnya, kita akan mencoba menggunakan user ozie untuk melihat database akademik_stmikpalcomtech :

 

 
Dari hasil query diatas, terlihat bahwa user ozie dapat melihat terdapat 4 tabel dalam database akademik_stmikpalcomtech. Dan jika kita membuat sebuah tabel baru dalam database akademik_stmikpalcomtech, user ozie juga akan bisa melihatnya.

 

Cara Memberikan Seluruh Hak Akses (query GRANT ALL)

Dari kedua contoh user sebelumnya, yakni user Kholid dan ozie , kita hanya menggunakan hak akses SELECT. Kali ini kita akan memberikan hak akses penuh kepada user kholid_admin, dengan query GRANT ALL. Berikut querynya:
Dengan memberikan hak akses GRANT ALL, maka user kholid_admin dapat menggunakan seluruh query dasar pada tabel mahasiswa, seperti SELECT, UPDATE, bahkan DELETE. Sebagai latihan, silahkan mencoba masuk sebagai user kholid_admin dan lakukan perintah seperti UPDATE, DELETE, dan DROP.

Cara Memberikan Hak Akses MySQL Pada Level Kolom

Untuk keperluan yang lebih spesifik, hak akses dapat juga dibatasi hanya untuk kolom tertentu. Bahwa terdapat sebuah kolom yang dirasakan rahasia, dan tidak boleh diketahui user tersebut.
Misalkan kita membuat user tamu_pct yang hanya dapat melihat nama dan npm mahasiswa pada tabel mahasiswa, dan merahasiakan kolom lainnya seperti alamat dan jeniskelamin, maka berikut querynya:
Perhatikan cara penulisan kolom yang diberikan hak aksesnya, setelah hak akses (dalam contoh adalah SELECT), penulisan nama kolom harus berada dalam tanda kurung. Dapat dilihat bahwa kita memberikan hak akses hanya pada kolom nama dan npm untuk tabel mahasiswa.
Untuk mengujinya, masuklah sebagai user tamu_pct:
Pada saat user tamu_pct mencoba menampilkan seluruh kolom dengan query SELECT * FROM mahasiswa, MySQL akan mengeluarkan error karena user tamu_pct hanya memiliki hak akses untuk kolom nama dan npm saja, dimana pada saat menggunakan perintah SELECT NPM,NAMA_MHS  FROM mahasiswa, MySQL menampilkannya dengan baik.
Demikian tutorial Cara Membuat Hak Akses User MySQL dengan query GRANT ini, kita telah mempelajari cara memberikan hak akses untuk user.