Back-End Programming, XML dan Keamanan Data

Back-End Programming

Back-End programming adalah program yang berjalan pada database secara otomatis ketika terjadi suatu pemicu tertentu. Dalam oracle ada beberapa metode untuk melakukan back-end programming, yaitu dengan trigger dan stored procedure.

Trigger

Trigger adalah blok PL/SQL yang disimpan dalam database dan akan diaktivasi ketika kita melakukan statement-statement SQL (DELETE, UPDATE, dan INSERT) pada sebuah tabel. Aktivasi trigger didasarkan pada event yang terjadi di dalam tabel tersebut sehingga trigger dapat membantu dalam menjaga integritas dan konsistensi data. Implementasi trigger yang sering ditemui dalam dunia nyata adalah untuk mengeset dan mengubah nilai kolom dalam suatu tabel sehingga validasi nilai dari tabel tersebut akan terjaga. Adanya trigger dalam database akan meringankan kita dalam pembuatan aplikasi karena di dalam aplikasi yang kita buat, kita tidak perlu lagi untuk melakukan validasi data.

Berikut adalah daftar yang mungkin untuk aktivasi trigger :

Event

Keterangan

Before Insert Diaktifkan sekali sebelum statement insert
After Insert Diaktifkan sekali setelah statement insert
Before Update Diaktifkan sekali sebelum statement update
After Update Diaktifkan sekali setelah statement update
Before Delete Diaktifkan sekali sebelum statement delete
After Delete Diaktifkan sekali setelah statement delete

Model-model yang digunakan untuk menspesifikasi aturan basis data aktif adalah model ECA (Event-Condition-Action). Aturan dalam model ECA memiliki tiga komponen yaitu:

  • Event, yang memicu suatu rule tersebut biasanya berupa operasi perubahan basis data yang secara eksplisit ditambahkan ke basis data. Namun pada umumnya, bisa berupa event temporal atau jenis event eksternal yang lain.
  • Condition, menentukan apakah suatu rule dijalankan atau tidak. Ketika suatu trigger dijalankan, maka bagian condition (bersifat optional) akan dievaluasi jika didefinisikan oleh yang membuat trigger. Jika evaluasi bagian condition bernilai TRUE maka aksi suatu rule dijalankan.
  • Action, biasanya berupa statement sql.

Manfaat trigger antara lain adalah :

  • Membuat integrity constraint yang kompleks.
  • Mencatat aktivitas suatu tabel (logging).
  • Sinkronisasi

Contoh Kasus :

Pada database supermarket, jika ada pembelian baru maka otomatis stok barang pada tabel barang akan berkurang sesuai dengan jumlah barang yang dibeli. Maka sintaks lengkapnya dalam pl / sql adalah sebagai berikut :

create table barang(
kode_barang varchar2(10) primary key,

nama varchar2(50),

stok_barang number

);

create table pembelian(

id_pembelian number primary key,

kode_barang varchar2(10),

constraint fk_kd_brg foreign_key (kode_barang) references barang(kode_barang)

jumlah_beli number,

harga number

);

create or replace trigger trg_stok_brg after insert on jumlah_beli for each row

begin

update barang set stok_barang =stok_barang – :new.jumlah_beli where id_pembelian = :new.id_pembelian;

end;

/

Stored Procedure

Subprogram adalah PL/SQL Blok yang dipanggil dengan sekumpulan parameter. PL/SQL memiliki dua jenis subprogram yaitu: procedure dan function. Dimana secara umum procedure digunakan untuk melaksanakan aksi dan function digunakan untuk komputasi suatu nilai.

Stored procedure adalah subprogram yang disimpan di dalam database berupa SQL + Bahasa prosedural. Ada beberapa kelebihan yang dapat diperoleh dengan menggunakan stored procedure, meliputi :

  • Dijalankan di database server -> performance lebih baik, network trafik lebih rendah.
  • Tools DBA -> praktis, selalu tersedia di database server.
  • Dapat digunakan oleh banyak aplikasi
    • Standarisasi business logic.
    • SP dapat dipanggil oleh aplikasi luar
  • Dapat memanfaatkan tipe, fungsi yang disediakan DBMS
  • Powerfull, tools sangat penting bagi DB designer, DB programmer dan DBA
  • Hampir semua RDBMS mensupport.
  • Walaupun syntax berbeda, umumnya menggunakan prinsip yang sama

