Bab 1 — Materi + Quiz 8

🛡️ Database Security

Memahami ancaman injeksi SQL, manajemen konkurensi (ACID), kontrol akses (RBAC), serta teknik enkripsi pada basis data.

📑 Daftar Isi

  1. Overview of SQL & SQL Injection
  2. Language-specific Defenses
  3. Maintaining Database Correctness (ACID)
  4. Managing Activity Concurrency
  5. RBAC Security in DBMS
  6. Encryption in DBMS
  7. Poin-Poin Penting
  8. Tips Menghafal
  9. Contoh Soal & Jawaban
  10. Latihan Soal Interaktif

💉 Overview of SQL & SQL Injection

Database relasional menggunakan SQL (Structured Query Language) untuk manipulasi data. Jika input pengguna tidak divalidasi, maka akan rawan terkena SQL Injection (SQLi).

Konsep Dasar

SQL Injection (SQLi)

Terjadi saat penyerang memasukkan (inject) kode SQL berbahaya melalui input form atau URL parameter yang tidak disanitasi. Tujuannya untuk mencuri data, merusak data, atau bypass autentikasi.

Contoh SQLi pada Form Login

SELECT * FROM users WHERE username = '' OR '1'='1'; --' AND password = '...';

Kondisi '1'='1' selalu bernilai benar (tautology), sehingga penyerang dapat login tanpa password yang sah. Karakter -- mengabaikan teks setelahnya.

Pencegahan SQL Injection

  • Parameterized statements / Prepared statements: Memisahkan logika kode SQL dengan input pengguna. Input diperlakukan sebagai data murni, bukan perintah yang dapat dieksekusi.
  • Input validation & sanitization.
  • Least-privilege principle: Hak akses database hanya secukupnya.

🛠️ Language-specific Defenses

Setiap bahasa pemrograman memiliki cara tersendiri untuk mengamankan komunikasi dengan database:

Bahasa / FrameworkTeknik Pertahanan (Prepared Statements & ORM)
PHPMenggunakan PDO (PHP Data Objects) atau ekstensi MySQLi. Jangan lupa gunakan fungsi mysqli_real_escape_string jika memakai raw SQL.
Python (Django/Flask)Memanfaatkan ORM (Object-Relational Mapping) seperti Django ORM atau SQLAlchemy yang secara otomatis memproteksi kueri.
Java (Spring)Menggunakan JPA (Hibernate) atau interface PreparedStatement pada JDBC. Jangan gunakan Statement biasa.
Node.js (Express)Memakai ORM libraries seperti Sequelize atau TypeORM.
C# (.NET)Memakai Entity Framework atau class SqlParameter untuk raw SQL.

✔️ Maintaining Database Correctness (ACID)

Setiap operasi pada database (seperti transaksi bank) harus menjunjung tinggi prinsip ACID agar data tidak korup/hilang jika terjadi error atau mati lampu.

Prinsip ACID

  • Atomicity: "All or nothing". Seluruh operasi dalam satu transaksi harus sukses semua. Jika salah satu gagal, maka semuanya dibatalkan (rollback). Tidak boleh ada pembaruan parsial.
  • Consistency: Memastikan database bertransisi dari satu "keadaan yang valid" ke "keadaan valid lainnya" tanpa merusak integritas/aturan struktur.
  • Isolation: Transaksi yang berjalan bersamaan tidak boleh saling mengganggu. Setiap transaksi harus seolah-olah berjalan sendirian (terisolasi).
  • Durability: Perubahan data bersifat permanen dan dijamin tetap ada setelah di-commit, bahkan jika terjadi kerusakan sistem (mati listrik/crash).

🚦 Managing Activity Concurrency

Konkurensi adalah kemampuan DBMS menangani banyak proses transaksi di waktu yang bersamaan. Namun, hal ini dapat menimbulkan anomali (masalah):

4 Anomali Konkurensi

  1. Dirty Reads: Membaca data yang belum di-commit oleh transaksi lain (transaksi lain itu kemudian di-rollback). Akibatnya data menjadi tidak konsisten.
  2. Non-repeatable reads: Transaksi membaca satu baris dua kali, tapi hasilnya berbeda karena transaksi lain diam-diam telah mengubah isi baris tersebut.
  3. Phantom reads: Transaksi membaca sekumpulan baris dengan kondisi tertentu, namun transaksi lain menghapus atau menambah baris baru sehingga jumlah baris yang cocok berubah.
  4. Lost updates: Dua transaksi menimpa data yang sama, dan salah satu pembaruan tertimpa (hilang) begitu saja tanpa terdeteksi.

Isolation Levels (Level Isolasi)

