How to protect your Database from wild Suki
Sebuah database yang besar umumnya menyimpan berbagai data krusial. Data-data tersebut harusnya dilindungi dari pihak-pihak yang berpotensi…
How to protect your Database from wild Suki
photo by Chiky Boyboi
Sebuah database yang besar umumnya menyimpan berbagai data krusial. Data-data tersebut harusnya dilindungi dari pihak-pihak yang berpotensi tidak bertanggung jawab. Sebagai contoh pada sebuah database perusahaan di Ngawi memiliki berbagai data tertentu misalnya data keuangan dan data karyawan. Data-data tersebut harusnya bersifat sangat rahasia bahkan bagi seseorang yang menjadi bagian dari perusahaan. Misalnya devisi keuangan seharusnya atau umumnya tidak diperbolehkan mengubah data karyawan. Sementara HRD juga tidak diperbolehkan mengubah data keuangan. Lalu bagaimana cara mengatur hak akses tiap orang yang ada pada perusahaan tersebut?
A. Membuat Database
Langkah pertama adalah membuat database dan gunakan Database tersebut
-- Membuat database
CREATE DATABASE db_kampus;
-- Gunakan Database tersebut
USE db_kampus;

photo by Zidane Arrizqi Akmal
B. Membuat Tabel
Sebagai contoh, ada beberapa tabel yang perlu dibuat. Kira-kira seperti ini
-- Membuat tabel mahasiswa
CREATE TABLE mahasiswa (
nim CHAR(10) PRIMARY KEY,
nama VARCHAR(50),
jurusan VARCHAR(30)
);

photo by Zidane Arrizqi Akmal
-- Membuat tabel mata kuliah
CREATE TABLE matakuliah (
kode_mk CHAR(6) PRIMARY KEY,
nama_mk VARCHAR(50),
sks INT
);

photo by Zidane Arrizqi Akmal
-- Membuat tabel dosen
CREATE TABLE dosen (
nip CHAR(10) PRIMARY KEY,
nama VARCHAR(50),
bidang VARCHAR(30)
);

photo by Zidane Arrizqi Akmal
C. Mengisi Tabel
Setelah membuat tabel di atas, langkah selanjutnya adalah dengan mengisi tabel tersebut menggunakan data dummy (data fiktif yang menyerupai informasi asli)
-- Mengisi tabel data mahasiswa
INSERT INTO mahasiswa VALUES
('2505060041', 'Irkham', 'Teknologi Informasi'),
('2505060042', 'Indra', 'Teknologi Informasi'),
('2505060054', 'Akmal', 'Teknologi Informasi'),
('2505060067', 'Fauzan', 'Teknologi Informasi');

photo by Zidane Arrizqi Akmal
-- Mengisi tabel data mata kuliah
INSERT INTO matakuliah VALUES
('111111', 'basis data', 3),
('222222', 'struktur data', 3),
('333333', 'aljabar linier', 2),
('444444', 'paradigma sistem', 2);

photo by Zidane Arrizqi Akmal
-- Mengisi tabel data dosen
INSERT INTO dosen VALUES
('1000000001', 'Amba', 'Digital Creative'),
('2000000002', 'Faiz', 'Administratif'),
('3000000003', 'Rusdi', 'Perlengkapan Praktikum'),
('4000000004', 'Nasir', 'Database Management');

photo by Zidane Arrizqi Akmal
D. User Management
Untuk langkah selanjutnya adalah membuat pengguna. Dalam kasus ini, ada 3 pengguna yang diperlukan yaitu admin, mahasiswa dan dosen. Untuk command yang akan digunakan memiliki sebuah struktur. Kira-kira seperti ini :
Struktur kode:
CREATE USER 'user_admin' @ 'localhost' IDENTIFIED BY 'admin123';
^ ^ ^ ^ ^ ^
| | | | | |
Membuat User Nama User Pemisah alamat Menentukan Password
asal koneksi Password
-- Membuat user dengan status admin
CREATE USER 'user_admin'@'localhost' IDENTIFIED BY 'admin123';

photo by Zidane Arrizqi Akmal
-- Membuat user dengan status mahasiswa
CREATE USER 'user_mhs'@'localhost' IDENTIFIED BY 'mhs123';

photo by Zidane Arrizqi Akmal
-- Membuat user dengan status dosen
CREATE USER 'user_dosen'@'localhost' IDENTIFIED BY 'dosen123';

