Tuesday, June 28, 2011

Responsibility driven design

a.       Konsep dan deskripsi dari metode
Responsibility driven design adalah sebuah teknik desain dalam pemprograman berorientasi objek. Teknik ini diusulkan oleh  Rebecca Wirfs-Brock dan Brian. Responsibility driven design terinspirasi oleh model client server. Dimana yang menjadi fokus pembahasannya adalah :
-          Tindakan apa yang menjadi tanggung jawab objek tersebut?
-          Informasi apa yang akan dibagi(dishare) oleh objek tersebut?
Dalam model client/server diasumsikan bahwa sebuah software client dan sebuah software server saling bertukar informasi berdasarkan aturan yang sudah distandarisasi. Client bisa membuat request secara rinci, kemudian server akan memberikan tanggapan terhadap request tersebut. Jadi,  responsibility-driven design berusaha untuk menghindari transaksi yang terperinci seperti dimana request dilakukan, tetapi hanya menentukan maksud dari permintaan tersebut. Keuntungannya adalah untuk meningkatkan enkapsulasi, karena spesifikasi dari jalur yang benar dimana request tersebut dilakukan bersifat private.
Responsibility driven design fokus pada tindakan apa yang harus dicapai, dan objek mana yang akan menyelesaikannya. Bagaimana setiap tindakan diselesaikan atau ditunda. Langkah awal yang baik untuk mendefinisikan sebuah objek adalah dengan mendiskripsikan peranannya dan tujuannya dalam sebuah aplikasi. Rincian dari struktur internal dan algoritmanya secara spesifik bisa dikerjakan segera setelah peran dan tanggung jawab dari objek-objek tersebut bisa dipahami.
Responsibility adalah sebuah subset yang padu dari sebuah prilaku yang didefinisikan sebagai sebuah objek. Tanggung jawab dari sebuah objek adalah pernyataan tentang informasi yang dipertahankannya dan operasi yang mendukungnya. Sebuah analogi antara objek desain dan menulis sebuah laporan  dapat dijelaskan maksudnya dari daftar tanggung jawab dari setiap objek. Tanggung jawab dari objek tersebut akan dijadikan topik utama dalam sebuah laporan secara garis besar. Tujuan dari membuat garis besar tanggung jawab dari sebuah objek adalah untuk memahami peranannya dalam aplikasi yang dibuat. Cara untuk menentukan tanggung jawab dari sebuah objek adalah dengan menjawab pertanyaan berikut :
-          Apa yang harus diketahui oleh obejek tersebut untuk mencapai target yang diinginkan?
-          Langkah-langkah apa saja yang harus ditempuh  untuk mencapai hal tersebut?
b.      Ulasan tentang proses desain
Untuk melakukan proses desain pada responsibility driven design terdiri dari dua tahapan, yaitu :
1.     Exploratory design
Merupakan tahap pengembangan dari sebuah objek medel, yang dilakukan pada tahap ini adalah :
-          Menghubungkan objek domain dengan objek solusinya.
-          Menentukan tanggung jawab untuk masing-masing objek.
-          Membangun model kolaborasi antar objek.
Hasil yang didapatkan adalah :
-          CRC objek model, peranan dari masing-masing objek, tanggung jawab masing-masing objek, dan kolaborasi antar objek.
-          UML Sequence / collaboration diagram.
-          Definisi dari masing-masing class.
-          Prototype.
2.     Design refinement
Aktivitas yang dilakukan pada tahapan ini adalah :
-          Memutuskan dokumen desain.
-          Mengontrol style dari desain aplikasi.
-          Mempertimbangkan kemungkinan hubungan antar objek dengan cara membuat UML class diagram.
-          Memperbaiki objek model untuk fleksibilitas, konsistensi, dan kemudahan dalam perawatan, dengan cara melakukan :
ü  Membuat abstraksi objek baru.
ü  Merevisi peranan dari objek, menyesuaikan dengan keadaan.
ü  Menyederhanakan interface dan pola kolaborasi.
ü  Menetapkan peran dari masing-masing class (apakah kelas tersebut sudah mengimplementasikan interface tertentu).
ü  Menggunakan pola desain.
-          Mendokumentasikan desain menggunakan UML diagram.
-          Merumuskan kontrak antara sistem komponen dan class.

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