Solusi untuk mengatasi anomali di atas (dari yang paling renggang ke paling ketat):

Level IsolasiMencegah Anomali
Read uncommittedTidak mencegah apapun. (Paling cepat, tapi bahaya).
Read committedMencegah Dirty Read.
Repeatable ReadMencegah Dirty Read & Non-repeatable read.
SerializableMencegah SEMUANYA. Mengunci tabel seolah berjalan satu per satu berurutan. (Aman, tapi paling lambat dan rawan Deadlock).

🔑 RBAC Security in DBMS

Role-Based Access Control (RBAC) adalah metode mengatur akses pengguna berdasarkan "Peran" (Role) mereka dalam perusahaan, bukan satu-satu per individu.

🔒 Encryption in DBMS

Melindungi kerahasiaan (confidentiality) data dengan mengubahnya menjadi format acak/kriptografi yang tidak bisa dibaca tanpa kunci (key).

📌 Poin-Poin Penting (WAJIB DIHAPAL)

✅ Ringkasan Kunci untuk UAS

  1. Prepared Statements (Parameterized Queries): Cara paling ampuh untuk mencegah SQL Injection karena input user dianggap sebagai data murni, bukan kueri.
  2. ACID - Atomicity: All-or-nothing. Tidak boleh ada partial updates.
  3. ACID - Consistency: Merubah database dari state valid ke state valid lainnya.
  4. ACID - Isolation: Transaksi tidak boleh membaca perubahan yang belum di-commit (mencegah Dirty Read).
  5. ACID - Durability: Bertahan dari kerusakan sistem/listrik (crashes).
  6. Phantom Read: Baris data bertambah/berkurang tiba-tiba (query klausa WHERE menghasilkan jumlah baris yang berbeda).
  7. Lost Update: Update dari dua transaksi saling menimpa tanpa disadari.
  8. RBAC (Role-Based Access Control): Mengelompokkan permission ke dalam role. (Policy Administration = Admin kelola dari pusat, Dynamic = sementara masuk tim proyek).
  9. Encryption at rest: Data di disk terenkripsi. Key management wajib dipisah penyimpanannya dan di-rotasi secara rutin.

🧠 TIPS MENGHAFAL — Bab 1: Database Security

  1. "ACID itu ASID"
    Atomicity = All-or-nothing (barengan semua, atau batal semua).
    Consistency = Valid to Valid (sesuai aturan).
    Isolation = Jangan ngintip yg belom jadi (cegah Dirty read).
    Durability = Tahan banting (Aman biarpun server mati/crash).
  2. "SQLi = Si Param" → Obat sakit SQL Injection adalah "Parameterized Statements / Prepared Statements". Dia memisahkan kode dan input (dianggap sebagai data).
  3. "Dirty, Non-Rep, Phantom, Lost"
    - Dirty Read = Baca data kotor (belum di commit).
    - Non-Repeatable = Data yang sama dibaca dua kali isinya berubah.
    - Phantom = Tiba-tiba ada baris hantu baru (jumlah nambah/kurang karena WHERE).
    - Lost Update = Ketiban (Saling nabrak update).
  4. "RBAC = Grup Peran" → Bukannya ngatur user satu-satu (capek), tapi bikin GRUP/ROLE (Admin, User), terus usernya dimasukin ke Role itu. Policy Admin = Pusat kontrol. Dynamic = Pindah role sementara.
  5. "Kunci Jangan Ditaro di Bawah Keset" → Key Management untuk Encryption: Kuncinya harus dipisah dari database, dan harus sering-sering dirotasi (diganti) biar aman.

📝 Contoh Soal & Jawaban

Contoh Soal 1

Manakah yang paling ampuh mencegah SQL Injection?

A. Mengganti semua database ke NoSQL
B. Enkripsi disk pada server database
C. Menggunakan Parameterized statements
D. Hash fungsi satu arah pada seluruh tabel

Jawaban: C — Parameterized statements mencegah input dianggap sebagai kode SQL.

Contoh Soal 2

Sebuah transaksi dibatalkan karena mati lampu, lalu saat dinyalakan tidak ada satupun perubahan yang masuk. Ini merupakan bukti dari sifat ACID apa?

A. Atomicity
B. Consistency
C. Isolation
D. Durability

Jawaban: A — Atomicity menjamin all-or-nothing (tidak ada perubahan parsial jika terjadi kegagalan sebelum commit).

🎮 Latihan Soal Interaktif — Bab 1: Database Security

Kerjakan 20 soal berikut berdasarkan Quiz 8, lalu klik Submit untuk melihat hasilnya.

0/20
Skor Anda