photo by Zidane Arrizqi Akmal
E. Mengatur Hak Akses tiap User
Pada perintah SQL, Mengatur Hak Akses memiliki 2 maksut yaitu memberi Hak Akses (GRANT) dan Mencabut Hak Akses (REVOKE). Untuk contohnya kira-kira seperti ini :
-- Memberi akses tak terbatas pada Admin
GRANT ALL PRIVILEGES ON db_kampus.* TO 'user_admin'@'localhost';

photo by Zidane Arrizqi Akmal
-- Memberi akses ke tabel mata kuliah kepada mahasiswa
GRANT SELECT ON db_kampus.matakuliah TO 'user_mhs'@'localhost';

photo by Zidane Arrizqi Akmal
-- Menghalangi akses ke tabel mata kuliah kepada mahasiswa
REVOKE SELECT ON db_kampus.matakuliah FROM 'user_mhs'@'localhost';

photo by Zidane Arrizqi Akmal
F. Pemberian akses kepada user yang memiliki status sama
Pada sebuah database yang memiliki banyak user seperti database universitas, memberi akses kepada masing-masing user akan memakan waktu, analoginya seperti pihak dosen yang membagikan kertas ujian sendirian ke seluruh murid yang mengikuti ujian, itu akan sangat memakan waktu. Agar mempersingkat waktu, ada sebuah fitur yang dapat digunakan yaitu Role-Based Access Control (RBAC) adalah metode pengaturan hak akses di database yang berbasis peran , bukan langsung diberikan ke user individu. Alih-alih memberikan izin satu per satu ke setiap user, RBAC membuat Role yaitu dengan memberikan kumpulan izin ke role tersebut, lalu role itu diberikan ke user. Untuk contoh kodenya kira-kira seperti ini :
-- Membuat role untuk dosen
CREATE ROLE 'for_dosen';

photo by Zidane Arrizqi Akmal
-- Mengatur hak akses yang dimiliki role dosen
GRANT SELECT, INSERT ON db_kampus.mahasiswa TO 'for_dosen';

photo by Zidane Arrizqi Akmal
-- Memasukkan dosen ke rolenya
GRANT 'for_dosen' TO 'user_dosen'@'localhost';

photo by Zidane Arrizqi Akmal
-- Mengatur role mana yang akan aktif secara otomatis setiap kali user login
SET DEFAULT ROLE 'for_dosen' FOR 'user_dosen'@'localhost';

photo by Zidane Arrizqi Akmal
Kira-kira, sistem keamanan telah selesai dibuat. Untuk menguji apakah Sistem Keamanan ini bekerja, maka dapat dilakukan beberapa tes sederhana. Namun sebelum melakukan test, dapat terlebih dahulu log out dari akun user dengan cara seperti ini :
quit

photo by Zidane Arrizqi Akmal
Setelah keluar, maka test bisa dimulai. Ada beberapa test yang dapat dilakukan, kira-kira seperti ini :
A. Menguji Hak Akses mahasiswa
Untuk melakukan pengujian ini, diharuskan untuk login terlebih dahulu ke user tersebut. Kira-kira seperti ini :
-- Login ke user mahasiswa dengan password yang sudah ditentukan
mysql -u user_mhs -p

photo by Zidane Arrizqi Akmal
-- Menguji apakah mahasiswa dapat mengakses tabel mata kuliah
SELECT * FROM db_kampus. matakuliah;

photo by Zidane Arrizqi Akmal
-- Menguji apakah mahasiswa dapat mengakses tabel mahasiswa
SELECT * FROM db_kampus.mahasiswa;

photo by Zidane Arrizqi Akmal
-- Menguji apakah mahasiswa dapat menambahkan data ke tabel mata kuliah
INSERT INTO db_kampus.matakuliah VALUES ('555555', 'Sejarah Ngawi', 3);

photo by Zidane Arrizqi Akmal
B. Menguji Hak Akses dosen
Sebelum melakukan pengujian ini, terdapat langkah yang sama yang harus dijalani yaitu log out dari user mahasiswa. Cara yang digunakan masih dengan cara yang sama.
Setelah melakukan log out, dapat melakukan log in dengan user dosen dengan cara yang mirip yaitu :
-- Login ke user dosen dengan password yang sudah ditentukan
mysql -u user_dosen -p

photo by Zidane Arrizqi Akmal
-- Menguji apakah dosen dapat mengakses tabel mahasiswa
SELECT * FROM db_kampus.mahasiswa;

photo by Zidane Arrizqi Akmal
-- Menguji apakah dosen dapat menambahkan data ke tabel mahasiswa
INSERT INTO db_kampus.mahasiswa VALUES
('2505060053', 'Fatkhan', 'Teknologi Informasi');

photo by Zidane Arrizqi Akmal
-- Menguji apakah dosen dapat mengakses tabel dosen
SELECT * FROM db_kampus.dosen;

