Posts Tagged ‘MySQL’

Problem with MySQL Socket on Linux Ubuntu

Mengembangkan aplikasi berbasiskan Apache Web Server, PHP dan MySQL tanpa mengetahui seluk beluk mengenai Linux tentu seperti makan nasi tanpa lauk, kurang lengkap rasanya. Dan ketika kita mencoba untuk mengambil sejumlah lauk, ternyata kadang rasanya malah ga cocok sama selera kita atau justru malah terasa pahit. Itu yang mungkin aku rasakan ketika mencoba menginstall Apache Web Server, PHP dan MySQL di Ubuntu.

Bagi sebagian besar orang, menginstall modul baru di Ubuntu cukup dengan menggunakan perintah apt-get saja, dan secara otomatis paket program akan didownload dari repository Ubuntu dan dikonfigurasi secara otomatis pula. Seorang pengguna Ubuntu dapat dengan mudah menginstall MySQL Server dengan mengetikkan sudo apt-get install mysql di terminal atau console.

Dan dalam sekejap seharusnya paket MySQL akan terinstall dan bisa langsung dinikmati tanpa harus neko-neko dengan urusan tetek-bengek seperti konfigurasi dan sebagainya. Bila sang pengguna kurang beruntung, mungkin dia akan menemukan error seperti yang saya alami beberapa hari yang lalu dengan installasi MySQL seperti yang aku deskripsikan di bawah. Sebagai informasi saja, bahwa MySQL yang aku install tidak melalui apt-get seperti yang tertulis di atas, melainkan dari kompilasi secara langsung dari source code sehingga mungkin saja bisa berbeda masalah dan pemecahannya.

Tampaknya salah satu masalah yang paling sering dihadapi baik melalui apt-get atau dengan compile sendiri adalah error ketika mulai menjalankan MySQL Daemon dengan perintah mysqld_safe atau mysql start yang ditandai dengan pesan “Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’” dan proses pun di kill karena error itu. Aku sempat kesulitan mencari solusinya di internet, berhubung juga banyak yang mengalami hal serupa, tapi setelah aku mencoba solusi dari mereka justru masalah ini masih belum terselesaikan. Akhirnya setelah sempat bingung-bingung, aku pun mencoba membaca dokumentasinya (seharusnya ini yang aku lakukan sejak awal sebelum membuang-buang waktu mencari di internet), dan memang dari sanalah semua permasalahan dapat diselesaikan.

(more…)

This entry was last modified on: July 27th, 2009 at 1:14

Portfolio: Jakarta Tourism Site

Sebagai sebuah situs yang dapat diakses oleh publik secara umum, saya ingin menunjukkan hasil kerja saya berupa situs pariwisata Jakarta. Proyek ini merupakan proyek pengembangan Content Management System multi-bahasa untuk Pemda DKI Jakarta melalui IT Directorate Bina Nusantara. Situs ini dapat diakses melalui jakarta-tourism.go.id.

Berikut adalah screenshot situs tersebut.

Enjoy Jakarta Screenshot

Enjoy Jakarta Screenshot

Situs ini dikerjakan sejak awal Desember 2008 dan diselesaikan dalam waktu kurang lebih 1 bulan. Menggunakan teknologi PHP 5, MySQL 5, Apache 2, dan dengan framework CodeIgniter. Desain dan layout dikerjakan oleh Herman, sedangkan saya mengerjakan bagian coding.

Fitur-fitur meliputi:

  • Multi bahasa (dapat menggunakan 2 bahasa bahkan lebih)
  • Fitur kalender, event dan news
  • Search dengan fasilitas full-text
  • Untuk backend tersedia fitur: file uploader (videos, images dan files), WYSIWYG editor, menu editor

Signature saya dapat dilihat pada header file dengan nama header HTTP X-Sig-Developed-By (untuk melihat header HTTP, dapat menggunakan addons Firebug atau Web Developer di Firefox).

This entry was last modified on: February 11th, 2009 at 22:57

Jawaban MySQL mengenai lisensi

Di entry sebelumnya, aku menuliskan bahwa lisensi ganda open-source dan GPL pada MySQL membuatku bingung, ditambah lagi dengan membaca sebuah blog mengenai lisensi ini juga. Oleh karena itu beberapa hari yang lalu aku mencoba menghubungi pihak MySQL untuk menanyakan soal lisensi MySQL ini bila digunakan untuk mengerjakan proyek web dari orang lain.