Sistem Keamanan pada Oracle

Oracle memiliki fitur-fitur khusus dalam hal keamanan data, dan teknologi sekuritas yang digunakan pada oracle merupakan teknologi terbaru, diantaranya adalah :
1.      Oracle Identity Management
Oracle Identity Management merupakan infrastruktur terintegrasi yang menyediakan layanan keamanan secara terdistribusi untuk produk-produk oracle dan aplikasi enterprise lainnya. Berikut adalah beberapa komponen dan kemampuan dalam Oracle Identity Management :
ü  Oracle Internet Directory (OID)
Adalah sebuah LDAP(Lightweight Directory Access Protocol) v3, direktori dengan kemampuan meta-direktori yang menyediakan aliran data antara satu atau lebih directory services dan database, sehingga data tersebut dapat disingkronisasi, dimana pada proses singkronisasi itu akan dilihat user profilenya.
ü  Oracle Directory Integration and Provisioning
Merupakan bagian dari Oracle Internet Directory yang memiliki kemampuan untuk melakukan singkronisasi antara Oracle Internet Directory dengan directory yang lain atau dengan user repository.
ü  Oracle Delegated Administration Services
Merupakan bagian dari OID yang menyediakan proxy yang dapat dipercaya berdasarkan pada administrasi dari informasi direktori pada user dan aplikasi administrator.
ü  Oracle Aplication Server Single Sign-On(SSO)
Menyediakan akses tunggal terhadap database oracle dan aplikasi web dari pihak ketga.
ü  Oracle Aplication Server Sertificate Authority
Oracle Aplication Server Sertificate Authority ini akan menghasilkan dan mempublikasikan sebuah sertifikat untuk mendukung dalam hal autentikasi, keamanan pesan, dll.

2.      Integrity
Oracle memiliki banyak mekanisme untuk memastikan integritas dari database, dan untuk mencegah kehilangan data.  Mekanisme dalam akses kontrol juga digunakan untuk menghindari adanya modifikasi atau penghapusan data dari pihak yang tidak berwenang.
ü  Data Integrity
Merupakan mekanisme untuk memastikan integritas dari sebuah data, jadi databasse server akan melakukan pengecekan setiap kali ada proses insert, update, ataupun delete.
ü  Entity Integrity Enforcement
Merupakan sebuah mekanisme untuk menjamin bahwa primary key dari sebuah tabel adalah sesuatu yang unik.
ü  Referential Integrity
Merupakan mekanisme untuk memastikan integritas data berdasarkan hubungan antara satu tabel dengan tabel lainnya, jadi akan dicocokkan apakah foreign key sudah sesuai dengan primary keynya.

3.      Authentication & Access Controls in Oracle
Oracle juga menyediakan mekanisme autentikasi untuk memastikan bahwa identitas dari user yang ingin mengakses benar-benar sudah dikenali(terdaftar). Untuk mengakses kedalam database, user harus memasukkan username dan password yang benar. Hal ini dilakukan untuk mencegah adanya akses dari pihak-pihak yang tidak berwenang. Dalam oracle juga ada otorisasi untuk menentukan hak akses pada masing-masing user.

4.      Privileges
Dalam oracle diatur bahwa semua user hanya dapat mengakses data sesuai dengan privilegesnya, misalnya ada user yang hanya dapat melihat data namun ada juga user yang dapat melakukan modifikasi data ataupun penghapusan data, tergantung privileges yang dimiliki oleh user tersebut. Jadi ketika kita membuat sebuah user harus ditentukan privileges apa saja yang dimilikinya. Ada dua tipe privileges, yaitu column level privileges yang dapat langsung kita buat ketika user dibuat, dan yang kedua adalah row level privileges yang mana privilegesnya dapat diberikan secara program atau menggunakan Oracle Label Security.



