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 Akses | Keterangan |
---|---|
ALL [PRIVILEGES] | Memberikan seluruh hak akses, kecuali GRANT OPTION |
ALTER | Hak akses untuk merubah tabel (ALTER TABLE) |
ALTER ROUTINE | Hak akses untuk merubah stored routines |
CREATE | Hak akses untuk membuat tabel dan database |
CREATE ROUTINE | Hak akses untuk membuat dan menghapus stored routine |
CREATE TABLESPACE | Hak akses untuk membuat, mengubah dan menghapus tablespaces dan log file |
CREATE TEMPORARYTABLES | Hak akses untuk membuat tabel sementara CREATE TEMPORARY TABLE |
CREATE USER | Hak akses untuk membuat, menghapus, dan mengubah user (CREATE USER, DROP USER, RENAME USER, dan REVOKE ALL PRIVILEGES) |
CREATE VIEW | Hak akses untuk membuat dan mengubah views |
DELETE | Hak akses untuk menghapus data (DELETE) |
DROP | Hak akses untuk menghapus database, tabel dan view |
EVENT | Hak akses untuk membuat event |
EXECUTE | Hak akses untuk menjalankan stored routines |
FILE | Hak akses untuk membuat server membaca maupun membuat file |
GRANT OPTION | Hak akses untuk memberikan hak akses kepada user lainnya. |
INDEX | Hak akses untuk membuat dan menghapus index |
INSERT | Hak akses untuk menambahkan data (query INSERT) |
LOCK TABLES | Hak akses untuk mengunci tabel (LOCK TABLES) |
PROCESS | Hak akses untuk melihat seluruh proses (SHOW PROCESSLIST) |
PROXY | Hak akses untuk proses proxy |
REFERENCES | Belum diimplementasikan |
RELOAD | Hak akses untuk operasi FLUSH |
REPLICATION CLIENT | Hak akses untuk mengubah urutan master dan slave server |
REPLICATION SLAVE | Hak akses untuk server replikasi untuk membaca log event biner dari server master |
SELECT | Hak akses untuk melihat data (query SELECT) |
SHOW DATABASES | Hak akses untuk melihat seluruh database (SHOW DATABASES) |
SHOW VIEW | Hak akses untuk melihat pembuatan view (SHOW CREATE VIEW) |
SHUTDOWN | Hak akses untuk mysqladmin shutdown |
SUPER | Hak akses untuk fungsi administrasi server, seperti CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, dan perintah debug mysqladmin |
TRIGGER | Hak akses untuk operasi trigger |
UPDATE | Hak akses untuk memperbaharui data (UPDATE) |
USAGE | Sama 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.
Assalamu'alaikum…
Mau tanya, kalau seperti form signup atau form login dsb. banyak kita temukan di beberapa situs, itu sebenarnya termasuk di hak akses user jenis yang mana ya?
Terimakasih
Wa'alaikumsalam mas,..
Kalau ditanya hak user jenis yang mana, itu tergantung kepada si pembuat situs mas (yang membuat kode programnya).
Kalau yang login si pemilik situs, pastinya dia punya hak untuk mengakses seluruh database, tapi kalau sebagai user "tamu", dia hanya bisa melihat-lihat tabel saja. Lain lagi kalau situsnya memiliki pembagian tugas seperti editor, publisher, reviewer ,dll.
Bahkan kebanyakan pada saat registrasi/login di situs, tidak dibuat user MySQL baru, tetapi hanya sebagai "penanda" saja. Mengenai hal ini lebih banyak melibatkan bahasa pemrograman PHP mas :)
Mau nanya dong kalo Hak akses level kolom tapi hak Aksesnya lebih dari satu bisa gak ea
Misal : GRANT SELECT,UPDATE (nama,umur) ON universitas.mahasiswa_ilkom TO 'user'@'localhost';
Kalo kayak gitu bisa gak ea ? Takcoba SELECT tapi hasilnya kok malah semua kolom di tampilkan
Makasi
Setahu saya di MySQL memang tidak bisa membatasi hak akses di level kolom gan. Kita hanya bisa membatasi hak akses di level tabel.
OK2 Maksi,Makasi Juga uda ngebuat Tutorial yang keren2 abis hehhehehe :-)
Thanks bgt
Siip, sama2 gan…
assalamualaikum mau nanya..
untuk mengakses database server berati harus terhubung dalam satu jaringan dong?
lalu apakah ada cara lain untuk mengakses database server tapi di aplikasi server tidak menyediakan api nya?
Waalaikumsalam…
Betul, harus terkoneksi melalui jaringan agar bisa mengakses mysql server. Tapi jaringan ini tidak harus berupa kabel, internet juga salah satu bentuk jaringan. Isi website duniailkom ini juga berada di dalam database, dan bisa diakses selama tau alamat IP, username dan passwordnya.
Setahu saya setiap database modern sudah punya API. Soalnya database ini tidak bisa berdiri sendiri, harus ada bahasa pemrograman yang dipakai untuk mengaksesnya (dan ini harus pakai API). Misalnya antara MySQL dengan PHP, APInya adalah mysqli extension. Kecuali jika kita tidak diberi akses untuk menggunakan API itu.
Assalamu'alaikum. Maaf mau tanya kalo query di mysql buat menggunakan user nya gimana ya?. Misal saya sudah buat user terus saya ingin menggunakan user tersebut pada database saya
Waalaikumsalam… Untuk pindah ke user lain, caranya sama seperti login biasa, penjelasannya bisa kesini: https://www.duniailkom.com/tutorial-mysql-menjalankan-mysql-client/
Izin save post ya min, buat sumber belajar dan pembuatan laporan…. terimakasih sudah menjelaskan sedemikian bagus..
Siip, semoga bisa bermanfaat…
Assalamu'alaikum…
Mohon izin mau tanya, Saya punya sebuah tabel data yang didalam baris nya berisikan data user dan saya ingin membuat hak akses user yang hanya bisa melihat baris yang ada nama user tersebut saja. Mohon petunjuk untuk query nya…..
Terima Kasih
Waalaikumsalam, sepertinya ini lebih cocok ke aplikasi (di buat dengan PHP). Silahkan pelajari cara pembuatan manajemen user di PHP, termasuk penggunaan cookie dan session.