photo by Zidane Arrizqi Akmal
C. Menguji Hak Akses admin
Sebelum melakukan pengujian ini, terdapat langkah yang sama yang harus dijalani yaitu log out dari user dosen. Cara yang digunakan masih dengan cara yang sama.
Setelah melakukan log out, dapat melakukan log in dengan user admin dengan cara yang mirip yaitu :
-- Login ke user admin dengan password yang sudah ditentukan
mysql -u user_admin -p

photo by Zidane Arrizqi Akmal
-- Menambahkan tabel ke database
CREATE TABLE db_kampus.temp_tabel (id INT);

photo by Zidane Arrizqi Akmal
-- Menghapus tabel pada database kampus
DROP TABLE IF EXISTS temp_tabel;

photo by Zidane Arrizqi Akmal
Pada ahir dari artikel ini, terdapat beberapa soal yang dosen berikan kepada saya. Seperti apa soalnya?
- Buat role baru: role_keuangan yang hanya bisa SELECT dan UPDATE tabel tagihan.
- Buat user baru: user_keu, dan tetapkan role tersebut padanya.
- Uji coba: pastikan user hanya bisa melihat dan mengubah data, tapi tidak bisa insert dan delete
Untuk mengerjakan soal tersebut, diperlukan beberapa langkah
Untuk menjawab soal nomor 1
Jadi ada beberapa langkah yang harus dilakukan untuk menjawab soal ini, diantaranya :
-- Membuat tabel tagihan
CREATE TABLE tagihan (
tagihan INT(50) PRIMARY KEY,
keterangan VARCHAR(30)
);

photo by Zidane Arrizqi Akmal
-- Masukkan data dummy
INSERT INTO tagihan VALUES
(100000, 'beli sabun lantai'),
(150000, 'beli sabun cuci tangan');

photo by Zidane Arrizqi Akmal
-- Membuat role untuk user keuangan
CREATE ROLE 'for_keuangan';

photo by Zidane Arrizqi Akmal
-- Menentukan hak akses role keuangan
GRANT SELECT, UPDATE ON db_kampus.tagihan TO 'for_keuangan';

photo by Zidane Arrizqi Akmal
Untuk menjawab soal nomor 2
-- Membuat user dengan status keuangan
CREATE USER 'user_keu'@'localhost' IDENTIFIED BY 'keu123';

photo by Zidane Arrizqi Akmal
-- Memasukkan keuangan ke rolenya
GRANT 'for_keuangan' TO 'user_keu'@'localhost';

photo by Zidane Arrizqi Akmal
-- Mengatur role mana yang akan aktif secara otomatis setiap kali user login
SET DEFAULT ROLE 'for_keuangan' FOR 'user_keu'@'localhost';

photo by Zidane Arrizqi Akmal
Untuk menjawab soal nomor 3
Setelah membuat user dan rolenya, kita bisa menguji apakah hak akses user keuangan sesuai dengan yang ada di soal yaitu hanya bisa SELECT dan UPDATE atau tidak mampu menambahkan maupun menghapus. Namun perlu diingat, sebelum melakukan pengujian diharuskan keluar atau log out dari user yang barusaja digunakan untuk mengedit. Caranya masih sama seperti sebelumnya lalu dapat dilakukan log in setelah itu
-- Log In pada user keuangan
mysql -u user_keu -p

photo by Zidane Arrizqi Akmal
--- Uji SELECT
SELECT * FROM db_kampus.tagihan;

photo by Zidane Arrizqi Akmal
-- Uji UPDATE
UPDATE db_kampus.tagihan SET tagihan = 200000
WHERE keterangan = 'beli sabun cuci tangan';

photo by Zidane Arrizqi Akmal
-- Uji INSERT
INSERT INTO db_kampus.tagihan VALUES
(3000000, 'beli fullset PC Gaming');

photo by Zidane Arrizqi Akmal
-- Uji DELETE
DELETE FROM db_kampus.tagihan
WHERE keterangan = 'beli sabun cuci tangan';

photo by Zidane Arrizqi Akmal
메타데이터
- post_id
- dd02e7e89016
- slug
- how-to-protect-your-database-from-wild-suki-dd02e7e89016
- url
- https://medium.com/@Akmal_Zidan/how-to-protect-your-database-from-wild-suki-dd02e7e89016
- canonical_url
- https://medium.com/@Akmal_Zidan/how-to-protect-your-database-from-wild-suki-dd02e7e89016
- author_url
- https://medium.com/@Akmal_Zidan
- status
- ok
- fetched_at
- 2026-07-10 05:19:05