Dalam hal pengamanan server MySQL, setidaknya ada beberapa faktor yang mempengaruhi. Kita belum cukup jika mengamankan satu sisi (faktor) saja, tetapi harus menyeluruh. Berikut ini beberapa faktor tersebut:
1. Server atau komputer tempat MySQL berada. Server tempat MySQL diinstall tentunya menjadi gerbang utama bagi penyusup (intruder). Untuk ini kita harus benar-benar memperhatikan faktor keamanan server. Kita dapat memasang firewall untuk membatasi akses penyusup ke server. Gunakan prinsip deny-all, allow-some, dimana kita menutup semua lubang dan hanya membuka yang diperlukan.
2. Server MySQL. Konfigurasi dan settingan dalam server MySQL juga sangat mempengaruhi keamanan data MySQL. Bagaimana jadinya jika user yang tidak berhak dapat mengakses sistem dan konfigurasi MySQL? Tentu sangat berbahaya.
3. Aplikasi (Pemrograman) yang digunakan. Aplikasi disini maksudnya dalah pemrograman yang menggunakan atau berhubungan langsung dengan MySQL. Sebagian besar penyusup akan memilih cara menyusup melalui aplikasi jika kedua hal diatas tidak dapat dilakukan. Dan banyak database yang kebobolan karena kelemahan dari sisi aplikasi. Secara sederhana kita dapat mengakses data ke MySQL melalui konsep yang sering disebut sebagai SQLInjection.
4. User atau pengguna. User atau pengguna server MySQL juga mempengaruhi keamanan datanya. Misalnya pemilihan password yang mudah ditebak (seperti tanggal lahir), kecerobohan user yang lupa logout setelah menggunakan MySQL atau user yang menuliskan passwordnya di buku catatan.
Memahami Hak Akses (Privileges) di MySQL
MySQL pada dasarnya merupakan sistem database yang aman. Di MySQL kita dapat mengatur hak akses tiap user terhadap data di database. MySQL memungkinkan kita mengatur hak akses user sampai pada tingkat kolom. Artinya kita dapat mengatur kolom tertentu dapat diakses oleh user siapa saja. Tentu, kita juga dapat mengatur hak akses user terhadap tabel, dan database.
Semua pengaturan hak akses (privileges) tersimpan di database mysql yang secara default sudah ada di sistem MySQL. Di dalam database mysql antara lain terdapat tabel-tabel sebagai berikut:
user. Tabel ini digunakan untuk menyimpan informasi user MySQL yang mencakup informasi user, password dan host user, serta informasi hak akses user.
db. Tabel ini digunakan untuk menyimpan informasi mengenai hak akses user terhadap database.
host. Tabel ini digunakan untuk menyimpan daftar komputer (bisa berupa alamat IP, nama komputer, atau %) yang berhak mengakses suatu database.
tables_priv. Tabel ini digunakan untuk menyimpan informasi mengenai hak akses user terhadap tabel. Dengan kata lain menyimpan tabel ini dapat diakses oleh siapa dengan hak akses apa saja.
columns_priv. Tabel ini digunakan untuk menyimpan informasi mengenai hak akses user terhadap kolom.
procs_priv. Tabel ini digunakan untuk menyimpan informasi mengenai hak akses user terhadap procedure.
proc. Tabel ini digunakan untuk menyimpan informasi mengenai daftar procedure dalam MySQL.
func. Tabel ini digunakan untuk menyimpan informasi mengenai function yang didefinisikan di MySQL.
GRANT dan REVOKE di MySQL
Untuk mengatur hak akses di MySQL, pada dasarnya kita menggunakan bentuk perintah GRANT dan REVOKE.
Berikut ini bentuk umum perintah GRANT dan REVOKE secara sederhana :
Berikut ini pilihan untuk priv_type dalam bentuk umum perintah GRANT dan REVOKE di atas:
ALL PRIVILEGES FILE RELOAD
ALTER INDEX SELECT
CREATE INSERT SHUTDOWN
DELETE PROCESS UPDATE
DROP REFERENCES USAGE
Perintah GRANT dan REVOKE dapat digunakan untuk membuat user baru maupun mengatur hak akses user yang sudah ada dengan hak akses (privileges ) tertentu. Tingkatan hak akses user dapat terbagi menjadi tingkatan global (tersimpan di tabel mysql.user), database (tersimpan di tabel mysql.host dan mysql.db), tabel (tersimpan di tabel mysql.tables_priv) dan kolom (tersimpan di tabel mysql.columns_priv). Setiap perubahan hak akses di MySQL, termasuk menambahkan user baru, tidak akan berlaku sebelum diakhiri dengan perintah FLUSH PRIVILEGES.