Pertanyaan yang aku ajukan kira-kira seperti ini:

I have a scenario where I will contracted by someone to build a website using these technologies (PHP, Apache, MySQL). I write my PHP code and using MySQL as the database software, and the source must be kept in private and may not be released to public. That mean this will be closed source project. I will do my job on my own computer. After the project finished, my work will be placed on my client’s server using the same technologies I used, including MySQL. Should I buy commercial license for MySQL, or may I use the GPL licensed? The same question go about my future client, should they buy the commercial license, or may they keep using GPL licensed MySQL?

Regards,
William

Dua hari kemudian pertanyaan ini dijawab oleh pihak MySQL AB:

Thank you for contacting MySQL,

You don’t need a commercial license to develop with MySQL, unless you are packaging MySQL server with your solution and selling it as a package.

Your customer also doesn’t need the commercial license provided they are again not distributing MySQL.  They may choose to purchase Enterprise simply because it gives them support and monitoring/tuning tools, and if they are relying on the solution then this makes sound business sense.

Hope this helps,

MySQL Web Team

Sekarang masalah sudah cukup clear. Selama proyek yang kita buat tidak dibundling dengan MySQL, kita tetap dapat menggunakan MySQL secara gratis dan tidak harus merilis kode kita dalam GPL karena setau saya terdapat juga lisensi FLOSS yang memodifikasi beberapa hal dalam lisensi GPL bila diperlukan. Selain itu dari pihak client juga hanya perlu membeli lisensi komersial MySQL bila ingin menggunakan fitur yang tidak terdapat di MySQL standar (yang saya rasa sudah disediakan cukup banyak di MySQL yang open-source).

Semoga dengan pertanyaan ini juga bisa membantu orang lain yang bingung mengenai lisensi MySQL.

This entry was last modified on: October 15th, 2009 at 17:03

Lisensi open source yang memusingkan

Catatan (17 Oktober 2009): Bila Anda masuk ke blog ini untuk mencari arti dari open-source dan semacamnya, Anda dapat melihatnya di bagian comment yang merupakan klarifikasi dari Pak Eus mengenai arti open-source dan free software yang sebenarnya. Komentar tersebut merupakan tanya jawab dan klarifikasi antara saya dan Pak Eus dalam Bahasa Inggris, yang untuk sementara dapat diterjemahkan dari Google Translate dengan klik di sini. Untuk ke depannya saya akan menulis artikel baru yang dikhususkan untuk membahas tentang open-source ini. Artikel di bawah pada dasarnya hanya merupakan sebuah artikel yang membahas kebingungan saya terhadap dual-lisensi yang diadopsi oleh MySQL, dan hal lainnya yang tertulis seperti lisensi-lisensi software yang ada hanya merupakan penjelasan dari apa yang saya ketahui 1 tahun lalu tentang lisensi software bersamaan saat saya menulis artikel ini. Terima kasih atas perhatiannya.

Seringkali kita mendengar kata “program / software open-source” di mana-mana mulai dari internet sampai media cetak dan elektronik lainnya. Open source merupakan sebuah konsep untuk program yang source code-nya dapat dilihat oleh publik dan setiap orang bisa menggunakannya untuk tujuan apapun, baik non-komersial ataupun komersial.

Bila pada program berbayar sering kita dengar yang namanya copyright atau hak cipta, maka pada program open-source kita akan mendengar copyleft. Pada dasarnya copyleft merupakan kebalikan dari copyright (berhubung left memang lawan dari right). Copyright bertujuan melindungi hak cipta sebagai sebuah hasil karya dan hak ciptanya tidak boleh diutak-atik tanpa ijin dari penciptanya. Sedangkan copyleft bertujuan melindungi sebuah hasil karya open-source agar tetap open-source.

(more…)

This entry was last modified on: October 17th, 2009 at 20:39

Query yang aneh?

No Comments Computer

Kalau biasanya aku (dan rasanya sebagian besar orang) menggunakan function count() di SQL, baru aja kemaren aku menggunakan function ini dengan cara yang berbeda dengan biasanya. Bukan sekedar COUNT(*), bukan sekedar COUNT(DISTINCT column1), juga bukan sekedar COUNT(column1), melainkan COUNT(IF(expression, true_value, false_value)).

Padahal sebelumnya aku menggunakan banyak subquery sebelum menemukan cara ini. Entah apakah dari sisi waktu dan lama processing lebih efiesien atau ga, soalnya aku belum sempat mencoba untuk menghitung data yang memiliki row dalam jumlah besar. Tapi aku rasa sih seharusnya lebih efisien daripada menulis subquery secara berulang-ulang untuk mengambil suatu hasil grouping.

Nanti kalau sempat mau bikin data dummy dulu trus nyobain hasil dari query COUNT() di atas.

Web development rules!

Sebelum hari ini, saya ga gitu peduli mengenai hal ini. Tapi kemaren tiba-tiba aja saya ga habis pikir kalau untuk berkecimpung di dunia web development, paling ga harus bisa beberapa hal:

  1. HTML
  2. CSS
  3. JavaScript
  4. PHP (Server-side scripting)
  5. MySQL (Database)
  6. Desain Front-end

Yang pertama adalah HTML alias Hypertext Markup Languange yaitu bahasa dasar pembentuk website. Sebuah website harus dibangun didasarkan oleh bahasa ini. Sampai saat ini HTML ini sendiri memiliki 2 standar umum yaitu HTML 4.0 dan juga XHTML 1.0. Yang paling baru adalah XHTML 1.0 yang lebih sering digunakan belakangan karena dukungan timbal balik terhadap CSS.

Yang kedua adalah CSS alias Cascading Style Sheet yaitu bahasa sederhana untuk pemberian style atau gaya pada layout HTML yang ada. Melalui CSS, web designer dapat dengan mudah mengubah jenis huruf (font), warna huruf, style huruf, background, posisi element dan sebagainya. Sebuah website tidak akan tampak “hidup” tanpa CSS.

Yang ketiga adalah JavaScript yang merupakan bahasa pemrograman yang bisa diemplementasikan terhadap elemen-elemen di HTML. Melalui JavaScript, elemen-elemen pada halaman web bisa menjadi dinamis dengan adanya animasi atau perubahan content secara langsung tanpa membuka ulang halaman web tersebut. Teknologi ini disebut sebagai AJAX atau Asynchronous JavaScript and XML. Jadi fungsi JavaScript adalah untuk membuat halaman web lebih “hidup” lagi.

Yang keempat adalah PHP atau singkatan rekursif dari PHP: Hypertext Processor. PHP merupakan bahasa pemrograman server-side. Tentu saja masih banyak bahasa lainnya yang dapat digunakan seperti ASP, ColdFusion, JSP. Komponen inilah yang berfungsi sebagai jantung dari web dinamis.

Yang kelima adalah MySQL yang merupakan software database management system. Banyak pula bentuk software database management system lainnya seperti PostgreSQL, SQL Server, Oracle. Gunanya adalah untuk menyimpan data-data yang diproses oleh server-side scripting seperti PHP atau ASP di atas.

Yang terakhir dan juga terpenting dalam web-development adalah pengetahuan mengenai front-end seperti layout maupun desain interface dari suatu halaman web. Terlihat mudah, akan tetapi justru dapat menyebabkan masalah bagi orang yang tidak terlalu mendalami mengenai hal ini. Perpaduan warna yang salah, posisi menu yang tidak baik, bentuk tulisan yang tidak sesuai dengan isi web, dapat dengan mudah membuat pengunjung website tidak mau kembali lagi ke website yang ada.

Bahkan jika mau ditambahkan dengan beberapa hal kecil yang tidak harus diketahui tetapi justru menjadi nilai tambah untuk diketahui. Pengetahuan mengenai web-server seperti Apache akan menjadi lebih bagus agar dapat mengelola web dengan baik.

Jadi kalau mau belajar banyak hal hanya dalam satu bidang, belajar aja untuk menjadi seorang web-developer. ;)

This entry was last modified on: April 13th, 2008 at 0:58

SQL Injection

Di entry kali ini saya akan membahas sedikit mengenai SQL Injection yang merupakan salah satu istilah dalam dunia teknologi khususnya dalam teknologi database. Kebetulan hari ini saya mengikuti mata kuliah Sistem Basis Data atau yang lebih dikenal dengan Database dan saat itu ada yang bertanya mengenai SQL Injection ini.

SQL Injection merupakan salah satu masalah vulnerability dalam security dalam implementasi database. SQL sendiri merupakan singkatan dari Structured Query Languange. Artinya pengelolaan database dilakukan dengan mengirimkan perintah-perintah (queries) yang terstruktur dengan bahasa yang tersedia. Nah, SQL Injection yang secara harafiah berarti penyuntikan SQL memiliki artinya menyisipkan perintah atau query ke dalam query yang akan digunakan dalam database SQL.

