Proyek ini merupakan demonstrasi praktis dari implementasi Keamanan Basis Data dan Kontrol Hak Akses menggunakan Data Control Language (DCL) pada Sistem Manajemen Basis Data (SMBD) Firebird SQL.
Tujuan utama dari proyek ini adalah untuk menyimulasikan skenario di mana beberapa pengguna dengan peran yang berbeda berinteraksi dengan basis data yang sama. Setiap pengguna diberikan hak akses yang spesifik sesuai dengan tanggung jawabnya, seperti melihat, menambah, mengubah, dan menghapus data. Proyek ini mencakup:
- Pembuatan User: Membuat akun pengguna yang terpisah.
- Pemberian Hak Akses (GRANT): Memberikan izin spesifik pada level tabel dan kolom.
- Pencabutan Hak Akses (REVOKE): Menarik kembali izin yang telah diberikan.
- Simulasi Akses: Menguji efektivitas aturan keamanan yang telah diterapkan dengan login sebagai setiap pengguna.
Sebelum memulai, pastikan perangkat lunak berikut telah terpasang di sistem operasi Windows Anda.
Perangkat Lunak | Tautan Unduhan | Catatan |
---|---|---|
Firebird 5.0 | firebirdsql.org | Mesin basis data utama. |
FlameRobin (GUI) | GitHub Releases | Opsional, sebagai alat bantu visual untuk manajemen basis data. |
- Selama instalasi Firebird, atur kata sandi default untuk user
SYSDBA
menjadimasterkey
. - Proyek ini sepenuhnya dapat dijalankan melalui Firebird SQL Shell (isql) yang tersedia secara default.
Langkah-langkah berikut akan memandu Anda untuk membuat basis data, mendefinisikan struktur tabel, dan mengisi data awal melalui isql
.
-
Buka Command Prompt (CMD) dengan hak akses Administrator.
-
Arahkan ke direktori
bin
instalasi Firebird Anda.# Untuk instalasi 64-bit (default) cd "C:\Program Files\Firebird\Firebird_5_0\bin"
-
Jalankan shell interaktif.
Jalankan perintah berikut untuk membuat file database baru (.FDB
) di lokasi yang Anda tentukan (misal: C:\FirebirdDB\
)
CREATE DATABASE 'C:\FirebirdDB\SECURITY_PROJECT.FDB'
USER 'SYSDBA' PASSWORD 'masterkey';
Dua tabel utama digunakan dalam proyek ini: employees
untuk data pegawai dan attendance
untuk data absensi.
-- Tabel untuk menyimpan data pegawai
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
role VARCHAR(30)
);
-- Tabel untuk mencatat kehadiran pegawai
CREATE TABLE attendance (
id INT PRIMARY KEY,
employee_id INT,
attend_date DATE,
status VARCHAR(20)
);
COMMIT;
Tambahkan beberapa data awal untuk keperluan pengujian.
INSERT INTO employees VALUES (1, 'MAULANA', 'Admin');
INSERT INTO employees VALUES (2, 'ZAHRA', 'Staff');
INSERT INTO attendance VALUES (1, 1, CURRENT_DATE, 'Present');
COMMIT;
Bagian ini adalah inti dari proyek, di mana kita mendefinisikan pengguna dan menetapkan hak akses mereka sesuai dengan skenario yang ditentukan.
Berikut adalah pemetaan pengguna, peran, dan hak akses yang akan diimplementasikan:
Nama User | Nama Lengkap | Peran / Skenario | Hak Akses yang Diberikan |
---|---|---|---|
maulana | MAULANA GHANI ROLANDA | Admin Tabel Pegawai | SELECT dan INSERT pada tabel employees . |
zahra | ZAHRA TSUROYYA POETRI | Staf Absensi | SELECT dan INSERT pada tabel attendance . |
didik | DIDIK SETIAWAN | Staf HR (Update Nama) | SELECT pada employees , UPDATE hanya pada kolom name . |
arsya | ARSYA FATHIHA RAHMAN | Staf Audit Absensi | SELECT dan DELETE pada tabel attendance . |
rozhak | ROZHAK | Supervisor (Read-Only) | SELECT pada employees dan attendance . |
Buat setiap pengguna dengan kata sandi masing-masing.
CREATE USER maulana PASSWORD 'pwd_maulana';
CREATE USER didik PASSWORD 'pwd_didik';
CREATE USER zahra PASSWORD 'pwd_zahra';
CREATE USER arsya PASSWORD 'pwd_arsya';
CREATE USER rozhak PASSWORD 'pwd_rozhak';
COMMIT;
Terapkan hak akses sesuai dengan skenario yang telah didefinisikan.
-- Maulana hanya bisa mengelola tabel employees
GRANT SELECT, INSERT ON employees TO maulana;
-- Zahra hanya bisa mengelola tabel attendance
GRANT SELECT, INSERT ON attendance TO zahra;
-- Didik bisa melihat data pegawai dan hanya boleh mengubah kolom 'name'
GRANT SELECT ON employees TO didik;
GRANT UPDATE (name) ON employees TO didik;
-- Arsya bisa melihat dan menghapus data absensi
GRANT DELETE, SELECT ON attendance TO arsya;
-- Rozhak bisa melihat semua data dari kedua tabel
GRANT SELECT ON employees TO rozhak;
GRANT SELECT ON attendance TO rozhak;
COMMIT;
Untuk memverifikasi bahwa aturan keamanan berfungsi, keluar dari sesi SYSDBA
dan login sebagai setiap pengguna untuk menguji hak akses mereka.
Keluar dari isql
:
EXIT;
Login kembali ke isql dan hubungkan sebagai maulana.
isql
CONNECT "C:\FirebirdDB\SECURITY_PROJECT.FDB" USER 'maulana' PASSWORD 'pwd_maulana';
-- SUKSES: Maulana dapat melihat data pegawai
SELECT * FROM employees;
-- SUKSES: Maulana dapat menambah data pegawai baru
INSERT INTO employees VALUES (3, 'MAULANA TEST', 'Admin');
COMMIT;
-- GAGAL: Maulana tidak memiliki hak akses ke tabel attendance
-- Perintah ini akan menghasilkan error "no permission for read/select access to table ATTENDANCE"
SELECT * FROM attendance;
Login kembali sebagai didik.
isql
CONNECT "C:\FirebirdDB\SECURITY_PROJECT.FDB" USER 'didik' PASSWORD 'pwd_didik';
-- SUKSES: Didik dapat melihat data pegawai
SELECT * FROM employees;
-- SUKSES: Didik dapat mengubah kolom 'name'
UPDATE employees SET name = 'DIDIK EDIT' WHERE id = 2;
COMMIT;
-- GAGAL: Didik tidak dapat mengubah kolom 'role'
-- Perintah ini akan menghasilkan error "no permission for update access to column ROLE"
UPDATE employees SET role = 'Manager' WHERE id = 2;
Login kembali sebagai zahra.
isql
CONNECT "C:\FirebirdDB\SECURITY_PROJECT.FDB" USER 'zahra' PASSWORD 'pwd_zahra';
-- SUKSES: Zahra dapat melihat data absensi
SELECT * FROM attendance;
-- SUKSES: Zahra dapat menambah data absensi baru
INSERT INTO attendance VALUES (2, 2, CURRENT_DATE, 'Present');
COMMIT;
-- GAGAL: Zahra tidak dapat mengakses tabel pegawai
-- Perintah ini akan menghasilkan error "no permission for read/select access to table EMPLOYEES"
SELECT * FROM employees;
Login kembali sebagai arsya.
isql
CONNECT "C:\FirebirdDB\SECURITY_PROJECT.FDB" USER 'arsya' PASSWORD 'pwd_arsya';
-- SUKSES: Arsya dapat melihat data absensi
SELECT * FROM attendance;
-- SUKSES: Arsya dapat menghapus data absensi
DELETE FROM attendance WHERE id = 1;
COMMIT;
-- GAGAL: Arsya tidak dapat menambah data absensi
-- Perintah ini akan menghasilkan error "no permission for insert access to table ATTENDANCE"
INSERT INTO attendance VALUES (3, 1, CURRENT_DATE, 'Late');
Login kembali sebagai rozhak.
isql
CONNECT "C:\FirebirdDB\SECURITY_PROJECT.FDB" USER 'rozhak' PASSWORD 'pwd_rozhak';
-- SUKSES: Rozhak dapat melihat data pegawai
SELECT * FROM employees;
-- SUKSES: Rozhak dapat melihat data absensi
SELECT * FROM attendance;
-- GAGAL: Rozhak tidak dapat menghapus data
-- Perintah ini akan menghasilkan error "no permission for delete access to table EMPLOYEES"
DELETE FROM employees WHERE id = 1;
REVOKE
digunakan untuk menghapus hak akses yang sebelumnya telah diberikan.
Skenario: Hak akses SELECT
untuk user rozhak
pada tabel employees
akan dicabut.
-- Login sebagai SYSDBA terlebih dahulu
isql -user 'SYSDBA' -password 'masterkey' "C:\FirebirdDB\SECURITY_PROJECT.FDB"
-- Cabut hak akses
REVOKE SELECT ON employees FROM rozhak;
COMMIT;
EXIT;
Login kembali sebagai rozhak
.
isql
CONNECT "C:\FirebirdDB\SECURITY_PROJECT.FDB" USER 'rozhak' PASSWORD 'pwd_rozhak';
-- GAGAL: Rozhak tidak lagi bisa melihat data employees
-- Perintah ini akan menghasilkan error "no permission for read/select access to table EMPLOYEES"
SELECT * FROM employees;
-- SUKSES: Hak akses untuk tabel attendance masih ada
SELECT * FROM attendance;
Seluruh perintah yang digunakan dalam proyek ini telah dirangkum dalam file Firebird_Security_Project.sql
untuk kemudahan eksekusi.
Proyek ini dilisensikan di bawah MIT License. Lihat file LICENSE
untuk detail lebih lanjut.