Seandainya di panduan sebelumnya kita telah membahas cara membuat user dalam MySQL, Pada panduan kali ini kita akan membahas jenis-jenis hak akses yang ada pada MySQL. Hak akses ini nantinya digunakan bagi membatasi hak dari masing-masing user pada mengunakan MySQL.
Jenis Hak Akses Menurut Cakupan Akses Level
Seperti yang telah kita pelajari di panduan Cara Membuat Hak Akses (Privileges) User MySQL, bahwa MySQL menyediakan bermacam-macam tingkatan level hak akses. Setiap user dapat dibatasi bagi dapat mengakses bagus itu sebuah database tertentu saja, tabel tertentu, atau bahkan hanya kolom tertentu.
Seandainya didasarkan di pengelompokkan ini, kita dapat membagi hak akses MySQL menjadi 4 level tingkatan, yaitu:
1. Hak Akses Global (*.*)
Hak akses ini berarti user dapat mempunyai hak akses bagi seluruh database yang terdapat di pada MySQL. Contoh penulisan query GRANT bagi level ini yaitu:
1 |
GRANT SELECT ON *.* TO 'user'@'localhost'; |
Perhatikan cara penulisan nama_database.nama_tabel, dimana kita menulisnya dengan *.*, sehingga user tersebut dapat mengakses seluruh tabel di seluruh database.
2. Hak Akses Level Database (nama_database.*)
Hak akses ini berarti user mempunyai hak akses penuh bagi sebuah database. Contoh penulisan query GRANT bagi level database ini yaitu:
1 |
GRANT SELECT ON universitas.* TO 'user'@'localhost'; |
Bagi penulisan nama_database.nama_tabel, kita membatasi nama database, namun memberikan hak akses bagi seluruh tabel, penulisannya yaitu nama_database.*
3. Hak Akses Level Tabel (nama_database.nama_tabel)
Hak akses ini berarti user mempunyai hak akses bagi sebuah tabel yang berada di sebuah database. Contoh penulisan query GRANT bagi level ini yaitu:
1 |
GRANT SELECT ON universitas.mahasiswa_ilkom TO 'user'@'localhost'; |
Hak akses yang dimiliki user hanya terbatas di level sebuah tabel saja.
4. Hak Akses Level Kolom (nama_kolom)
Hak akses ini yaitu hak akses sangat kecil yang dapat diberikan kepada sebuah user. Dengan hak akses level kolom, user hanya mempunyai hak akses bagi beberapa kolom di sebuah tabel. Contoh penulisan query GRANT bagi level kolom ini yaitu:
1 |
GRANT SELECT (nama,umur) ON universitas.mahasiswa_ilkom TO 'user'@'localhost'; |
Level sangat ahir ini kita membatasi hak akses user hanya bagi kolom tertentu saja. Penulisan kolom yang diperbolehkan diletakkan di pada tanda kurung.
Tipe-Tipe Hak Akses pada MySQL
Bagi setiap level diatas, kita dapat memakai bermacam-macam tipe hak akses yang ingin diberikan, apakah itu hanya bagi melihat saja (query SELECT), menambahkan data (query INSERT), mengupdate data (query UPDATE), bahkan menghapus data (query DELETE).
Di tabel dibawah ini saya melampirkan seluruh tipe hak akses yang dapat diberikan/dibatasi bagi user. Tabel tersebut diambil seketika 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 bagi merubah tabel (ALTER TABLE) |
ALTER ROUTINE | Hak akses bagi merubah stored routines |
CREATE | Hak akses bagi membangun tabel dan database |
CREATE ROUTINE | Hak akses bagi membangun dan menghapus stored routine |
CREATE TABLESPACE | Hak akses bagi membangun, mengubah dan menghapus tablespaces dan log file |
CREATE TEMPORARYTABLES | Hak akses bagi membangun tabel sementara CREATE TEMPORARY TABLE |
CREATE USER | Hak akses bagi membangun, menghapus, dan mengubah user (CREATE USER, DROP USER, RENAME USER, dan REVOKE ALL PRIVILEGES) |
CREATE VIEW | Hak akses bagi membangun dan mengubah views |
DELETE | Hak akses bagi menghapus data (DELETE) |
DROP | Hak akses bagi menghapus database, tabel dan view |
EVENT | Hak akses bagi membangun event |
EXECUTE | Hak akses bagi menjalankan stored routines |
FILE | Hak akses bagi membangun server membaca maupun membangun file |
GRANT OPTION | Hak akses bagi memberikan hak akses kepada user lainnya. |
INDEX | Hak akses bagi membangun dan menghapus index |
INSERT | Hak akses bagi menambahkan data (query INSERT) |
LOCK TABLES | Hak akses bagi mengunci tabel (LOCK TABLES) |
PROCESS | Hak akses bagi melihat seluruh proses (SHOW PROCESSLIST) |
PROXY | Hak akses bagi proses proxy |
REFERENCES | Belum diimplementasikan |
RELOAD | Hak akses bagi operasi FLUSH |
REPLICATION CLIENT | Hak akses bagi mengubah urutan master dan slave server |
REPLICATION SLAVE | Hak akses bagi server replikasi bagi membaca log event biner dari server master |
SELECT | Hak akses bagi melihat data (query SELECT) |
SHOW DATABASES | Hak akses bagi melihat seluruh database (SHOW DATABASES) |
SHOW VIEW | Hak akses bagi melihat perancangan view (SHOW CREATE VIEW) |
SHUTDOWN | Hak akses bagi mysqladmin shutdown |
SUPER | Hak akses bagi guna administrasi server, seperti CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, dan command debug mysqladmin |
TRIGGER | Hak akses bagi operasi trigger |
UPDATE | Hak akses bagi memperbaharui data (UPDATE) |
USAGE | Sama artinya dengan tanpa hak akses |
Pengertian Hak Akses GRANT ALL
Di panduan Cara Membangun Hak Akses (Privileges) User MySQL dengan query GRANT, kita telah melihat penulisan hak akses GRANT ALL. Namun sesungguhnya apa saja hak akses yang dapat dilakukan dengan GRANT ALL? Dan apa saja hak akses lainnya?
GRANT ALL yaitu cara penyingkatan memberikan hampir seluruh hak akses kepada sebuah user tertentu. Hak akses ini melingkupi seluruh query basic:
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.
Sebahagian besar hak akses diatas belum kita bahas, namun ini dapat menjadi referensi kalau kamu memberikan hak akses dengan GRANT ALL kepada sebuah user.
Bagi lebih memahami cara perancangan user dan hak aksesnya, saya akan memberikan beberapa contoh, dan kalau kamu telah mempelajari panduan sebelumnya, contoh disini akan gampang dimengerti.
1. Buatlah user ‘dosen_ilkom’ yang dapat melihat, merubah dan menambahkan data ke tabel mahasiswa_ilkom, namun tak dapat menghapus data yang terdapat. User tersebut hanya dapat diakses dari localhost.
Berikut yaitu query yang dibutuhkan:
1 |
]mysql> CREATE USER 'dosen_ilkom'@'localhost' IDENTIFIED BY 'r4hasia';<br/>Query OK, 0 rows affected (0.00 sec)<br/><br/>mysql> GRANT SELECT,INSERT,UPDATE ON universitas.mahasiswa_ilkom <br/>TO 'dosen_ilkom'@'localhost';<br/>Query OK, 0 rows affected (0.07 sec) |
2. Buatlah user ‘sensus_ilkom’ yang dapat melihat seluruh tabel di pada database mahasiswa_ilkom, namun hanya di kolom nim, nama, dan umur. User tersebut akan mengakses database dari IP 192.168.0.4 .
Berikut yaitu query yang dibutuhkan:
1 |
]mysql> CREATE USER 'sensus_ilkom'@'192.168.0.4' IDENTIFIED BY 'r4hasia';<br/>Query OK, 0 rows affected (0.00 sec)<br/><br/>mysql> GRANT SELECT(nim,nama,umur) ON universitas.mahasiswa_ilkom <br/>TO 'sensus_ilkom'@'192.168.0.4';<br/>Query OK, 0 rows affected (0.00 sec) |
3. Buatlah user ’admin_kampus’ yang dapat mengedit, membangun, dan menghapus tabel pada database universitas, namun tak dapat mengerjakan manipulasi data di pada tabel tersebut. User ini dapat diakses dari komputer manapun.
Berikut yaitu query yang dibutuhkan:
1 |
]mysql> CREATE USER 'admin_kampus'@'%' IDENTIFIED BY 'r4hasia';<br/>Query OK, 0 rows affected (0.00 sec)<br/><br/>mysql> GRANT CREATE,DROP,ALTER ON universitas.* TO 'admin_kampus'@'%';<br/>Query OK, 0 rows affected (0.00 sec) |
Pada menyusun program yang memerlukan database MySQL, pembatasan hak akses seperti diatas memerlukan seni tersendiri. Permasalahan muncul kalau tiba-tiba user yang telah dibatasi ternyata memerlukan akses ke tabel lain. Kita sebaiknya telah memperkirakan level apa saja yang dapat diakses oleh user tertentu dan di tabel apa saja sebelum program direlease.
Seandainya kamu membangun program, biasanya pengguna tak akan diberikan akses seketika dengan MySQL Server, namun kita biasanya akan memandu pengguna lewat interface lainnya seperti halaman web (bagi situs online) atau form visual basic (bagi program desktop). Pada program web, kode PHPlah (atau lebih tepatnya: web server) yang mengakses MySQL, pengguna hanya dihadapkan di halaman form laman.
Bagi hal keamanan database, Seandainya kamu telah membatasi hak akses pengguna di level PHP, hal tersebut dapat dinamakan telah lumayan. Namun kalau terdapat kemungkinan pengguna mengakses MySQL Server secara seketika, kita sedapat mungkin telah mengantisipasinya dengan membangun user berlapis (dari kode PHP dan dari pada MySQL).
Pada panduan berikutnya, kita akan membahas cara melihat daftar user MySQL dan hak aksesnya dengan query SHOW GRANTS FOR.
Sumber https://www.duniailkom.com/