Administrasi
dan Keamanan di MySQL
1.
Keamanan di MySQL
2.
Memahami Hak
Akses (Priviledges) di MySQL
3.
Grant dan Revoke di MySQL
4.
Menambah dan Mengatur Hak Akses
User
5.
Menghapus Hak
Akses User
6.
Mengganti
Password User
1. 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:
1. 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.
2. 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.
2. 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.
3. Grant dan Revoke di MySQL
·
Grant : Memberikan /
mengijinkan seorang
user
untuk mengakses tabel dalam database
tertentu
·
Revoke : digunkan untuk
mencabut suatu hak
akses
dalam database tertentu
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
· Contoh Grant :
·
GRANT ALL PRIVILEGES ON pemesanan.*
TO tukul@localhost
IDENTIFIED BY ‘123456'
WITH GRANT OPTION;
· GRANTALL PRIVILEGES ON *.*
TO hindun@localhost
IDENTIFIED BY ‘123456'WITHGRANTOPTION;
· GRANT SELECT ON pemesanan.pelanggan
TO john@’%’
IDENTIFIED BY ‘123456' WITH GRANT OPTION;
· GRANT SELECT ON pemesanan.pelanggan
TO john@192.168.1.7
IDENTIFIED BY ‘123456' WITH GRANT OPTION;
·
Contoh Revoke :
· Menghapus hak
akses user ‘tukul’ terhadap database
‘pemesanan’.
· REVOKE ALL
PRIVILEGES ON pemesanan.* FROM
tukul@localhost;
· FLUSH
PRIVILEGES;
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.
4. 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;
5. 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;
6. 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;
Mengubah
Password User:
· UPDATE user SET
Password=PASSWORD(‘passwordnya’)
WHERE User=’usernya’
· AND Host=’host-nya’;
· SET PASSWORD FOR user@host-nya = PASSWORD (‘passwordnya’);
·
FLUSH PRIVILEGES;
0 komentar:
Posting Komentar