XML (Extensible Markup Language)

XML adalah markup language sepertinya halnya HTML untuk dokumen yang mengandung informasi terstuktur dan ditujukan untuk pertukaran dokumen via web. XML berberntuk file teks yang cross platform, independen terhadap software dan hardware. Berikut adalah spesifikasi XML :

  • Tag: <nama> budi </nama>
    • Tag didefinisikan sendiri.
  • Tag dapat mempunyai atribut,
    • contoh : <daftar_mahasiswa jumlah = “40”> … </daftar_mahasiswa>
  • Struktur -> hirarki (tag dalam tag),
    • contoh: <mahasiswa><nama> susis </nama></mahasiswa>

Keuntungan XML :

  • Self Documenting -> dengan melihat tag, dapat diketahui isi dokumen.
  • Dapat dibaca software dan manusia.
  • Fleksibel
  • Dapat dikembangkan tanpa melanggar format lama.
    • Contoh: pada <pengarang>, tambah tag <telepon>, maka XML yang lama tetap dapat dibaca.
  • Hirarkis -> dapat merepresentasikan data kompleks
  • Independen terhadap bahasa pemrograman dan sistem operasi

Kerugian XML :

  • Pengulangan tag -> tidak efisien, ukuran file membengkak

Beberapa aturan XML :

  • Setiap tag harus ada penutupnya.
  • Penamaan Tag
    • case sensitive. <nama> tidak sama dengan <Nama>.
    • Tidak diawali dengan angka
    • Tidak mengandung spasi
    • Hindari ‘-’ dan ‘.’
  • Urutan hirarki harus benar.
    • Contoh yang salah: <mahasiswa> <nama> susis </mahasiswa></nama>
  • Setiap XML harus mengandung root (akar)

<root>

<child>

<subchild>…..</subchild>

</child>

</root>

  • Setiap atribut harus dalam tanda petik. Contoh:
    • <surat tanggal = “12/12/2007”>
    • <catatan oleh = “ Jum’at ” >
  • Komentar dalam XML:
    • <!—baris komentar –!>

Untuk membaca XML diperlukan proses parser. Parser XML dapat dilakukan dengan dua cara, yaitu :

  • Tree based, isi XML dipindahkan ke memori terlebih dulu -> DOM (Document Object Model).
  • Event based -> tidak dipindahkan ke memori. Fungsi callback dipanggil setiap menemui element. -> SAX (Simple API XML)

Keamanan Data

Sistem database dapat didefinisikan sebagai komputerisasi sistem penyimpanan data yang tujuannya untuk memelihara informasi serta agar informasi tersedia pada saat dibutuhkan. Dalam sistem database itu perlu dijaga keamanan datanya karena data yang diakses oleh pihak yang tidak berwenang akan merugikan pemilik database tersebut baik database miliki perusahaan, kelompok tertentu atau bahkan perorangan.

  1. Fisikal, lokasi-lokasi dimana terdapat sistem komputer haruslah aman secara fisik terhadap kerusakan.
  2. Manusia, dijaga dari pihak yang tidak berwenang untuk menghindari manipulasi data olehnya.
  3. Sistem Operasi, kelemahan ini memungkinkan pengaksesan data oleh pihak tak berwenang, karena hampir seluruh jaringan sistem database menggunakan akses jarak jauh.
  4. Pengaturan hak akses sistem basis data yang baik.

Berikut adalah poin-poin penting yang harus diperhatikan dalam keamanan data :