5.      Roles
Roles  memungkinkan administrator untuk mengoptimalkan dalam hal mengatur privileges dari user.beberapa roles yang ada pada oracle adalah :
ü  Database roles
ü  Global roles
ü  Enterprise roles
ü  Secure application roles

6.      Auditing
Oracle mengizinkan proses auditing secara selektif terhadap setiap tindakan yang dilakukan oleh user untuk memberikan akuntabilitas. Rekaman dari proses audit itu akan menjadi alat yang sangat berguna untuk mengidentifikasi tindakan-tindakan user yang mencurigakan. Proses auditing bisa dilakukan terhadap level yang berbeda, misalnya : by user, by statement, by privileges, by schema object.

7.      Views, Stored Program Units, Triggers
Kita bisa menambahkan Views dan Stored Program Units sebagai sistem keamanan tambahan, dimana view dapat membatasi akses user terhadap baris ataupun kolom dari tabel yang sudah ditentukan. Sedangkan Stored Program Units seperti triggers dapat kita gunakan untuk beberapa tujuan seperti melakukan tugas yang saling berkaitan, melakukan pengecekan secara kompleks dalam hal otorisasi, dan membatasi operasi DML tertentu.

8.      Data Encryption
Untuk menjamin keamanan data, maka oracle juga melakukan proses enkripsi terhadap data-data yang disimpannya menggunakan algoritma Data Encryption Standard(DES). Dalam algoritma DES sudah termasuk cara untuk melakukan enkripsi dan cara mendeskripsikannya kembali.

9.      Hight Availability
ü  User Profile
Mekanisme pembatasan resource dan user profil berfungsi untuk mencegah manipulasi data yang sifatnya merusak dari user tertentu. Beberapa system resource yang dapat dibatasi diantaranya adalah :
-          Total hubungan dan waktu tunggu.
-          Jumlah total dari input atau output.
-          Jumlah dari instruksi yang jalan secara bersamaan.
-          Jumlah memory yang digunakan
-          Gabungan dari system yang digunakan.
ü  Online Backup and Recovery
Oracle memastikan ketersediaan data dengan cara melakukan online backup dan recovery system. Oracle menyediakan metode yang terintegrasi untuk membuat, mengatur, dan mengembalikan data backup dari database. Sistem oracle masih dapat melakukan proses backup secara online meskipun pada saat-saat dimana aktivitas puncak terjadi.
ü  Advanced Replication
Fasilitas advanced replication pada oracle dapat digunakan untuk meningkatkan Availability dari sebuah sistem, karena dengan menggunakan advanced replication ini konsistensi dari sebuah data dapat dijamin.
ü  Data Partitioning
Data Partitioning ini merupakan alat yang sangat bermanfaat untuk meningkatkan performa dan skala dari aplikasi yang menggunakan oracle server. Oracle mengizinkan pembagian sebuah tabel menjadi partisi-partisi tertentu sehingga operasi DML dapat dilakukan secara paralel.
ü  Real Aplication Cluster
Real Aplication Cluster menyediakan level yang sangat tinggi dalam hal ketersediaan data(hight availability). Karena oracle menjalankan dua atau lebih sistem dalam sebuah cluster, yang secara bersamaan terkoneksi ke database, sehingga apabila terjadi error pada salah satu sistem database tersebut masih bisa diakses karena masih ada sistem yang terkoneksi, dan sistem yang masih aktif tersebut akan melakukan recovery pada sistem yang error sehingga dapat berjalan lagi.

10.  Proxy Authentication in Oracle
Proxy authentication adalah sebuah proses penggunaan server perantara yang menghubungkan antara oracle server dan client untuk autentikasi user. Fitur ini dirancang sedemikian rupa sehingga perantara dapat bertindak atas nama satu set user tertentu, setelah server perantara melakukan autentikasi terhadap database yang ada pada oracle server.  Dengan kata lain database menggunakan kedua identitas, yaitu identitas server perantara dan identitas client untuk proses autentikasi.

11.  Application Context in Oracle
Fasilitas ini memungkinkan kita untuk membuat kebijakan sendiri dalam hal keamanan dan kemudian menghubungkannya dengan aplikasi, sehingga parameter keamanannya lebih flexibel.