Modul 5
Administrasi dan Keamanan di MySQL
- Keamanan di MySQL
- Memahami Hak Akses (Priviledges) di MySQL
- Grant dan Revoke di MySQL
- Menambah dan Mengatur Hak Akses User
- Menghapus Hak Akses User
- Mengganti Password User
Keamanan di
MySQL
Masalah keamanan
(security) di MySQL merupakan hal yang tidak boleh dianggap sepele apalagi
dikesampingkan. MySQL merupakan
software database yang bersifat client-server, yang memungkinkan beberapa user
dapat mengakses server MySQL dari mana pun. Untuk itu, server MySQL harus
benar-benar aman dari akses (serangan) orang-orang yang tidak berhak.
Berikut ini beberapa hal yang harus diperhatikan
dalam mengamankan
server MySQL:
a. Jangan Pernah Memberi Akses Ke Semua
User (Kecuali User root) untuk dapat mengakses database mysql. Jika seseorang dapat
mengakses database ini, maka dia dapat melihat informasi user (termasuk user,
password dan host) MySQL dan (mungkin) dapat menambah atau mengubah informasi
tersebut.
b. Pelajari mengenai hak akses di MySQL. Perintah GRANT dan REVOKE digunakan
untuk mengatur hak akses di MySQL. Sebisa mungkin jangan memberikan hak
akses ke MySQL pada semua host (%). Dan cobalah untuk mengecek dengan:
- Cobalah login dengan perintah mysql –u root. Jika Anda berhasil login ke server, maka hal ini bisa menjadi masalah besar, karena password root masih kosong sehingga semua user dapat mengakses server MySQL.
- Gunakan perintah SHOW GRANTS untuk melihat semua hak akses user.
c. Jangan pernah menyimpan password dalam bentuk teks biasa di MySQL! . Gunakan fungsi enkripsi searah seperti fungsi
PASSWORD() dan MD5() untuk mengenkripsi isi password. Kita tidak dapat menjamin
100% bahwa server kita aman dari penyusup (intruder).
d. Hati-hati dalam memilih password. Pilihlah password yang mudah diingat tapi sulit ditebak oleh orang lain.
Dan juga jangan gunakan kata-kata yang ada di kamus, gunakanlah kombinasi angka
dan huruf.
e. Pasang firewall di server untuk mencegah penyusup. Hal ini dapat mencegah setidaknya 50% dari
program penyusup yang ada.
f. Jangan percaya sepenuhnya terhadap data yang dimasukkan oleh user. Akan lebih baik jika kita menganggap
bahwa semua user adalah ‘jahat’. Lakukan validasi data sebelum dimasukkan ke
database. Hal ini biasanya dapat dilakukan di dalam bahasa pemrograman yang
digunakan.
g. Hati-hati dalam mengirim atau mentransfer data lewat internet, karena mungkin ada orang lain yang dapat
‘membajak’ data tersebut.
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 adalah 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 :
GRANT priv_type
ON {tbl_name | * | *.* |
db_name.*}
TO user_name [IDENTIFIED BY 'password']
[WITH GRANT
OPTION]
REVOKE priv_type
ON {tbl_name | * | *.* |
db_name.*}
FROM user_name
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.
Menambahkan
dan Mengatur Hak Akses User
Untuk menambahkan dan mengatur hak akses (privileges) user di MySQL, kita
dapat menggunakan 2 cara. Pertama
langsung melakukan INSERT atau UPDATE ke tabel mysql.user, dan tabel-tabel lain
sesuai dengan hak aksesnya. Cara ini tidak disarankan karena mengandung resiko
terjadi kesalahan.
Cara kedua adalah dengan perintah
GRANT dan REVOKE. Perintah ini mudah dipahami dan diterapkan karena lebih
sederhana. MySQL secara otomatis akan menyimpan informasi user ke tabel sesuai
dengan hak aksesnya.
Berikut ini beberapa contoh menambahkan user baru di MySQL:
1. Menambahkan user baru dengan nama user
‘monty’ yang dapat mengakses semua database dari komputer ‘localhost’ dengan
password ‘qwerty’. User ini juga berhak menjalankan perintah GRANT untuk user
lain.
GRANT ALL PRIVILEGES ON *.*
TO monty@localhost
IDENTIFIED BY 'qwerty' WITH
GRANT OPTION;
2.
Menambahkan user baru dengan nama user ‘adinda’, tidak
dapat mengakses database (*.*), hanya
dapat mengakses dari komputer dengan IP ‘192.168.1.5’ dan password
‘qwerty’.
GRANT USAGE ON *.* TO
adinda@192.168.1.5
IDENTIFIED BY 'qwerty';
3.
Menambahkan user baru dengan nama user ‘admin, hanya
dapat mengakses database ‘mysql’, hanya
dapat mengakses dari komputer ‘localhost’
dan dengan password ‘qwerty’.
GRANT ALL PRIVILEGES ON
mysql.* TO admin@localhost
IDENTIFIED BY 'qwerty';
Berikut ini beberapa contoh
mengatur hak akses user yang sudah ada di MySQL:
1. Mengubah hak akses user ‘adinda’ agar
dapat mengakses database ‘penjualan’.
GRANT ALL PRIVILEGES ON
penjualan.* TO
adinda@192.168.1.5;
FLUSH
PRIVILEGES;
2. Mengubah
hak akses user ‘admin’ agar dapat CREATE di database ‘penjualan’.
GRANT CREATE ON penjualan.*
TO admin@localhost;
FLUSH
PRIVILEGES;
Menghapus
Hak Akses User
Untuk menghapus hak akses user, dapat dilakukan dengan perintah
REVOKE. Berikut ini contohnya:
Menghapus hak akses user ‘admin’ terhadap database ‘penjualan’.
REVOKE CREATE ON penjualan.*
FROM admin@localhost;
FLUSH PRIVILEGES;
Mengganti Password User
Untuk mengganti password suatu
user di MySQL, kita tinggal menjalankan perintah UPDATE terhadap field Password
di tabel mysql.user. Password tersebut diekripsi dengan fungsi PASSWORD().
Berikut ini perintah SQL yang
dapat digunakan untuk mengganti password user:
UPDATE user SET
Password=PASSWORD(‘123’) WHERE
User=’admin’ AND
Host=’localhost’;
SET PASSWORD FOR
admin@localhost = PASSWORD (‘123’);
FLUSH
PRIVILEGES;
1 komentar:
bagus banget.. tambah lagi dong tutorial nya...
Posting Komentar