1. Otorisasi, meliputi :

  • Pemberian Wewenang atau hak istimewa (priviledge) untuk mengakses sistem atau obyek database
  • Kendali otorisasi (=kontrol akses) dapat dibangun pada perangkat lunak dengan 2 fungsi :
  • Mengendalikan sistem atau obyek yang dapat diakses
  • Mengendalikan bagaimana pengguna menggunakannya
  • Sistem administrasi yang bertanggungjawab untuk memberikan hak akses dengan membuat account pengguna.

2. Tabel View

Merupakan metode pembatasan bagi pengguna untuk mendapatkan model database yang sesuai dengan kebutuhan perorangan. Metode ini dapat menyembunyikan data yang tidak digunakan atau tidak perlu dilihat oleh pengguna. Contoh pada Database relasional, untuk pengamanan dilakukan beberapa level :

  • Level Relasi : pengguna diperbolehkan atau tidak diperbolehkan mengakses langsung suatu relasi.
  • Level View : pengguna diperbolehkan atau tidak diperbolehkan mengakses data yang terapat pada view.
  • Read Authorization : pengguna diperbolehkan membaca data, tetapi tidak dapat memodifikasi.
  • Insert Authorization : pengguna diperbolehkan menambah data baru, tetapi tidak dapat memodifikasi data yang sudah ada.
  • Update Authorization : pengguna diperbolehkan memodifikasi data, tetapi tidak dapat menghapus data.
  • Delete Authorization : pengguna diperbolehkan menghapus data.

3. Backup data dan Recovery, tindakan ini diperlukan untuk mencegah kehilangan data dari hal-hal yang tidak terduga.

  • Backup : proses secara periodik untuk membuat duplikat dari database dan melakukan logging file media penyimpanan eksternal.
  • Jurnaling : proses menyimpan dan mengatur log file dari semua perubahan yang dibuat di database untuk proses recovery yang efektif jika terjadi kesalahan.
  • Isi Jurnal :
    • Record transaksi :
      • Identifikasi dari record
      • Tipe record jurnal (transaksi start, insert, update, delete, abort, commit)
      • Item data sebelum perubahan (operasi update dan delete)
      • Item data setelah perubahan (operasi insert dan update)
      • Informasi manajemen jurnal (misal : pointer sebelum dan record jurnal selanjutnya untuk semua transaksi)
    • Record checkpoint :
      • Suatu informasi pada jurnal untuk memulihkan database dari kegagalan, kalau sekedar redo, akan sulit penyimpanan sejauh mana jurnal untuk mencarinya kembali, maka untuk membatasi pencarian menggunakan teknik ini. Recovery : merupakan upaya untuk mengembalikan basis data ke keadaaan yang dianggap benar setelah terjadinya suatu kegagalan.

4. Kesatuan data dan Enkripsi :

  • Enkripsi : Mengkodekan informasi pada data dengan sandi khusus yang hanya dapat dibuka oleh pihak yang berwenang / memegang kuncinya
  • Integritas : Metode pemeriksaan dan validasi data (metode integrity constrain), yaitu berisi aturan-aturan atau batasan-batasan untuk tujuan terlaksananya integritas data.
  • Konkuren : mekanisme untuk menjamin bahwa transaksi yang konkuren pada database multi user tidak saling menganggu operasinya masing-masing. Adanya penjadwalan proses yang akurat (time stamping).

Referensi

2007. Ryan Mudafiq, www.Ilmukomputer.com

2012. Pratama. gogopratamax.blogspot.com

cs.upi.edu

elearning.cs.upi.edu

Integritas Data dan Transaksi – Concurrency

Pendahuluan

Sistem basis data merupakan sekumpulan basis data dengan para pemakai, perancang dan pengelola basis data, serta sistem yang mendukungnya secara bersama-sama. Ada beberapa poin penting yang mendukung berjalannya sebuah sistem basis data diantaranya adalah integritas data (data integrity), transaksi (transaction), konkurensi (concurrency), back-end programming dan keamanan data (security) serta perangkat dan bahasa yang mendukung untuk transfer data seperti XML.

 

Integritas Data

Integritas data artinya akurasi dan kebenaran data. Integritas data dalam sebuah sistem basis data harus dijaga untuk menjaga kebenaran data yang disimpan. Ada beberapa cara dan tujuan dalam menjaga integritas data, diantaranya :

  • Memasukkan aturan bisnis di dalam database
  • Menjaga agar data yang tidak valid tidak masuk ke database
  • Menjaga konsistensi data pada relasi keterkaitan antar tabel

Mengapa harus menangani integritas data pada level database programming ? Karena :

  • Menangani integritas data pada level database lebih murah dan mudah dibandingkan dengan menanganinya di level aplikasi
  • Bugs akibat data yang tidak valid pada database tidak mudah ditemukan dan dapat muncul di kemudian hari
  • Ketahanan database akan lebih kuat untuk jangka panjang jika ditangani dengan benar

Berikut ini adalah jenis-jenis integritas data yang disertai dengan contoh kasusnya :

  • Create Domain,  yaitu membuat tipe data baru. Fungsi ini biasa digunakan untuk menangani data yang membutuhkan aturan bisnis sendiri,
    • Contohnya : membuat tipe data “gender” untuk yang isinya hanya boleh berisi pria atau wanita ->
    • Maka sintaksnya dalam SQL adalah :
      create domain gender char(2) constraint gender_domain check ( value in(‘pria’,’wanita’));
  • Not NULL, yaitu menjaga agar suatu data tidak kosong dengan kata lain harus ada value-nya.
    • Contohnya nama matakuliah pada tabel mata kuliah tidak boleh kosong.
    • Maka sintaksnya dalam pl / sql :
    • nama_matkul varchar2(15),
    • constraint nn_ matkul not null (nama_matkul)
  • Unique, yaitu membuat agar suatu data tidak memiliki nilai yang sama dengan record lainnya dalam tabel yang sama.
    • Contohnya email pada tabel akun_facebook hanya boleh satu email untuk satu akun.
    • Sintaksnya :
    • email varchar2(15),
    • constraint u_mail unique (email)
  • Primary key, merupakan gabungan antara not null dan unique.
    • Misalnya NIM pada tabel mahasiswa.
    • nim char(7) not null,
    • constraint pk_ nim primary key (nim)
  • Check, memeriksa data dengan aturan bisnisinya sendiri tanpa membuat tipe data baru.
    • Contohnya sebelum memasukkan nilai ujian pada tabel nilai, data diperiksa terlebih dahulu. Data tidak boleh masuk jika bernilai negatif.
    • nilai number,
    • constraint chk_nilai check (nilai > 0)
  • Referential Integrity, adalah integritas pada relasi antar tabel. Contohnya jika kolom NIM mahasiswa pada tabel nilai mengacu ke kolom NIM pada tabel mahasiswa, dan terjadi perubahan (delete atau update) pada NIM di tabel mahasiswa, maka ada beberapa pilihan yang dapat dilakukan terhadap NIM yang di tabel nilai, diantaranya adalah :
    • Delete cascade, hapus record pada kedua tabel yang bersangkutan
    • Delete set null, hapus record di tabel asal dan value record pada tabel yang mengacu di jadikan NULL
    • Update cascade, perbarui isi record pada kedua tabel
    • nim char(7),
    • constraint fk_nim foreign key (nim) references mahasiswa (nim) on delete cascade / on delete set   null /  on update cascade 
 

Transaksi dan Concurrency

Transaksi pada basis data adalah satu atomic operasi berupa lojik pekerjaan maupun lojik recovery (pemulihan) yang bisa terdiri dari beberapa intruksi. Tujuan dari transaksi adalah menjaga database dari kehilangan data dan kerusakan, seperti system crash dan pengaksesan data yang sama secara bersamaan oleh dua aplikasi yang berbeda yang menimbulkan gangguan.

Ada empat elemen dalam transaksi yang biasa disingkat ACID, yaitu :

  • Atomicity,  semua berhasil atau semua gagal
  • Consistency,  transaksi mempertahankan konsistensi database
  • Isolation,  transaksi terisolasi satu dengan yang lain
  • Durability,  setelah commit update harus survive di database

Dan ada dua jenis transaksi yang paling penting dalam sistem basis data adalah :

  • Commit, memberi tanda bahwa transaksi telah selesai. Update dibuat permanen (bahkan jika setelah commit terjadi kegagalan system). Pada implementasinya, contohnya di konsol SQL command, setelah proses transaksi selesai untuk commit tinggal ketikkan -> commit;
  • Rollback, memberi tanda bahwa transaksi gagal. Semua update harus di-undo. Pada implementasinya, contohnya di konsol SQL command, setelah proses transaksi selesai untuk membatalkan transaksi tadi tinggal ketikkan -> rollback;

Untuk lojik recovery atau system recovery database dilakukan ketika terjadi kegagalan media, kegagalan system atau kesalahan pada transaksi. Sistem recovery menggunakan fungsi rollback dan checkpoint. Checkpoint adalah interval tertentu pada perjalanan transaksi basis data yang menyimpan keadaan basis data saat itu. Checkpoint dapat dilakukan untuk me-recovery database secara backward (undo) maupun forward (redo).

Sedangkan concurrency adalah sebuah mekanisme pada system basis data yang mengijinkan banyak transaksi pada saat bersamaan untuk mengakses data yang sama tanpa adanya gangguan. Pada umumnya terdapat 3 masalah utama pada concurrency :

  • Lost update problem, ketika dua user mengupdate dua buah data yang sama
    • Contoh :
Satuan Waktu Transaksi A Transaksi B
1 Retrieve r
2 Retrieve r
3 Update r
4 Update r
    • Dari contoh diatas, maka transaksi A tidak akan dianggap dan data update pada transaksi A akan di overwrite oleh transaksi B Ini akan menimbulkan lost update problem pada transaksi A.
  • Uncommited dependency problem, ketika user yang satu me-retrieve data dan user yang lain me-rollback data tersebut
    • Contoh :
Satuan Waktu Transaksi A Transaksi B
1 Update r
2 Update r
3 Rollback
    • Dari contoh diatas, maka transaksi A akan menerima data yang salah karena pada transaksi B saat di update terjadi kesalahan kemudian di rollback.
  • Inconsistent analysis problem, ketika user yang satu meretrieve data dan user yang lain mengupdate data tersebut
    • Contoh :
Satuan Waktu Transaksi A Transaksi B
1 Retrieve r1
2 Retrieve r2
3 Update r1
4 Commit
5 Update r3 = r1 + r2  
    • Dari contoh diatas, maka transaksi A akan menghasilkan data yang salah dan tidak sesuai database karena saat analisis di transaksi A terjadi update data pada salah satu datanya.

Untuk menangani masalah-masalah tersebut, dilakukan proses locking, jika sebuah transaksi ingin record/resource tidak berubah dalam waktu tertentu maka dia bisa meminta lock. Ada dua jenis lock yaitu :

  • Exclusive Lock (Xlock) -> write lock
  • Shared Lock (Slock) -> read lock

Bagaimana cara kerjanya?

  • Jika transaksi A memegang Xlock pada sebuah record, maka permintaan lock (X,S) pada record yang sama harus diabaikan.
  • Jika transaksi A memegang Slock pada record R maka :
    • Permintaan Xlock transaksi lain pada R ditolak
    • Permintaan Slock transaksi lain pada R diterima

Tapi, ada satu masalah yang dapat terjadi ketika melakukan proses locking ini, yaitu deadlock. Yaitu, situasi dimana dua atau lebih transaksi dalam kondisi wait-state, satu sama lain menunggu lock dilepaskan sebelum dapat memulai. Cara penanganannya adalah :

  • Deteksi dan pecahkan deadlock
  • Deteksi deadlock -> wait-for-graph
  • Pecahkan deadlock -> salah satu dirollback paksa
  • Ostrich Algorithm  -> diabaikan
 

Referensi

cs.upi.edu

elearning.cs.upi.edu