Penggunaan SQL sebagai salah satu database management system turut mempopulerkan istilah SQL Injection ini dan menjadikan SQL Injection sebagai salah satu masalah keamanan yang cukup berbahaya bila tidak ditangani dengan serius. Apalagi penggunaan database dengan basis SQL seperti MySQL, Microsoft SQL Server, PostgreSQL cukup populer dibanding database lainnya.

SQL Injection umumnya terjadi karena ketidaktelitian programmer dalam membuat script yang akan dijadikan query SQL. Dan tentu saja hal ini bukan merupakan sesuatu yang mudah untuk dihilangkan karena setiap programmer memiliki tingkat ketelitiannya masing-masing saat membuat program.

Mari kita lihat contoh penerapan SQL Injection seperti di bawah. Perlu diketahui bahwa contoh yang saya gunakan adalah dengan bahasa pemrograman PHP dan database MySQL.

Seringkali ketika kita akan mengambil data dari database, kita akan menggunakan query seperti

"SELECT * FROM table_user WHERE username = '".$username."';"

Ketika user memasukkan data ke variable $username dengan nilai etersoul maka kode di atas akan berubah menjadi:

SELECT * FROM table_user WHERE username = 'etersoul';

Hasil di atas tampak tidak bermasalah dan dengan mudah sang programmer akan mendapatkan semua data mengenai seorang user dari table_user yang memiliki username = ‘etersoul’. Masalah akan timbul bila seorang hacker (atau user lain) yang mencoba untuk memasukkan nilai ' OR 1 = 1; -- ke dalam variabel $username. Maka hasil dari penggunaan variabel tersebut adalah:

SELECT * FROM table_user WHERE username = '' OR 1 = 1; --'

Query di atas akan mengambil semua data yang terdapat dalam table_user karena terdapat nilai 1 = 1 yang selalu bernilai true. Sedangkan penggunaan -- berguna agar kode setelah tanda tersebut dianggap sebagai komentar (comment) dan tidak dieksekusi oleh SQL. Seorang hacker bisa saja menggunakan data yang telah didapat di atas untuk keperluan yang buruk misalnya menggunakan account user karena password telah diketahui (walau pada kenyataannya saat ini kebanyakan password telah dienkripsi atau diacak sebelum dimasukkan ke database).

Bila contoh di atas tidak cukup, mari kita coba menggunakan '; DROP TABLE table_user; -- sehingga menjadi:

SELECT * FROM table_user WHERE username = ''; DROP TABLE table_user; --'

Setelah query tersebut dieksekusi, maka hilanglah tabel table_user dari database Anda, kecuali Anda memiliki backup atas table itu.

Lalu bagaimana cara mencegah terjadinya SQL Injection ini? Cara yang dapat dilakukan cukup mudah. Di PHP sendiri disediakan fungsi mysql_real_escape_string() yang dapat digunakan untuk “membersihkan” (sanitize) string dengan melakukan escape atau perubahan terhadap karakter-karakter tertentu, misalnya karakter \ menjadi \\, ” menjadi \” sehingga tidak terjadi salah “asumsi” oleh SQL. Sedangkan untuk melakukan sanitize terhadap integer dapat digunakan fungsi intval(). Untuk float dapat digunakan floatval(). Sekarang mari kita lihat kode hacker di atas setelah di-sanitize dengan mysql_real_escape_string($username);

SELECT * FROM table_user WHERE username = '\' OR 1 = 1; --'

atau

SELECT * FROM table_user WHERE username = '\'; DROP TABLE table_user; --'

Yah, sekarang tanda ‘ telah di-escape menjadi \’ sehingga SQL tidak akan menganggap tanda kutip tersebut sebagai bagian dari perintah SQL untuk menutup tanda kutip sebelumnya, melainkan sebagai sebuah karakter.

Untuk bahasa pemrograman lainnya umumnya telah disediakan juga fungsi untuk melakukan escape terhadap string (umumnya fungsi tersebut menggunakan kata escape). Dalam PHP sendiri dapat digunakan mysql_escape_string(), akan tetapi fungsi ini tidak disarankan untuk digunakan karena tidak melakukan escape terhadap beberapa jenis karakter.

Yah, itulah sedikit penjelasan mengenai SQL Injection. Semoga hal ini dapat membantu Anda dalam membuat program yang baik dan aman. ;)

— Code is poetry —

This entry was last modified on: March 26th, 2008 at 17:37