Sunday, June 26, 2011

Sistem Keamanan pada MySQL

Untuk keamanan pada MySQL, kita harus mengatur hak akses (privilage) dari setiap user karena tidak semua user dibolehkan untuk mengakses data yang ada.
Cara kerja sistem privilege :
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.

SISTEM KEAMANAN PADA PostgreSQL
PostgreSQL merupakan salah satu database yang memiliki kinerja yang sangat tinggi, karena telah didukung hampir berbagai platform dan didukung oleh banyak bahasa pemrograman. PostgreSQL juga memiliki dukungan standar SQL92, SQL99, dan SQL2003 yang digunakan untuk standar bahasa yang digunakan. Oleh karena itu, PostgreSQL juga memilki sebuah fitur yang berguna untuk menangani dalam hal keamanan data. Adapun keamanan yang dimiliki untuk Keamanan PostgreSQL mulai dari Keamanan Saat Menjalankan PostgreSQL, User, Password dan Hak Akses dalam PostgreSQL, File pg_hba.conf
Data Encryption:
Pada Server Database PostgreSQL, memiliki suatu fitur kriptografi yang hanya terbatas pada MD5 dan fungsi enkripsi dan deskripsi. Fitur – fitur yang biasanya terdapat pada kriptografi biasanya adalah:
-          MD5, yakni semacam cara mengenkripsi password yang disimpan di dalam storage yang melintasi suatu jaringan tertentu, sehingga mengakibatkan seorang admin tidak akan mengetahui password user yang telah disimpan.
-          SHA1, semacam fitur hashing yang berguna untuk melindungi password diambil oleh user yang tidak berhak mengakses database.
-          SHA224/256/384/512
-          Blowfish
-          ES/3DES/CAST5*
-          PGP Symmetric encryption
-          PGP Public-Key encryption, yakni suatu cara mengenkripsi data pada saat melintasi jaringan dengan menggunakan openSSL, sehingga data tersebut berupa suatu password ataupun data hasil query. Otentikasi SSL adalah ketika sertifikat pertukaran client dan server yang telah ditandatangani oleh pihak ketiga yang telah dipertanyakan kredensial. Sambungan ditolak baik oleh server atau client bila tidak menerima sertifikat yang sah dari yang lain.
Authentication :
Otentikasi adalah merupakan sebuah proses dimana server backend dan postmaster memastikan bahwa pengguna meminta akses ke data. Semua user yang memakai PostgreSQL diperiksa melalui pg_user untuk memastikan bahwa mereka mempunyai hak akses. Namun, verifikasi identitas pengguna yang sebenarnya dilakukan dalam berbagai cara, yaitu:
-          Dari shell pengguna: Sebuah server backend dimulai dari user shell, user-id sebelum melakukan setuid ke user-id dari user postgres. User id-efektif digunakan sebagai dasar untuk cek kontrol akses. Tidak ada otentikasi lainnya yang dilakukan.

-          Dari jaringan: PostgreSQL dibangun sebagai database distribusi, akses ke port TCP Internet dari proses postmaster tersedia untuk setiap user. DBA mengkonfigurasi file pg_hba.conf dalam direktori PGDATA untuk menentukan sistem otentikasi apa yang akan digunakan sesuai dengan host pembuat koneksi. pg_hba.conf untuk penjelasan tentang sistem otentikasi yang tersedia. Tentu saja, otentikasi berbasis host tidak bisa dikelabui di Unix. Hal ini dimaksudkan agar jika penyusup bertekad ingin mengetahui informasi dari host. Isu-isu keamanan berada di luar lingkup Postgres.

Privileges:
Pada PostgreSQL juga memiliki hak akses (privilage) dari setiap user karena tidak semua user dibolehkan untuk mengatur akses data yang ada. PostgreSQL juga sama dengan MySQl yaitu menggunakan perintah Grant, selanjutnya untuk peran biasa, pengguna biasa dapat:
-          Mengakses database apabila cluster data menggunakan kebijakan otentikasi standar seperti yang dijelaskan dalam pg_hba.conf.
-          Membuat objek dalam skema PUBLIC dari setiap database pengguna dapat mengakses.
-          Buat sesi (sementara) obyek dalam sesi sementara, seperti skema
-          Alter parameter runtime.
-          Membuat fungsi yang ditetapkan pengguna.
-          Jalankan ditetapkan pengguna fungsi yang dibuat oleh pengguna lain dalam skema PUBLIK (selama mereka berinteraksi hanya dengan benda-benda yang pengguna telah diberikan hak untuk mengakses).
Adapun perintah user biasa hanya bermaksud untuk melaksanakan perintah-perintah yang memanipulasi data menggunakan perintah INSERT , UPDATE , dan DELETE. Namun, tindakan ini dikarenakan skema UMUM terbuka untuk semua. Menjadikan para pengguna dapat menambahkan data yang ada di tabel, bahkan mungkinkan untuk memodifikasinya dengan menambahkan aturan dan dapat, menyimpan data dalam tabel yang terletak dalam skema PUBLIC, yang kemudian bisa di akses.
PostgreSQL juga memiliki control dasar yang bernama control access-Host, dimana pada setiap cliet diijinkan untuk mengakses suatu database dan client tersebut dapat mengotentikasikannya sendiri. Dimana setiap sistem database akan berisi sebuah file yang bernama pg_hba.conf yang akan di akses ole setiap client. Adapun metode otentikasi pada TCP/IP socket domain, yakni :
1.      Unconditionally : yakni sambungan diperbolehkan .
2.      Reject : sambungan ditolak tanpa syarat
3.      Crypt : Client diminta untuk memasukkan password untuk memastikan, kalau cocok maka sambungan akan diperbolehkan.
4.      Password : hampir sama dengan sebelumnya

2 comments: