Jumat, 14 Oktober 2011

Sikap menghadapi Masalah

Sebaik-baiknya manusia adalah dia yang paling bisa memberikan manfaat bagi orang lain. Untuk mencapai derajat kemuliaan, seorang insan tidak sekedar meneguhkan hasrat yang luhur dan mulia, namun sejak awal dia sudah memulainya dengan niatan yang juga mulia, dan juga dengan upaya serta perilaku yang jauh dari cela. Seperti lebah.
Lebah adalah makhluk Tuhan yang amat inspiratif: dia hanya mengambil yang baik-baik, melakukan dg cara-cara yang baik, dan menghasilkan yang terbaik.

Namun meskipun begitu, berusaha menjadi insan yang baik memang tidaklah selalu mudah. Setiap kita pasti pernah mengalami masa-masa di mana masalah datang menerjang sehingga membuat dada sesak dan kalut pikiran. Tapi ketika yang Anda perturutkan adalah perasaan kesal, tidak puas, dan segala perasaan yang intinya merasa tidak-cukup; maka itu jugalah yang pada akhirnya Anda dapatkan. Emosi buruk malah bisa menghambat datangnya kebaikan dan perasaan baik.

Maka yang penting adl bagaimana cara kita menyikapinya. Belajar dari orang sukses dan teladan, di kala masalah menghadang, mereka tidak memandangnya sebagai perihal yang permanen. Mereka tahu bahwa seiring (bukan setelah) dengan datangnya permasalahan, maka jalan dan kemudahan juga ada di sana. 

Tips Belajar

Langkah 3 : Aksi yang konsisten


Setiap orang dapat menetapkan tujuan serta menyusun rencana dan jadwal . Namun hanya siswa yang mampu melakukan tindakan yang konsisten setiap harilah yang akan mendaptkan hasil yang baik . Anda harus bisa membaca buku teks , membuat catatan , dan mengulangnya setiap hari .

Sayangnya jika anda seperti kebanyakan pelajar lain , anda akan terjebak pada kemalasan dan penundaan setiap waktu . Kadang2 anda merasa tidak ingin belajar terutama setelah merasa buruk tentang sesuatu . Ketika anda duduk dan memutuskan akan memulai belajar , tak terasa ujian sudah tiba !

Note : 4 langkah berikutnya adalah penerapan strategi "Super Learning" akan saya posting beberapa minggu lagi .

Langkah 2 : Perencanaan dan Penjadwalan


Anda dapat menetapkan tujuan luar biasa yang anda inginkan . Namun Anda tidak akan dapat mencapainya tanpa perencanaan dan penjadwalan waktu yang akan menuntun anda untuk mengetahui kapan harus melakukan sesuatu .

Anda harus belajar bagaimana menciptakan rencana keseluruhan untuk mencapai tujuan dan bagaimana menguasai waktu dengan jadwal .

Langkah 1 : Tentukan tujuan yang jelas !


Banyak siswa berpikir bahwa langkah pertama dalam belajar adalah membaca catatan dan buku teks . Saya yakin sebelum anda melakukannya , hal pertama yang anda lakukan adalah menetukan tujuan yang jelas tentang hasil yang anda inginkan . berapa nila A yang anda harapkan ?

Ini penting karena tujuan yang anda tetapkan akan menetukan cara anda belajar dan tentu
saja hasilnya ! Apakah jika anda menentukan nilai 100 dalam matematika , anda akan belajar dengan cara yang sangat berbeda daripada dengan anda bertujuan mendapatkan nilai 60 ? Tentu saja ! Ketika anda bertujuan mendapatkan nilai 100 , otak anda tahu bahwa tidak boleh ada kesalahan sedikit pun . Dengan demikian Anda akan mempelajari setiap poin yang berkaitan dengan silabus ! Hasilnya anda bisa mendapatkan nilai 100 atau paling tidak anda akan mendapat 90 atau lebih !

Kamis, 13 Oktober 2011

kegiatan Sehari-hari

 

Kegiatan yang sering saya lakukan setiap pagi setelah bangun tidur, membereskan rumah, memasak untuk sarapan dan bekal makan siang di tempat kerja. Kegiatan tersebut sudah menjadi rutinitas bagi saya setiap hari.  Selain itu juga bila waktu mendukung saya dan teman satu kos  pergi olahraga pagi/jogging ke Lapangan Merdeka Walk. Sebelum berangkat jogging sudah harus selesai masak. Saya dan teman-teman berangkat dari rumah Pukul  5.00 pagi. Pukul  6.30 saya berangkat kerja, karena kebetulan saya masuk kerja  Pukul  7.00 WIB.  

kegiatan di lingkungan tempat tinggal

di lingkungan tempat tinggal saya juga mengikuti community yaitu kumpulan  Muda-Mudi Marbun anak rantau . kegiatan yang dilakukan sekarang yaitu persiapan dalam penyambutan Natal & Tahun Baru nanti.
selain itu juga mengadakan kebaktian.





Kegiatan saya

Kegiatan saya saat ini salah satunya adalah bekerja. saya bekerja di sebuah Home Industri yang bergerak di bidang produksi makanan.

http://202.158.15.86/images/receipe/AnekaRotiManis.jpgMakanan yang kami produksi berupa roti. kegiatan utama saya di tempat kerja yaitu membuat laporan pemakaian bahan, membuat laporan penerimaan bahan, serta membuat laporan penjualan roti.
selain itu juga saya ikut serta dalam pembuatan roti, mulai dari membuat adonan, mencetak adonan sampai bagian packing.

 
 




jadi saya memahami sedikit banyak pembuatan roti. apabila teman-teman ataupun siapa yang baca blog ini bila pengen roti yang enak dan lezat pesan aja sama Dorlin ya. dijamin pasti enak.....
hehehehe jadi promosi ya....

Kegiatan saya

Di samping saya bekerja, saya juga sedang melanjutkan perkuliahan di salah satu Sekolah Tinggi yaitu STMIK Budidarma Medan.
saya kuliah sambil kerja. Dan saat saat ini saya sudah semester V.
di kampus saya banyak mendapat pengalaman hidup.
kegiatan di kampus mengikuti perkuliahan.







Manajemen Multi User

Menggunakan multi-user dalam sebuah blog memiliki kelebihan dan memberikan kemudahan bagi seorang admin dalam mengelola blog. Admin bisa membagi user ini dalam kelompok, misalnya ada yang sebagai pembuat artikel, moderator, pengatur layout, dsb. Multi-user juga bisa memberikan kerugian bagi seorang admin, jika admin tidak mengelola atau memanajemen user-user ini dengan benar. Multi-user berguna sekali bagi sekelompok orang yang memiliki ide, tujuan atau pikiran yang sama. Jika sekelompok orang ini ingin menyampaikna ide, tujuan atau berita dalam tema tertentu, maka dalam sebuah blog harus ada fasilitas agar masing-masing individu dalam kelompok ini bisa login pada blog dan bisa memposting artikel berdasarkan ide mereka. Jadi, isi artikel tidak hanya hasil pemikiran satu orang saja, melainkan juga berasal dari orang lain. Dalam sebuah blog yang multi-user harus ada minimal satu orang moderator yang bertugas untuk menyeleksi artikel yang masuk ke blog dan menampilkannya di blog setelah diseleksi atau disetujui.


1. Administrator
Seorang administrator memiliki akses tak terbatas ke dalam blognya. yaitu,
* Mengganti template atau theme
* Mengedit template atau theme
* Mengaktifkan semua plug-in
* Mengedit user
* Mengedit file2

 2. Editor
Seorang editor bisa memanajemen artikel-artikel yang masuk ke dalam blog, meyeleksi dan menampilkannya pada blog. Seorang editor tidak bisa menambah atau mengedit user. Seorang editor bisa memanajemen artikel yang dikirim oleh user lain dan mengubah isinya. Editor juga bisa menambahkan kategori dan mengatur komentar yang diberikan pengunjung atau menandai komentar sebagai spam jika ada.

3. Author
.Seorang author hanya bisa memanajemen artikel yang dibuat oleh dirinya sendiri. Author tidak bisa merubah atau menghapus milik author yang lain. Author juga bahkan tidak bisa memodifikasi komentar yang dikirimkan oleh pengunjung pada artikel yang bukan miliknya tapi author dapat mengedit komentar yang dikirimkan pada artikel miliknya sendiri.

4. Contributor
Seorang contributor hanya bisa menulis dan mengirimkan artikel, namun artikel ini tidak akan ditampilkan sampai mendapat persetujuan dari editor, author atau dministrator.

5. Subscriber
Yang hanya bisa dilakukan oleh seorang subscriber adalah menulis komentar pada sebuah artikel dan mengirimkannya.

File server vs Client server

File-Server vs Client / Server

Kantor 2000
Apa solusi klien / server? Sebuah cara yang berguna untuk memahami itu adalah untuk menggambarkan perbedaan antara sistem yang mendasari arsitektur file-server dan klien / server solusi. Dalam sebuah solusi file-server, ketika solusi Anda membutuhkan data, akses dan database mesin Jet (yang berjalan secara lokal pada workstation pengguna) menentukan bagaimana untuk langsung mengakses drive jaringan, file mana yang harus dibaca, dan apa data untuk mengambil. Karena mengambil data dari file database dapat memerlukan serangkaian permintaan dan tanggapan yang harus dikirim antara server dan workstation, lalu lintas jaringan meningkat. Misalnya, untuk mengedit catatan pada database file-server, mesin database Jet harus membaca indeks, mengambil data, membaca dan menulis ke file penguncian (file yang digunakan untuk mengkoordinasikan permintaan untuk mengedit catatan antara beberapa pengguna) , dan kemudian memperbarui indeks dan database itu sendiri.
 
Gambar  Sistem File-Server Khas

Sebuah database multiuser sistem dalam lingkungan file server terdiri dari:
  • Sebuah database yang berada pada file server jaringan menjalankan sistem operasi seperti Microsoft Windows NT Server atau Novell NetWare.
  • Satu atau lebih pengguna mengakses database dari perangkat lunak aplikasi workstation itu.
Dalam sistem client / server, database server jaringan memproses semua permintaan data pada server itu sendiri. Solusi berjalan pada workstation pengguna tidak meminta data pada tingkat file, tapi mengirim permintaan tingkat tinggi untuk server untuk mengeksekusi query yang spesifik dan mengembalikan hasilnya. Keuntungan utama dari teknik ini adalah bahwa lalu lintas jaringan berkurang karena hanya set hasil query dikembalikan ke workstation.
 
Gambar Sistem Client / Server Khas

Sebuah sistem klien / server ditandai dengan:
  • Database back-end yang berada di server, dan dikendalikan dan dipelihara oleh perangkat lunak server, seperti Microsoft SQL Server.
  • Satu atau lebih pengguna menjalankan aplikasi klien lokal, seperti proyek Access (. Adp), yang meminta data dari server melalui antarmuka seperti penyedia data OLE DB.
Kinerja dan kesederhanaan arsitektur file-server membuatnya ideal untuk kecil sampai sedang berukuran solusi. Faktor penentu utama ketika memilih apakah akan menggunakan file-server atau klien / arsitektur server adalah jumlah pengguna yang akan bekerja dengan solusi Anda. Sebagai batas absolut, sebuah database Access dapat menangani hingga 255 pengguna secara simultan, tetapi jika pengguna solusi Anda akan sering menambahkan dan memperbarui data, akses file-server umumnya terbaik untuk maksimum sekitar 25 sampai 50 pengguna.
Sebuah file database-server juga memiliki keterbatasan karena dipertahankan sebagai file dalam sistem file. Dengan mengisolasi file database semua di bawah kontrol dari sebuah server database, arsitektur client / server dapat menyediakan fitur-fitur canggih yang tidak dapat dilengkapi dengan arsitektur file-server. Sebagai contoh:
  • Online backup Gunakan scheduler otomatis untuk back up database Anda tanpa harus mengeluarkan pengguna dari database.
  • Tahan lama transaksi SQL Server log transaksi sehingga update dilakukan dalam transaksi selalu dapat dipulihkan atau digulung kembali jika salah satu klien atau komputer server gagal. Hal ini memungkinkan database SQL Server untuk memenuhi semua empat persyaratan transaksi ACID benar,
  • Keandalan yang lebih baik dan perlindungan data Jika baik workstation atau server file gagal sementara database Access (. Mdb) file yang ditulis ke, database mungkin rusak. Anda biasanya dapat memulihkan database yang rusak dengan menggunakan metode CompactDatabase baik dari DAO atau Microsoft Jet dan Objek Replikasi (Jro), tetapi Anda harus memiliki semua pengguna menutup database sebelum melakukannya. Hal ini jarang terjadi dengan database server seperti Microsoft SQL Server.
  • Proses lebih cepat permintaan Karena database Access (. Mdb) adalah sebuah sistem file-server, itu harus memuat mesin database Jet lokal untuk memproses query pada klien. Untuk database yang besar, ini dapat melibatkan memindahkan banyak data melalui jaringan. Sebaliknya, SQL Server query berjalan pada server, yang biasanya sebuah komputer jauh lebih kuat daripada workstation klien. Menjalankan query pada server meningkatkan beban pada server yang lebih dari sebuah solusi file-server akses, tetapi dapat mengurangi lalu lintas jaringan secara substansial - terutama jika pengguna memilih subset kecil dari data.
  • Maju hardware dukungan Uninterruptible power supplies, hot swappable disk drive, dan beberapa prosesor semua dapat ditambahkan ke server tanpa perubahan pada workstation klien.
Faktor lain yang perlu Anda pertimbangkan ketika memilih apakah akan menggunakan solusi file-server atau solusi client / server adalah jumlah data solusi Anda akan diperlukan untuk bekerja dengan. Pada Access 2000, sebuah database Access dapat menangani hingga 2 gigabyte data per file mdb.. Jika Anda benar-benar perlu, Anda dapat secara efektif menciptakan database yang lebih besar dengan menggunakan tabel terkait dengan beberapa file mdb yang berbeda.. Namun, SQL Server memiliki batas yang lebih tinggi, dan jauh kurang rentan terhadap korupsi data.
Jika Anda perlu solusi untuk menangani lebih banyak pengguna atau membutuhkan keandalan dari sebuah server database, mempertimbangkan untuk membuat solusi client / server yang mempekerjakan sebuah proyek Access sebagai aplikasi client dan server back-end database seperti Microsoft SQL Server.

multi

Multi user


Unix Multiuser

Sebagian besar dari kita, apalagi para programer dan sysadmin Web Unix, pasti sudah cukup familiar dengan software ini. MySQL—yang pernah dibahas di edisi 4 mwmag—merupakan server RDBMS open source terpopuler, terutama untuk aplikasi Web. Artikel kali ini akan membahas isu-isu keamanan seputar menjalankan daemon MySQL di lingkungan multiuser, seperti di server shared hosting. Dalam lingkungan multiuser ada beberapa hal yang perlu diperhatikan, terutama yang berkaitan dengan isolasi user yang satu dengan user lain. Meskipun ada pula sebagian poin-poin yang diterangkan—seperti pengaturan permission MySQL—yang dapat diterapkan untuk Windows, namun jelas fokus artikel ini adalah pada lingkungan Unix/Linux.
Kita langsung mulai saja dengan tip yang pertama. Jika Anda punya budget cukup, pasanglah daemon MySQL (mysqld) di mesin terpisah. Cara ini adalah termasuk yang paling aman, karena mesin terpisah ini dapat kita taruh di belakang firewall sehingga tidak menerima koneksi dari Internet melainkan dari mesin-mesin tertentu saja di jaringan lokal. Juga, tiap user yang menggunakan database tidak perlu kita beri akses shell. Semua port dapat kita tutup kecuali port default mysqld saja (3306) yang kita buka. Tidak ada yang bisa menyentuh langsung file-file database maupun log kecuali user mysql di mesin database tersebut, dan juga admin mesin tersebut.
Meskipun MySQL merupakan database multiuser, tapi daemon mysqld hanya berjalan sebagai satu user Unix saja (defaultnya adalah mysql). Tidak ada wrapping seperti halnya pada Apache + suexec/cgiwrap. User Unix ini memiliki akses ke semua database di direktori data (defaultnya adalah /var/lib/mysql). Tentu saja MySQL memiliki sistem access privilege yang cukup mendetil untuk mengatur klien mana yang dapat mengakses tabel atau database mana. Namun bug pada kode mysqld atau miskonfigurasi sistem privilegenya bisa saja mengakibatkan sebuah database berisi data rahasia terbuka bagi user MySQL lain. Misalnya lewat LOAD DATA INFILE atau LOAD LOCAL DATA INFILE maupun lewat SELECT INTO OUTFILE, yang memungkinkan penyerang berpotensi menimpa file database milik user lain.
Jika Anda mempunyai sebuah database yang datanya sensitif atau harus benar-benar private, Anda bisa dapat menjalankan mysqld terpisah. Tiap mysqld berjalan sebagai user Unix yang berbeda, sehingga satu mysqld tidak dapat mengganggu mysqld yang lainnya. Bug pada mysqld yang satu tidak dapat mengganggu mysqld lainnya, karena masing-masing tidak bisa menyentuh direktori data daemon lain.
Contoh berikut adalah user steven yang menjalankan sendiri daemon MySQL pribadi, berjalan sebagai user steven dan port 3366. Daemon MySQL utama, sebagai user mysql, tidak dapat menyentuh database.
$ mkdir /home/steven/mysql
$ mysql_install_db --datadir=/home/steven/mysql
$ /usr/sbin/mysqld --datadir=/home/steven/mysql --port=3366 \
    --socket=/home/steven/mysql/mysql.sock &
