June 16, 2026
Siapa yang Boleh Ngapain di Database Kamu? — Jangan terlalu di iniin apasih namanya
Ini sihh, katanya ada tiga GRANT, REVOKE, sama RBAC — buat itu pokoknya biar nggak di acak acak anonimus
Huddin
4 min read
[📌] Seperti biasa aku udah iniin querynya di bawah, jadi kalian tinggal itunya di kalau mau arghhhhhh qwertyuiop
Udah udah nanti malah gajelas jelasinnya. Enjoy reading, y'all! 🍵📦
Bayangin kamu punya toko. Karyawan kasir boleh lihat harga dan transaksi, tapi kamu nggak mau mereka bisa hapus produk atau ubah stok sembarangan. Nah, database juga perlu aturan kayak gitu.
SQL punya sembilan hak akses yang bisa diatur: SELECT, INSERT, DELETE, UPDATE, REFERENCES, USAGE, TRIGGER, EXECUTE, dan UNDER
Setup Database Dulu
CREATE DATABASE db_kampus;
USE db_kampus;
-- Tabel mahasiswa
CREATE TABLE mahasiswa (
nim CHAR(10) PRIMARY KEY,
nama VARCHAR(50),
jurusan VARCHAR(30)
);
-- Tabel matakuliah
CREATE TABLE matakuliah (
kode_mk CHAR(6) PRIMARY KEY,
nama_mk VARCHAR(50),
sks INT
);
-- Tabel dosen
CREATE TABLE dosen (
nip CHAR(10) PRIMARY KEY,
nama VARCHAR(50),
bidang VARCHAR(30)
);CREATE DATABASE db_kampus;
USE db_kampus;
-- Tabel mahasiswa
CREATE TABLE mahasiswa (
nim CHAR(10) PRIMARY KEY,
nama VARCHAR(50),
jurusan VARCHAR(30)
);
-- Tabel matakuliah
CREATE TABLE matakuliah (
kode_mk CHAR(6) PRIMARY KEY,
nama_mk VARCHAR(50),
sks INT
);
-- Tabel dosen
CREATE TABLE dosen (
nip CHAR(10) PRIMARY KEY,
nama VARCHAR(50),
bidang VARCHAR(30)
);Bikin Pengguna Baru
Kita buat tiga user dengan password masing-masing. Nanti masing-masing dapat hak akses yang beda
CREATE USER 'user_admin'@'localhost' IDENTIFIED BY 'admin123';
CREATE USER 'user_mhs'@'localhost' IDENTIFIED BY 'mhs123';
CREATE USER 'user_dosen'@'localhost' IDENTIFIED BY 'dosen123';CREATE USER 'user_admin'@'localhost' IDENTIFIED BY 'admin123';
CREATE USER 'user_mhs'@'localhost' IDENTIFIED BY 'mhs123';
CREATE USER 'user_dosen'@'localhost' IDENTIFIED BY 'dosen123';✅ GRANT
Kasih hak akses ke pengguna. Bisa spesifik per tabel, atau all privileges sekaligus
🚫 REVOKE
Cabut hak akses yang udah dikasih. User langsung nggak bisa jalankan perintah itu lagi
-- user_admin dapat akses penuh ke seluruh db_kampus
GRANT ALL PRIVILEGES ON db_kampus.* TO 'user_admin'@'localhost';
-- user_mhs hanya boleh SELECT tabel matakuliah
GRANT SELECT ON db_kampus.matakuliah TO 'user_mhs'@'localhost';
-- Cabut akses user_mhs dari matakuliah
REVOKE SELECT ON db_kampus.matakuliah FROM 'user_mhs'@'localhost';-- user_admin dapat akses penuh ke seluruh db_kampus
GRANT ALL PRIVILEGES ON db_kampus.* TO 'user_admin'@'localhost';
-- user_mhs hanya boleh SELECT tabel matakuliah
GRANT SELECT ON db_kampus.matakuliah TO 'user_mhs'@'localhost';
-- Cabut akses user_mhs dari matakuliah
REVOKE SELECT ON db_kampus.matakuliah FROM 'user_mhs'@'localhost';Setelah REVOKE, kalau user_mhs coba SELECT matakuliah lagi, MySQL langsung tolak dengan pesan Access Denied
RBAC — Atur Akses Pakai Role (Kesukaan suki)
Kalau pengguna makin banyak, ngatur satu-satu bakal capek. Makanya ada Role-Based Access Control (RBAC): kamu bikin sebuah "peran", kasih hak akses ke peran itu, lalu tinggal assign perannya ke user
-- Buat role untuk dosen
CREATE ROLE 'role_dosen';
-- Role dosen boleh SELECT & INSERT ke tabel mahasiswa
GRANT SELECT, INSERT ON db_kampus.mahasiswa
TO 'role_dosen';
-- Berikan role ke user_dosen
GRANT 'role_dosen' TO 'user_dosen'@'localhost';
-- Aktifkan sebagai role default saat login
SET DEFAULT ROLE 'role_dosen' TO 'user_dosen'@'localhost';-- Buat role untuk dosen
CREATE ROLE 'role_dosen';
-- Role dosen boleh SELECT & INSERT ke tabel mahasiswa
GRANT SELECT, INSERT ON db_kampus.mahasiswa
TO 'role_dosen';
-- Berikan role ke user_dosen
GRANT 'role_dosen' TO 'user_dosen'@'localhost';
-- Aktifkan sebagai role default saat login
SET DEFAULT ROLE 'role_dosen' TO 'user_dosen'@'localhost';Dengan RBAC, kalau ada dosen baru tinggal assign role_dosen — nggak perlu ulang semua perintah GRANT dari awal
Sebenernya juga role ini kayak lapisan kedua dari backend kalau di website, misal aku pakai NextJs terus ada yang nembus backend, nah di database mungkin nggak bisa nembus karena ada role ini
Tapi biasanya kalo udah expert itu bakal bisa ada dua kunci, kunci public misalnya Public API itu terbatas, terus yang Privat itu cuma dimiliki sama orang dalam
Pengujian — Cek Apakah Akses Berjalan
Setelah semua diatur, saatnya verifikasi. Login pakai masing-masing user dan coba perintah yang boleh dan yang nggak boleh
user_mhs
SELECT matakuliah → harusnya berhasil (sebelum REVOKE). SELECT mahasiswa & INSERT → harus ditolak
user_dosen
SELECT & INSERT mahasiswa → harusnya berhasil. SELECT dosen → harus ditolak
user_admin
Semua akses (DROP TABLE, CREATE TABLE, dll.) → harus berhasil semua
Ini lumayan tricky kalo beberapa kasus kalian bakal error, aku biasanya milih buat ganti nama role, database, atau bahkan install ulang
Sesi Tugas
Soal yang harus dikerjakan:
- Buat role baru:
role_keuanganyang hanya bisa SELECT dan UPDATE pada tabeltagihan - Buat user baru:
user_keu, lalu tetapkanrole_keuanganke user tersebut - Uji coba: pastikan user hanya bisa lihat dan ubah data — tapi tidak bisa INSERT atau DELETE
Oke langsung aja kita buat tabel tambahannya
-- Buat tabel tagihan dulu buat contoh
CREATE TABLE tagihan (
id_tagihan INT PRIMARY KEY AUTO_INCREMENT,
nim CHAR(10),
nominal INT,
status VARCHAR(20)
);-- Buat tabel tagihan dulu buat contoh
CREATE TABLE tagihan (
id_tagihan INT PRIMARY KEY AUTO_INCREMENT,
nim CHAR(10),
nominal INT,
status VARCHAR(20)
);
Kemudian kita menuju ke pertama
-- 1. Buat role keuangan
CREATE ROLE 'role_keuangan';
GRANT SELECT, UPDATE ON db_kampus.tagihan
TO 'role_keuangan';-- 1. Buat role keuangan
CREATE ROLE 'role_keuangan';
GRANT SELECT, UPDATE ON db_kampus.tagihan
TO 'role_keuangan';
Lanjut ke soal kedua
-- 2. Buat user baru untuk bagian keuangan
CREATE USER 'user_keu'@'localhost' IDENTIFIED BY 'keu123';
-- Berikan role_keuangan ke user_keu
GRANT 'role_keuangan' TO 'user_keu'@'localhost';
-- Set sebagai role default saat user_keu login
SET DEFAULT ROLE 'role_keuangan' TO 'user_keu'@'localhost';-- 2. Buat user baru untuk bagian keuangan
CREATE USER 'user_keu'@'localhost' IDENTIFIED BY 'keu123';
-- Berikan role_keuangan ke user_keu
GRANT 'role_keuangan' TO 'user_keu'@'localhost';
-- Set sebagai role default saat user_keu login
SET DEFAULT ROLE 'role_keuangan' TO 'user_keu'@'localhost';
Kemudian untuk login user_keu kita bikin dua pilihan
-- Windows pakai mysql
SET DEFAULT ROLE 'role_keuangan' TO 'user_keu'@'localhost';
-- Linux pakai mariadb
SET DEFAULT ROLE 'role_keuangan';-- Windows pakai mysql
SET DEFAULT ROLE 'role_keuangan' TO 'user_keu'@'localhost';
-- Linux pakai mariadb
SET DEFAULT ROLE 'role_keuangan';
Ok sekarang kita sia login sebagai user_keu, ayo exit dulu
exitexit
Kemudian kita masuk
# Windows
mysql -u user_keu -p
# Linux
mariadb -u user_keu -p# Windows
mysql -u user_keu -p
# Linux
mariadb -u user_keu -p
Langkah tambahan kalau kamu tetap nggak bisa akses db_kampus, cobain set rolenya ke role_keuangan
Terakhir kita tes
-- A. Harusnya BERHASIL (Melihat & Mengubah data)
SELECT * FROM db_kampus.tagihan;
UPDATE db_kampus.tagihan SET status = 'Lunas' WHERE nim = '123456';-- A. Harusnya BERHASIL (Melihat & Mengubah data)
SELECT * FROM db_kampus.tagihan;
UPDATE db_kampus.tagihan SET status = 'Lunas' WHERE nim = '123456';
-- B. Harusnya DITOLAK / Error Access Denied (Menambah & Menghapus data)
INSERT INTO db_kampus.tagihan (nim, nominal, status) VALUES ('123456', 500000, 'Belum Lunas');
DELETE FROM db_kampus.tagihan WHERE nim = '123456';-- B. Harusnya DITOLAK / Error Access Denied (Menambah & Menghapus data)
INSERT INTO db_kampus.tagihan (nim, nominal, status) VALUES ('123456', 500000, 'Belum Lunas');
DELETE FROM db_kampus.tagihan WHERE nim = '123456';
Akhirnya Kita Sampai di akhir halaman
Intinya User Access itu bisa membatasi hak akses setiap pengguna. Kabarin kalo kodenya udah berjalan ya
Kalau ada pertanyaan, langsung aja tulis di kolom komentar. Aku Huddin, ngucapin terimakasih sudah baca sampai akhir. Sampai jumpa kembali minggu depan! _I'm out_👋😎