Administrasi dan Keamanan di MySQL


Modul 5
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

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.
 
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;


Category: 1 komentar

1 komentar:

SoftwareHardware mengatakan...

bagus banget.. tambah lagi dong tutorial nya...

Posting Komentar