Anda dapat mengganti port 3366 dengan port kesukaan sendiri. Sebelum memakai, Anda perlu memberi password pada user MySQL root tentunya:
$ mysqladmin -u root -S /home/steven/mysql/mysql.sock password RAHASIA
Ganti RAHASIA dengan password sebenarnya. Selanjutnya nanti sewaktu melakukan koneksi ke mysqld ini dengan command line client mysql misalnya, Anda perlu menyebutkan opsi -h (host) dan -P (port) atau -S (socket). Misalnya, koneksi via soket Unix:
$ mysql -u root -S /home/steven/mysql/mysql.sock
Atau koneksi via TCP:
$ mysql -u root -h 127.0.0.1 -P 3366
Tapi, lagi-lagi, jika jumlah user banyak dan masing-masing ingin menjalankan mysqld-nya masing-masing, tentu saja overheadnya besar.
Sebagai seorang admin database, mau tidak mau hal yang satu ini harus dikuasai baik-baik. Sistem Access Privilege adalah cara utama MySQL dalam membatasi user dan host mana saja yang bisa melakukan koneksi, menyimpan password masing-masing user, dan membatasi kemampuan user dalam memanipulasi database (apakah hanya bisa melakukan SELECT saja, atau SELECT dan UPDATE, dst). Apa artinya daemon MySQL yang terisolasi dari mesin maupun daemon lain apabila ia dengan cerobohnya menerima koneksi dari sembarang user dan host?
Sistem privilege MySQL cukup mendetil dan menurut saya lebih simpel tapi mendetil daripada sistem privilege PostgreSQL, meskipun dari segi otentikasi sistem PostgreSQL sebetulnya lebih fleksibel. Pada dasarnya seluruh informasi pengaturan privilege disimpan dalam sebuah database khusus bernama mysql. Penjelasan mendetil mengenai di luar cakupan artikel ini, tapi sebagai tip beberapa hal berikut ini sebaiknya diikuti. Pertama, sebaiknya tiap user diberi password. Kedua, tabel user di database mysql ini sangat sensitif karena berisi password, jadi jangan biarkan user manapun memiliki privilege SELECT terhadap. Ketiga, batasi privilege FILE maupun PROCESS, jangan berikan kecuali benar-benar perlu. Keempat, jangan biarkan satu user database melihat database lain kecuali benar-benar perlu.
Dalam server shared hosting yang saya kelola, demi kesederhanaan, tiap user database hanya boleh mengakses satu database, dan daftar privilegenya seperti ini: Entri di tabel user: ('localhost', 'USER', password('PASSWORD'), 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'). Entri di tabel db: ('localhost', 'DATABASE', 'USER', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'N', 'Y', 'Y', 'Y'). Artinya, si user USER hanya dapat melihat database DATABASE, hanya bisa melakukan koneksi dari mesin lokal melalui soket Unix, dan tidak memiliki privilege GRANT. Privilege FILE diberikan, tapi berhubung tiap skrip CGI diwrap, maka setidaknya akan lebih sulit bagi seorang penyerang untuk menciptakan file sebagai user Unix lain.
Dalam sebuah server shared hosting misalnya, umumnya database diakses dari skrip CGI/PHP/ASP di server yang sama. Jika kita ingin agar hanya user atau skrip dari mesin lokal saja yang dapat melakukan koneksi ke daemon MySQL maka kita dapat mematikan opsi listening di soket TCP. Seperti kita ketahui, MySQL mendengarkan koneksi di soket Unix (defaultnya di /var/lib/mysql/mysql.sock) dan di port TCP (defaultnya di port 3306). Soket Unix hanya untuk klien lokal, sementara soket TCP dapat digunakan untuk koneksi jaringan.
Untuk membuat mysqld tidak mendengarkan di soket TCP sama sekali, taruh baris berikut di /etc/my.cnf:
[mysqld]
skip-networking
lalu restart mysqld. Atau tambahkan --skip-networking saat menjalankan mysqld.
Setelah memakai opsi ini, bahkan koneksi ke 127.0.0.1 pun akan ditolak dengan pesan Connection Refused. Karena memang tidak ada soket TCP yang mendengarkan. Jadi untuk melakukan koneksi ke daemon MySQL kita harus menggunakan host localhost agar soket Unixlah yang dipakai sebagai metode koneksi.
Keuntungan menggunakan soket Unix, selain sedikit lebih cepat (karena tidak ada overhead protokol TCP/IP), isolasi filesystem pun berlaku sebagai lapisan pelindung. Database milik user steven di contoh Tip 2 tadi misalnya, tidak dapat dicapai sama sekali baik oleh klien di mesin lain maupun oleh user Unix lain di mesin yang sama, karena defaultnya lokasi soket Unix di /home/steven/mysql/mysql.sock ini tertutup dari user lain. Sehingga database ini bersifat pribadi dan hanya bisa diakses oleh user steven sendiri maupun oleh skrip CGI/PHP yang berjalan sebagai user steven. Daemon MySQL utama, di lain pihak, merupakan daemon yang terbuka bagi semua user, karena /var/lib/mysql/mysql.sock secara default dapat diakses oleh semua user.
Tentu saja, kadang-kadang database MySQL ingin diakses selain dari localhost (misalnya, ingin diakses dari klien GUI di komputer Windows). Dalam kasus ini, mau tidak mau kita harus membuka lagi soket TCP dan kembali mengandalkan sistem privilege MySQL dalam membatasi host.
Dalam lingkungan multiuser, tiap user semestinya diberi database masing-masing dan database default yang diberikan oleh distribusi MySQL, yaitu test, biasanya tidak ada gunanya. Ada baiknya database ini dihapus saja sehingga tidak sembarang user yang bisa mengakses database ini dan lalu memenuhi disk atau melakukan serangan DOS misalnya. Sebab defaultnya adalah semua user database bisa melihat database test. Untuk menghapus database test, berikan perintah ini dari klien command line mysql:
mysql> DELETE FROM db WHERE db='test' OR db='test_%';
mysql> FLUSH PRIVILEGES;
Chroot adalah fasilitas yang disediakan di banyak sistem operasi Unix untuk membuat filesystem root “virtual” bagi program, misalnya di bawah /home/steven/root, sehingga program menganggap path tersebut adalah / dan tidak bisa melihat path di atasnya (/home/steven maupun /home maupun / asli). Chroot banyak bermanfaat untuk memenjarakan program sehingga tidak bisa menyentuh file-file di luar direktori yang sudah kita tetapkan sebagai penjaranya.
Tip ini cukup berhubungan dengan tip 2 (tiap user memperoleh mysqld masing-masing). Di lingkungan virtual server pun chroot sering dilakukan terhadap tiap-tiap daemon agar masing-masing tidak dapat melihat file milik daemon lain.
Chroot saat ini harus dilakukan sebagai root karena merupakan operasi privileged. Menyambung contoh di tip 2, berikut ini cara menjalankan mysqld milik user steven dan memenjarakannya di /home/steven/mysql. mysqld memiliki opsi --chroot sehingga kita tidak perlu mengkopi /usr/sbin/mysqld-nya itu sendiri, namun terakhir saya coba masih bermasalah, sehingga kita akan melakukan chroot menggunakan /usr/sbin/chroot. Contoh ini untuk RedHat Linux (saya memakai versi 7.2) dan distribusi RPM binary dari MySQL AB (saya memakai 3.23.51).
$ chdir /home/steven
$ mkdir -p fakeroot/{var/lib,etc,tmp,lib,usr/sbin,usr/share}
$ mv mysql fakeroot/var/lib/   # direktori data yg sudah dibuat di tip 2
$ echo -e "root:*:0:0:::\nnobody:*:99:99:::\nsteven:*:500:500:::" \
    > fakeroot/etc/passwd
$ echo -e "root::0:\nsteven::500:" > fakeroot/etc/group
$ cp -a /lib/{ld-*,libc.so*,libc-*.so,libnsl*,libnss_files*,libtermcap*} \
    fakeroot/lib/
$ cp -a /usr/sbin/mysqld fakeroot/usr/sbin/
$ cp -a /usr/share/mysql fakeroot/usr/share/

# /usr/sbin/chroot /home/steven/fakeroot /usr/sbin/mysqld \
    --user=steven \
    --datadir=/var/lib/mysql \
    --port=3366 \
    --socket=/var/lib/mysql/mysql.sock
Untuk instalasi seperti di atas, dibutuhkan overhead ruang disk sebesar sekitar 12MB untuk mengkopi library Linux dan file-file lain yang diperlukan ke bawah /home/steven/fakeroot (karena jika tidak, setelah dilakukan chroot maka mysqld tidak akan dapat mencari library yang dibutuhkan). Kita juga memerlukan /etc/passwd dan /etc/group “dummy”. Ganti UID dan GID 500 sesuai UID dan GID user yang akan menjalankan mysqld. Setelah semua file-file siap, kita memanggil mysqld. Perhatikan bahwa opsi-opsi path di --datadir dan --socket adalah relatif terhadap fakeroot. Program-program yang berada di bawah chroot yang sama akan melihat soket dan direktori data MySQL milik steven ini di /var/lib/mysql, tapi sebetulnya—seperti yang akan dilihat program-program lain yang berada di luar chroot—lokasi asli ada di /home/steven/fakeroot/var/lib/mysql.
Chroot berguna terutama jika Anda tidak mempercayai MySQL versi development atau beta (mis: versi 4.0.2 saat ini). Chroot juga bermanfaat dalam menutup kemungkinan perintah SQL LOAD DATA INFILE dan SELECT INTO OUTFILE mengintip dan merusak file-file yang tidak diinginkan. Chroot juga perlu Anda pertimbangkan bila sebuah server memuat beberapa user yang benar-benar tidak saling mempercayai satu sama lain. Dalam kenyataan sehari-hari, saya jarang menggunakan chroot.
LOAD DATA LOCAL INFILE adalah fasilitas agar klien bisa membaca sebuah file dari filesystem dan memasukkannya ke tabel database. Sejak 3.23.49, LOAD DATA LOCAL INFILE sudah dimatikan secara default. Jika ada skrip CGI atau ASP di mesin shared hosting Anda yang tidak diwrap, maka ada potensi perintah SQL tersebut dipakai untuk membaca file-file sebagai user nobody misalnya (dan mengambil source code skrip-skrip milik user lain lewat memuatnya ke tabel database lalu nanti ke file melalui SELECT INTO OUTFILE atau lewat skrip yang melakukan SELECT dan mencetaknya ke file). Jika Anda cukup yakin bahwa semua skrip terwrap, maka barulah Anda bisa mengaktifkan perintah SQL ini dengan memberikan opsi:
[mysql]
local-infile
di /etc/my.cnf. Skrip pun harus memberikan perintah mysql_options() dulu—saat ini belum didukung oleh PHP—sebelum bisa memberikan perintah SQL LOAD DATA LOCAL INFILE.
Jika koneksi MySQL Anda hanya lokal via soket Unix, Anda cukup aman di poin ini. Tapi jika daemon MySQL Anda harus menerima klien (atau melakukan replikasi) via koneksi TCP dari Internet, maka ada potensi pencurian data melalui sniffing paket. Password dan data-data sensitif bisa melayang dari hop ke hop dan siap disadap. Ada baiknya Anda mempertimbangkan mensetup SSL untuk koneksi MySQL.
MySQL baru mendukung koneksi SSL natif mulai 4.0. Karena itu, kita bisa menggunakan stunnel untuk mengenkripsi saluran komunikasi. Prinsip stunnel adalah, di sisi klien dan server kita memasang gerbang stunnel masuk agar terbentuk “terowongan”. Masing-masing klien dan server asli berkomunikasi secara lokal (via localhost) dengan stunnel. Sementara barulah stunnel di kedua sisi saling melakukan pembicaraan SSL. Berikut sebuah contoh. Di sisi klien (mis, beralamat di klien.com):
# /usr/sbin/stunnel -P/tmp/ -c -d 3306 -r server.com:3307
Di sisi server (yang beralamat mis di server.com):
# cd /usr/share/ssl/certs
# openssl req -new -x509 -days 365 -nodes -out stunnel.pem \
    -keyout stunnel.pem
# /usr/sbin/stunnel -P/tmp/ -p stunnel.pem -d 3307 -r localhost:3306
Lalu dari klien.com lakukan koneksi MySQL ke server server.com seperti biasa.

Pengertian Multi User

Pengertian Multiuser

Sistem Multi-User adalah suatu sistem dimana lebih dari satu user menggunakan secara bersama satu atau lebih perangkat keras, piranti lunak dan data/ informasi , orang dan prosedur melalui masing-masing komputer atau workstation.
 
Tujuan Sistem Multi-User :
  • Meningkatkan produktivitas dan efektivitas SDM
  • Meningkatkan produktivitas dan efektivitas organisasi  
  • Meningkatkan Layanan kepada mereka yang tergantung pada sistem Multi-User.     4.1. Sistem Multiuser 
  • Sistem multiuser adalah komputer yang dapat mengeksekusi beberapa aplikasi yang
    dimiliki dua user atau lebih secara konkuren dan independen. Konkuren berarti
    aplikasi dapat aktif secara bersamaan dan saling bersaing untuk menggu
  • nakan
    sumber daya seperti CPU, memori, hard disk, dan lain sebagainya. Independen
    maksudnya adalah setiap aplikasi dapat menjalankan task-nya tanpa harus
    mempedulikan apa yang sedang dijalankan oleh pemakai lainnya.
    Sistem operasi yang multiuser harus memiliki beberapa fitur :
    • Mekanisme authentication untuk verifikasi identitas pemakai
    • Mekanisme proteksi terhadap program user yang mengandung bug sehingga
    menghindari kemungkinan mem-block aplikasi lain dalam sistem.
    • Mekanisme proteksi terhadap program user yang dapat mengganggu atau
    memata-matai aktivitas user lain.
    • Mekanisme penghitungan yang membatasi jumlah sumberdaya yang dapat
    dialokasi untuk masing-masing pemakai.
    4.2. User dan Group
    Dalam sebuah sistem multiuser, setiap user memiliki ruang privat dalam sistem,
    Umumnya, ia memiliki kuota dari harddisk untuk menyimpan file. Sistem operasi
    harus dapat memastikan bahwa ruang privat seorang user hanya dapat diakses oleh
    user yang bersangkutan. Sistem harus memastikan bahwa tidak ada user yang dapat
    mengeksploitasi aplikasi sistem untuk melanggar ruang privat user lain. Mekanisme
    untuk menjamin hal tersebut adalah dengan penggunaan User ID dan password
    yang harus dimasukkan user ketika ia login.
    Untuk dapat berbagi file secara selektif antar-user, setiap user adalah anggota dari
    sebuah group. Setiap file diasosiasikan untuk setiap groups. Setiap group memiliki
    hak akses yang berbeda untuk sebuah file.
    Sistem operasi UNIX-like memiliki user spesial yang disebut root,superuser, atau
    supervisor. Administrator sistem harus login sebagai root untuk dapat mengatur user
    account, melakukan tugas maintenance, dan lain sebagainya. Root user dapat
    mengakses setiap file dalam sistem dan dapat mengambil alih program user lainnya.

Pemrograman Java / Client Server

Pada tahun 1990-an, tren itu bergerak menjauh dari komputasi Mainframe untuk Client / Server, karena harga server Unix turun. Akses database dan beberapa logika bisnis yang terpusat di back-end server, mengumpulkan data dari program pengguna telah diinstal di front-end pengguna "klien" 'komputer. Dalam dunia Java ada tiga cara utama front-end dan back-end hanya bisa berkomunikasi.
  • Aplikasi klien menggunakan JDBC untuk menghubungkan server basis data, (logika bisnis Limited pada back-end, kecuali menggunakan (prosedur tersimpan )
  • Aplikasi klien menggunakan RMI ( Doa remote method ) untuk berkomunikasi dengan back-end.
  • Aplikasi klien menggunakan koneksi soket untuk berkomunikasi dengan back-end.           
  • Contoh Socket Connection

  • Gambar 1: Klien Implementasi Server Sederhana
    Pada halaman ini ada contoh untuk koneksi soket.

     Membuat Server

    Bahasa Java dikembangkan memiliki jaringan komputasi dalam pikiran. Untuk alasan ini sangat mudah untuk membuat sebuah program server. Sebuah server adalah bagian dari kode yang berjalan sepanjang waktu mendengarkan pada port tertentu pada komputer untuk permintaan yang masuk. Ketika permintaan datang, itu mulai thread baru untuk melayani request. Lihat contoh berikut:

    Mendengarkan pada port

    ComServer
    kelas untuk mendengarkan pada port untuk klien.
     java.net.ServerSocket impor;
     / ** 
       * - Kelas Server Utama; Mendengarkan pada port untuk klien; Jika ada klien, 
       * Thread baru memulai dan kembali untuk mendengarkan lebih lanjut untuk klien.  - 
       * /
     masyarakat kelas ComServer 
     {
     statis boolean GL_listening = true;
        / ** 
          * - Program Utama untuk memulai Server - 
          * /
        public void main statis (String [] args) throws IOException
        {
           ComServer srv = new ComServer ();
           . srv mendengarkan (); 
        } / / --- End --- Metode Utama
     
        / ** 
          * - Server metode; Dengarkan klien - 
          * /
        public int mendengarkan () throws IOException
        {
         ServerSocket ServerSocket = null;
         int iPortNumber = 9090;
     
            / / --- Buka Socket Server dimana harus mendengarkan ---
            try {
                Sistem keluar println.. ("*** Buka soket mendengarkan; di:" + + iPortNumber "***");
                ServerSocket = new ServerSocket (iPortNumber);
            } Catch (IOException e) {
                . Sistem err println ("Tidak dapat mendengarkan pada port:" + iPortNumber).;
                . Sistem exit (1);
            }
            sementara (GL_listening)
            {
             ComServerThread clientServ; 
                / / --- Mendengarkan klien; Jika ada klien memulai Thread -
                Sistem keluar println.. ("*** Dengarkan Klien; di:" + + iPortNumber "***");
                clientServ = baru ComServerThread (serverSocket. menerima ());
                / / --- Layanan Klien ---
                Sistem keluar println.. ("*** Klien datang; Layanan itu ***");
                . clientServ start (); / * --- Gunakan untuk multy Threaded --- * /
           / / ClientServ.run (); / * --- Gunakan untuk Single Threaded --- * /
            }
     
            / / --- Tutup soket Server; Server keluar ---
            . ServerSocket close ();
         return 0;
        } / / --- Akhir mendengarkan Metode ---
     } / / --- Akhir Kelas ComServer ---
    ServerSocket (iPortNumber)
    Membuat server socket, terikat pada port tertentu.
    serverSocket.accept ()
    Mendengarkan untuk koneksi yang akan dibuat untuk socket ini dan menerimanya. Metode blok sampai sambungan dibuat. Ia mengembalikan Socket baru.

      Layanan Satu Klien

    ComServerThread
    Kelas ini diperpanjang dari Thread; Bertanggung jawab untuk layanan satu klien. Sambungan Socket akan terbuka antara klien dan server. Sebuah protokol sederhana harus didefinisikan antara klien dan server, server harus memahami apa yang diinginkan klien dari server. Klien akan mengirim 'menghentikan' perintah, yang server akan mengakhiri koneksi soket. Kelas ComServerThread bertanggung jawab untuk menangani permintaan klien, sampai client mengirimkan sebuah 'menghentikan' perintah.
      / ** 
        * - Sebuah kelas diperpanjang dari Thread; Bertanggung jawab untuk layanan satu klien - 
        * /
      kelas'''ComServerThread'''extends Thread
      {
         swasta Socket clientSocket = null;
         COM_DATA tDataFromClient;
         COM_DATA tDataToClient; 
         ObjectInputStream Oin;
         ObjectOutputStream oOut;
         / ** 
           * - Pembuat - 
           * /
         publik ComServerThread (Socket socket)
         {
            super ("ComServerThread");
            ini clientSocket = soket;.
         } / / - Akhir dari ComServerThread () konstruktor -
         / ** 
           * - Overrun dari Thread (super) kelas - 
           * /
         public {{java: void}} run ()
         {
            try {
               / / --- Buat Writer; akan digunakan untuk mengirim data ke klien ---
               oOut = new ObjectOutputStream (clientSocket. getOutputStream ());
               / / --- Buat Reader, akan digunakan untuk mendapatkan data dari klien ---
               Oin = new ObjectInputStream (clientSocket. getInputStream ());
               / / --- Buat objek protokol baru ---
               ComProtocol comp = baru ComProtocol ();
               / / --- Kirim sesuatu untuk klien untuk menunjukkan server yang siap ---
               tDataToClient ='''comp.processInput (null);'''
               '''SendDataToClient'''(tDataToClient, oOut);
               / / --- Dapatkan data dari klien ---
               sementara (benar)
               {
                  try {
                     tDataFromClient ='''getDataFromClient (Oin)''';
                     / / --- Parse permintaan dan mendapatkan balasan ---
                     tDataToClient ='''comp.processInput (tDataFromClient);'''
                     / / --- Mengirim data ke Klien ---
                     '''SendDataToClient'''(tDataToClient, oOut);
                  }
                  catch (EOFException e) {
                     .. Sistem keluar println ("Klien Terputus, Bye, Bye");
                     break;
                  }
                  / / --- Lihat jika Klien ingin mengakhiri sambungan ---
                  jika (tDataToClient. bExit)
                  {
                     .. Sistem keluar println ("Klien kata Bye Bye.");
                     break;
                  }
               }
               / / --- Sumber daya Tutup; Klien ini hilang ---
               . comp Akhir ();
               oOut close ().;
               . Oin close ();
               . clientSocket close ();
            } Catch (IOException e) {
             e. printStackTrace ();
            }
         } / / - Akhir dari run () Metode -
         / ** 
           * Dapatkan data dari Klien  
           * /
         COM_DATA private static'''getDataFromClient'''(ObjectInputStream Oin) throws IOException                                                                         
         {
             COM_DATA tDataFromClient = null;         
             / / Inisialisasi variabel --- ---
             / / TDataFromClient = baru COM_DATA ();
             sementara (tDataFromClient == null)
             {
                try {
                   / / --- Baca Nomor Baris pertama -
                   tDataFromClient = (COM_DATA) Oin readObject ().;
                } Catch (ClassNotFoundException e) {
                    .. Sistem keluar println ("ClassNotFound");
                }
             }
             Sistem keluar println ("Dapatkan:". + TDataFromClient comData)..;
          kembali tDataFromClient;
         } / / --- GetDataFromClient () Metode ---
         / ** 
           * Mengirim data ke Klien  
           * /
         private void static'''sendDataToClient'''(COM_DATA tDataToClient,
                                                ObjectOutputStream oOut) throws IOException
         {         
             Sistem keluar println ("Terkirim:". + TDataToClient comData)..;
             oOut writeObject (tDataToClient).;
           kembali;
         } / / - Akhir dari sendDataToClient () Metode -
      } / / --- End kelas ComServerThread ---
    COM_DATA tDataFromClient
    Variabel ini akan berisi objek data dari klien.
    COM_DATA tDataToClient
    Variabel ini akan berisi objek data yang akan dikirim ke klien.
    sendDataToClient
    Metode ini mengirimkan objek data ke klien.
    getDataFromClient
    Metode ini mendapatkan objek data dari klien.
    processInput (tDataFromClient)
    Metode dari kelas 'ComProtocol' menafsirkan perintah klien dan mengembalikan objek data yang akan dikirim kembali ke klien.

      Penanganan permintaan; mengimplementasikan protokol komunikasi

    ComProtocol
    Kelas ini mengimplementasikan, dan merangkum logika komunikasi (protokol). Protokol adalah sebagai berikut:
    1. Klien memulai koneksi.
    2. Server menerima dan mengirim pengakuan memberitahu bahwa itu siap
    3. Client mengirimkan permintaan
    4. Respon server berdasarkan permintaan
    ...
    1. Klien mengirimkan 'DAH' permintaan
    2. Server mengakui 'Bye' permintaan dan memutuskan koneksi soket
    3. Klien mendapat pengakuan ke 'DAH'
    ...
    1. Klien mengirimkan 'SHUTDOWN' permintaan
    2. Server mengakui 'SHUTDOWN' permintaan dan memutus dan juga berhenti mendengarkan klien lain.
    3. Klien mendapat pengakuan ke 'shutdown'
     class ComProtocol { private static final int COM_STATUS_WAITING = 0; private static final int COM_STATUS_READY_SENT = 1; private static final int COM_STATUS_DATA_SENT = 2; private static final int COM_STATUS_WAITING_FOR_TERMINALID = 3; private int negara = COM_STATUS_WAITING; / / --- Referensi untuk 'KEMBALI -END 'mqTe modul --- swasta MqTeAccess; ...  / ** * Buat objek protokol; Panggil fungsi MQ INI * / public ComProtocol () { int IRET = 0; modul / / --- Inisialisasi 'BACK-END' --- mqTe.  ...  ...  } / ** * --- Proses Input dan Buat output ke Klien --- * / public COM_DATA processInput (COM_DATA theInput) {COM_DATA theOutput; / / Inisialisasi Variabel --- --- theOutput = new COM_DATA () ; / / --- Periksa apakah Klien ingin melepaskan --- if (theInput = null!) { if (theInput.comData.equals ("BYE @.!")) {/ / --- Klien ingin mengakhiri; Echo data kembali ke klien theOutput.comData = "BYE."; / / --- Tandai comunication yang akan diakhiri --- theOutput.bExit = true; / / --- Mengatur keadaan internal untuk menunggu baru klien --- negara = COM_STATUS_WAITING; / / --- Kembali data objek yang akan dikirim ke klien --- theOutput kembali;} if (theInput.comData.equals (".! SHUTDOWN @")) {/ / - - Klien ingin untuk mengakhiri; Echo data kembali ke klien theOutput.comData =; / / --- Tandai comunication yang akan diakhiri --- theOutput.bExit = true; / / --- Katakan server untuk "BYE." berhenti mendengarkan untuk klien baru --- ComServer.GL_listening = false; / / --- Mengatur keadaan internal untuk menunggu sebuah negara --- klien baru COM_STATUS_WAITING =; / / --- Kembali data objek yang akan dikirim ke klien --- kembali theOutput;}} if (negara COM_STATUS_WAITING ==) {/ / --- Kirim Pesan siap untuk Klien --- theOutput.comData = "Siap:"; / / --- Mengatur keadaan internal siap; dan menunggu TerminalId --- negara = COM_STATUS_WAITING_FOR_TERMINALID;} else if (negara COM_STATUS_WAITING_FOR_TERMINALID ==) { int IRET; / / --- Dapatkan ID Terminal --- sTermId = theInput.comData; / / --- 'Panggil KEMBALI -END modul '...  --- MqTe.  ...  ...  / / --- Kirim Pesan siap dengan versi Server untuk klien --- theOutput.comData = "Siap; Server Versi 1.0:"; / / --- Set raedy keadaan internal, dan menunggu TerminalId --- negara = COM_STATUS_READY_SENT;} else if (negara COM_STATUS_READY_SENT ==) { int IRET; String sCommand = theInput.comData; 'BACK-END' / / --- Panggil modul ...  ...  / * ** --- Periksa apakah kita harus mendapatkan data Respon --- * / if (theInput.iRet == COM_DATA.NOWAIT_FOR_RESPONSE) {/ / - Mengatur Nilai output --- theOutput.iRet = IRET; theOutput. comData = "";} else {modul / / --- Panggil 'BACK-END' --- mqTe.  ...  / / --- Mengatur Nilai output --- theOutput.comData = mqTe.sResponseBuffer; theOutput.iRet = IRET;}} return theOutput;} / / --- End Metode processInput () ---} / / - - Akhir Definisi Kelas ComProtocol --- 

    Obyek Data yang melewati jaringan

    COM_DATA
    adalah struktur data kelas yang ditransmisikan melalui jaringan. Kelas berisi data saja.
     / **
      * COM_DATA struktur data 
      * /
     public class COM_DATA implements Serializable
     {
      public String comData;
      public boolean bExit;
      public int IRET;
        / **
         * --- Contants nilai dapat disahkan di dalam IRET untuk Server ---
         * /
        static final int WAIT_FOR_RESPONSE = 0;
        static final int NOWAIT_FOR_RESPONSE = 1;
       / **
        * Inisialisasi struktur data
        * /
       public COM_DATA ()
       {
          comData = "";
          bExit = false;
          IRET = 0;
       } / / - Akhir dari COM_DATA () Pembuat -   
       / **
        * Menyalin itu isinya 
        * /
       public void copy (COM_DATA tSrc)
       {
          this comData = tSrc.comData.;
          this bExit = tSrc.bExit.;
          this IRET = tSrc.iRet.;
        return ;
       } 
     } / / - Akhir dari kelas COM_DATA -

      Buat Klien

    Sebuah kode klien untuk server / layanan biasanya merupakan sebuah aplikasi API yang digunakan untuk antarmuka pengguna ke server. Dengan bantuan API klien pengguna aplikasi tidak harus tahu bagaimana untuk menghubungkan ke server untuk mendapatkan layanan.
    ComClient
    Kelas ini adalah API klien. Aplikasi ini menggunakan kelas ini untuk berkomunikasi dengan server.
    Berikut ini adalah kelas klien untuk server di atas:
     public class ComClient
     {
      private Socket comSocket;
      private ObjectOutputStream oOut;
      private ObjectInputStream Oin;
      private boolean IsItOpen = false;       
        / **
         * --- Socket Terbuka ---
         * /
        public void openCom ( String sServerName,
                             int iPortNumber) throws UnknownHostException,
                                                                  IOException  
        {
           try {
              / / --- Socket Terbuka untuk komunikasi ---
              comSocket = new Socket (sServerName, iPortNumber);     
              / / --- Dapatkan Stream untuk menulis permintaan untuk Server ---
              oOut = new ObjectOutputStream (comSocket.getOutputStream ());     
              / / --- Dapatkan Stream / / untuk membaca dari Server
              Oin = new ObjectInputStream (comSocket.getInputStream ());
              / / Set variabel --- Anggota internal yang terbuka --- Komunikasi
              IsItOpen = true ;
           } catch (java.net.UnknownHostException e) {
              System.out.println ("(openCom:) Tidak tahu tentang host:" + sServerName);
              IsItOpen = false ;
              melempar (e);                                         
           } catch (java.io.IOException e) {
              System.out.println ("(openCom:) Tidak bisa mendapatkan I / O untuk koneksi ke:" + sServerName);
              IsItOpen = false ;
              throw (e);         
           }               
        }
        / **
         * --- Periksa apakah Socket terbuka ---
         * /
        public boolean isItOpen ()
        {
          return IsItOpen;
        }     
        / **
         * --- Dapatkan data string dari Server ---
         * /
        public void getServerData (COM_DATA tServData) throws IOException
        {
            / / Inisialisasi Variabel --- ---
            tServData.comData = "";
            / / --- Dapatkan Respon dari Server ---              
            try {
               tServData.copy ((COM_DATA) oIn.readObject ());
            }   
            catch (ClassNotFoundException e) {
                System.out.println ("Kelas Tidak Ditemukan");
            } 
            System.out.println ("Server:" + tServData.comData);
            if (tServData.comData.equals ("BYE."))
            {
                tServData.bExit = true ;
            }        
         return ;
        }
        / **
         * --- Mengirim data ke server ---
         * /
        public void sendDataToServer (COM_DATA tServData) throws IOException
        {
            / / --- Kirim data string ---
            System.out.println ("Kirim:" + tServData.comData);
            oOut.writeObject (tServData);
         return ;
        } 
        / **
         * --- Socket Tutup --- 
         * /
        public void closeCom () throws IOException
        {
            oOut.close ();
            oIn.close ();
            comSocket.close ();     
            IsItOpen = false ;
        }    
     }
    getServerData (COM_DATA tServData)
    Metode ini membaca data dari server dan salinan nilai-nilai ke objek 'tServData'.
    sendDataToServer (COM_DATA tServData)
    Metode ini mengirimkan 'tServData' objek melalui jaringan ro server.
    oIn.readObject ()
    Metode ini mengembalikan objek data yang dikirim oleh server.
    oOut.writeObject (tServData)
    Metode ini mengirimkan objek data ke server.