Rabu, 08 Januari 2014

Sistem keamanan pada MySQL Server

Dalam sistem keamanan pada MySQL, kita harus mengatur hak akses  dari setiap user karena tidak semua user dibolehkan untuk mengakses data yang ada.
Cara kerja sistem privilege sebagai berikut :
Sistem privilege MySQL memastikan bahwa user dapat melakukan hanya hal-hal yang diperbolehkan untuk mereka. Ketika anda connect ke server MySQL, identitas anda ditentukan oleh host tempat anda melakukan koneksi dan username yang anda ingin gunakan. Sistem memberi privilege sesuai dengan identitas anda dan apa yang ingin ada lakukan.
MySQL mempertimbangkan baik hostname dan username dalam mengidentifikasi karena mungkin ada alasan untuk menganggap bahwa username yang diberikan adalah milik orang yang sama dimanapun di Internet. Sebagai contoh, user bill yang connect dari whitehouse.gov tidak harus orang yang sama dengan user bill yang connect dari microsoft.com. MySQL menangani hal ini dengan mengijinkan anda untuk menentukan user dari host yang berbeda yang mungkin namanya sama : anda dapat memberi bill sebuah himpunan privilege untuk koneksi dari whitehouse.gov, dan himpunan privilege yang lain untuk koneksi dari microsoft.com.

Kendali akses MySQL melibatkan dua tingkat:
·         Tingkat 1: server mengecek apakah anda diijinkan untuk connect ke server.
·         Tingkat 2: Dianggap anda dapat connect, server mengecek tiap permintaan yang anda jalankan untuk melihat apakah privilege anda cukup untuk menjalankannya. Contohnya, jika anda mencoba untuk memilih baris dari tabel dalam database atau menghapus sebuah tabel dari database, server memastikan bahwa anda memiliki privilege select untuk tabel tersebut atau privilege drop untuk database.

Dalam database mysql terdapat lima buah tabel yang dapat digunakan untuk mengatur user dan izin akses masing-masing user-user privileges Yaitu : user, db, host, tables_priv dan columns_priv. Kelima tabel ini disebut grant tables.
Fungsi dari kelima tabel tersebut :
a.       User : Berisi data user yang mendapatkan izin akses MySQL, asal koneksi dan izin akses kepada user Tingkatan akses : Global
b.      Db :Mengatur database apa saja yang dapat diakses oleh seorang user dan jenis izin aksesnya Tingkatan akses : Database
c.       Host : Mengatur asal host yang diperkenankan bagi user untuk mengakses MySQL, jika lebih dari satu host. Tingkatan akses : Database
d.      tables_priv : Mengatur tabel apa saja yang dapat diakses oleh seorang user dan jenis izin aksesnya Tingkatan akses : Tabel
e.       columns_priv : Mengatur kolom (field) apa saja yang dapat diakses oleh seorang user dan jenis izin aksesnya Tingkatan akses : Kolom – field.

Jenis Izin Akses User - User Privileges
Izin akses bagi user terdirli dari tiga bagian, yaitu :
1.   Tingkatan akses user biasa
      Mencakup izin akses kedalam database atau kolom, yaitu :
a. ALTER

b. CRETATE

c. DELETE

d. DROP

e. INDEX

f. INSERT

g. SELECT

h. UPDATE

i. REFERENCES

2.   Tingkatan akses administrator - Global administrative
      Hanya digunakan oleh user setingkat root atau administrator dan tidak diberikan kepada user biasa, yaitu :
a. FILE

b. PROCESS

c. RELOAD

d. SHUTDOWN

e. CREATE TEMPORARY TABLE

f. EXCUTE

g. LOCK TABLES

h. REPLICATION CLIENT

l. REPLICATION SLAVE

j. SHOW DATABASES

k. SUPER

3.   Tingkatan Akses khusus — Special privileges
Dapat diterapkan pada setiap user dengan izin akses sebagai berikut :
a. ALL

b. USAGE

Memberikan Password Untuk Root Dapat dilakukan dengan perintah Update
update user set password:password(’xxxxxxxxxx’)

where user=’root’ ;


Lanjutkan dengan perintah FLUSH
flush privileges

Fungsl flush :
Mysql membaca grant tables hanya satu kali pada saat server pertama kali dijalankan, perintah flush akan memerintahkan kepada sistem untuk membaca ulang kelima grant tables tanpa harus merestart server mysql.

Perintah GRANT
Grant merupakan perintah untuk memberikan hak izin akses bagi user di MySQL agar dapat mengakses database, tabel dan kolom. Selain itu juga dapat menambahkan user baru dengan perintah Grant ini. Ada hal yang harus diperhatikan jika melakukan perubahan izin akses pada user MySQL yang masih aktif bekerja tidak langsung bisa menerapkan perubahan meski sudah melakukan flush privileges. Konfigurasi ini berlaku ketika user sudah menutup koneksi kemudian melakukan koneksi kembali. Izin akses penuh ini digunakan untuk mengakses seluruh database dalam server.

Bentuk umum :
      GRANT jenis_akses (nama_kolom) ON nama_database

      TO nama_user IDENTIFIED BY ”nama_password”

      [WITH GRANT pilihan_akses]

Perintah diatas akan memberikan izin akses penuh setara dengan root. Sebaiknya hal ini tidak boleh dilakukan.Option Identified By nama password akan menerapkan user tersebut agar tetap memasukkan password saat mengakses database. Jika anda tidak memberikan option password maka user tersebut dapat mengakses database tanpa password.

Penyertaan With Grand Option akan memberikan hak penuh pada user sehingga user tersebut juga mampu melakukan perintah Grant tertentu pada user lainnya. Namun terdapat kekurangan ketika kita sebelumnya tidak memilih database MySQL maka server akan mengabaikan akses Reload, Shutdown, Process, File dan Grant.

Perintah REVOKE
Revoke merupakan kebalikan dari perintah grant yaitu menghapus atau mencabut kembali izin akses user MySQL yang sebelumnya telah diberikan. Tingkat pilihan yang dapat digunakan juga sama dengan perintah grant sehingga semua izin akses dengan grant dapat dicabut kembali.

Bentuk umum :
      REVOKE jenis_akses ON nama_database

       FROM nama_user

Perintah diatas membuat salah satu user tidak mempunyai izin akses lagi. Meski sudah dicabut aksesnya user tersebut masih dapat login ke database MySQL tapi tidak perlu khawatir karena user tersebut tidak bisa berbuat apa-apa lagi.



-          Menghapus Akses Database
mysql> revoke all on nm_db.nm_tbl from nm_user@localhost identified by ‘nm_passwd’;
Perintah diatas izin akses user pada tabel tertentu telah dicabut sehingga tidak bisa mengakses kembali.

-          Menghapus Akses Kolom
mysql> revoke update(nama) on nm_db.nm_tbl from nm_user@localhost identified by ‘nm_passwd’;
 Perintah diatas akan mencabut akses untuk kolom yang telah ditentukan sebelumnya.

Tidak ada komentar:

Posting Komentar