Database yang bisa diakses siapa saja adalah kebocoran data yang menunggu waktu. Section ini membangun keamanan berlapis: user dengan privilege minimum, role untuk tim, password policy, hingga pertahanan SQL injection dengan prepared statement.

# MySQL Users

Pelajari konsep user di MySQL sebagai akun koneksi berformat user@host: membaca daftar akun dari tabel mysql.user, memahami arti host localhost versus wildcard %, alasan aplikasi tidak boleh memakai root, perbedaan USER() dan CURRENT_USER(), serta memantau koneksi aktif dengan SHOW PROCESSLIST.

Buka →
# Membuat dan Menghapus User

Pelajari siklus hidup akun MySQL: membuat akun dengan CREATE USER dan kata sandi, menghadapi ERROR 1396 saat akun sudah ada, memakai IF NOT EXISTS agar skrip idempoten, mengubah nama akun dengan RENAME USER, mengganti kata sandi dengan ALTER USER, bahaya akun tanpa kata sandi, serta menghapus akun dengan DROP USER.

Buka →
# Privileges

Pelajari konsep privilege di MySQL: hierarki cakupan dari global, database, tabel, hingga kolom, daftar privilege populer seperti SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, dan ALTER, perbedaan privilege data dengan privilege administratif seperti RELOAD dan PROCESS, serta cara memeriksa hak akses melalui SHOW GRANTS dan information_schema.

Buka →
# GRANT dan REVOKE

Pelajari pemberian dan pencabutan hak akses di MySQL dengan GRANT dan REVOKE: kombinasi beberapa privilege sekaligus pada berbagai tingkat cakupan, ERROR 1410 saat memberi hak ke akun yang belum ada, ERROR 1147 saat mencabut hak yang tidak pernah diberikan, risiko GRANT ALL dan WITH GRANT OPTION, serta kapan FLUSH PRIVILEGES benar-benar diperlukan.

Buka →
# Roles

Pelajari role di MySQL sebagai wadah privilege yang bisa dibagikan: CREATE ROLE untuk mem bundle hak akses, GRANT role TO user untuk membagikannya, SET ROLE dan SET DEFAULT ROLE untuk mengaktifkannya dalam sesi, CURRENT_ROLE() dan SHOW GRANTS USING untuk memeriksanya, serta kapan role membuat pengelolaan hak tim jauh lebih rapi.

Buka →
# Authentication

Pelajari mekanisme authentication MySQL 8.4: plugin caching_sha2_password sebagai bawaan, realita mysql_native_password yang sudah dimatikan default dengan ERROR 1524, format hash kata sandi di authentication_string, alur pencocokan user dan host saat koneksi masuk, serta aturan host paling spesifik yang dibuktikan dengan dua akun bernama sama.

Buka →
# Password Policy

Pelajari kebijakan kata sandi di MySQL 8.4: memasang komponen validate_password dengan INSTALL COMPONENT, menolak kata sandi lemah melalui ERROR 1819, mengatur masa berlaku sandi dengan PASSWORD EXPIRE, sandi ganda dengan RETAIN CURRENT PASSWORD, serta mengunci akun otomatis lewat FAILED_LOGIN_ATTEMPTS dan PASSWORD_LOCK_TIME.

Buka →
# Least Privilege

Pelajari prinsip least privilege di MySQL: memberi akun aplikasi hanya hak CRUD pada satu database tanpa DROP dan DDL, akun analitik hanya SELECT, pemberian hak migrasi secara sementara dengan GRANT lalu REVOKE, audit hak akses dengan SHOW GRANTS, serta narasi bagaimana GRANT ALL menjadikan celah SQL injection menjadi bencana DROP DATABASE.

Buka →
# SQL Injection

Pelajari anatomi serangan SQL injection di MySQL: bagaimana input yang digabung langsung ke string SQL mengubah tanda kutip menjadi senjata, mengapa payload klasik ' OR '1'='1 mengembalikan seluruh baris, bagaimana payload destruktif DROP TABLE menyusup lewat komentar --, perbandingan kode aplikasi rentan dengan versi aman berbasis prepared statement, serta mitigasi berlapis bersama least privilege.

Buka →
# Prepared Statements

Pelajari prepared statement di MySQL: siklus PREPARE, EXECUTE USING, dan DEALLOCATE dengan parameter user variable, eksekusi berulang dengan nilai berbeda, bukti nyata bahwa payload SQL injection menjadi data biasa yang menghasilkan Empty set, prepared statement untuk DDL, ERROR 1295 untuk statement yang tidak didukung, serta padanan placeholder di PHP dan Python.

Buka →
# Secure Database Configuration

Kunci pengaturan server MySQL yang menyerang permukaan: membatasi jaringan bind-address, menutup akses jarak jauh root, memaksa TLS, meninjau variabel berisiko, dan menjalankan server dengan prinsip defense in depth.

Buka →