Sistem Keamanan Database Menggunakan MYSQL




SISTEM KEAMANAN DATABASE MENGGUNAKAN MYSQL

MySQL adalah sebuah perangkat lunak system manajemen basis data SQL (DBMS) yang multithread, dan multi-user. MySQL adalah implementasi dari system manajemen basisdata relasional (RDBMS). MySQL dibuah oleh TcX dan telah dipercaya mengelola system dengan 40 buah database berisi 10.000 tabel dan 500 di antaranya memiliki 7 juta baris.
MySQL AB merupakan perusahaan komersial Swedia yang mensponsori dan yang memiliki MySQL. Pendiri MySQL AB adalah dua orang Swedia yang bernama David Axmark, Allan Larsson dan satu orang Finlandia bernama Michael “Monty”. Setiap pengguna MySQL dapat menggunakannya secara bebas yang didistribusikan gratis dibawah lisensi GPL(General Public License) namun tidak boleh menjadikan produk turunan yang bersifat komersial.
Pada saat ini MySQL merupakan database server yang sangat terkenal di dunia, semua itu tak lain karena bahasa dasar yang digunakan untuk mengakses database yaitu SQL. SQL (Structured Query Language) pertama kali diterapkan pada sebuah proyek riset pada laboratorium riset San Jose, IBM yang bernama system R. Kemudian SQL juga dikembangan oleh Oracle, Informix dan Sybase. Dengan menggunakan SQL, proses pengaksesan database lebih user-friendly dibandingan dengan yang lain, misalnya dBase atau Clipper karena mereka masih menggunakan perintah-perintah pemrograman murni.
Disini kami tidak akan membahas secara detail tentang mysql, namun kami akan membahas tentang kemanan yang terdapat pada database.

Database Security

A.      Pengertian Keamanan Database (Database Security)
 
 Keamanan database menyangkut penggunaan berbagai kontrol keamanan informasi untuk melindungi database (berpotensi termasuk data, aplikasi database atau fungsi disimpan, sistem database, server database dan jaringan link terkait) terhadap kompromi kerahasiaan, integritas dan ketersediaan. Ini melibatkan berbagai jenis atau kategori kontrol, seperti teknis, prosedural / administrasi dan fisik.

B.       Tujuan Keamanan Database (Database Security)

Menurut Database Processing, tujuan dari keamanan database yaitu :
1.  Untuk memastikan bahwa hanya user yang berwenang yang dapa melaksanakan aktivitas yang terotorisasi pada waktu diotorisasi
2. Untuk menentukkan hak dan kewajiban pemrosesan dari semua user dalam penggunakaan database.

C.      Resiko Keamanan Database (Database Security)

Keamanan database adalah topik spesialis dalam alam yang lebih luas dari keamanan komputer, keamanan informasi dan mana
jemen risiko. Risiko keamanan untuk sistem database mencakup, misalnya:
1)      aktivitas yang tidak sah atau tidak disengaja atau penyalahgunaan oleh para pengguna database administrator database, atau sistem jaringan manajer / atau oleh pengguna yang tidak sah atau hacker (misalnya akses tidak sesuai dengan data sensitif, metadata atau fungsi dalam database, atau perubahan tidak sesuai dengan program database, struktur atau konfigurasi keamanan);
2)      Infeksi malware menyebabkan insiden seperti akses yang tidak sah, kebocoran atau pengungkapan data pribadi atau hak milik, penghapusan atau kerusakan data atau program, gangguan atau penolakan akses berwenang untuk database, serangan terhadap sistem lain dan kegagalan tak terduga dari layanan database;
3)      Overloads, kendala kinerja dan masalah kapasitas mengakibatkan ketidakmampuan pengguna yang berwenang untuk menggunakan database sebagaimana dimaksud;
4)      Kerusakan fisik ke server database yang disebabkan oleh kebakaran ruang komputer atau banjir, terlalu panas, petir, tumpahan cairan disengaja, listrik statis, kerusakan elektronik / kegagalan peralatan dan usang;
5)      Cacat desain dan pemrograman bug di database dan program yang terkait dan sistem, menciptakan berbagai kerentanan keamanan (misalnya tidak sah eskalasi hak istimewa), kehilangan data / korupsi, degradasi kinerja dll;
6)      Data korupsi atau kerugian yang disebabkan oleh masuknya data yang tidak valid atau perintah, kesalahan dalam proses administrasi database atau sistem, sabotase / kerusakan kriminal dll.

D.      Pencegahan Keamanan Database (Database Security)

Menurut buku Sistem Keamanan Komputer oleh deris setiawan, Keamanan database merupakan satu dari sebanyak metodologi yang sering diabaikan dan tidak dikembangkan.untuk lengkapi dan memperketat kebijaksanaan atas keamanan database, ada beberapa cara pencegahan dalam mengatasi tiap kelemahan.
1)      Selalu meng-update patch, baik untuk microsoft atau oracle. Patch dan beberapa perbaikan baru biasanya diedarkan secara reguar. Pastikan patch tersebut dengan normal dan cobalah dulu dimesin lain yang identik.
2)      Terapkan aturan - aturan firewall yang ketat, pastikan untuk selalu memeriksa konfigurasi firewall dari waktu ke waktu dan selalu memplok port – port akses database seperti TCP dan UDP 1434 (my sql) dan TCP 1521 – 1530 (oracle).
3)      Sanitasi input yang diterima dari user. Data- data yag diterima harus diperiksa tipenya (integer, string dan seterusnya) dan buanglah karakter meta-karakter .
4)      Membuang prosedur penyimpanan. Pasikan anda telah membuang store procedure (termasuk extended store procedure) dari database.
5)      Penggunaan stored procedure. Bila memungkinkan, gunakan kode sql yang sudah dipakai dalam sebuah stored procedures t  erhadap validitas input.
6)      Enskipsi session. Jika server database terpisah dari web server, pastikan untuk mengenkripsi session dengan beberapa cara, misalnya menggunakan ipsec buil-in pada Windows 2000.
7)      Minimalisasi hak superuser. Pastikan untuk menerapkan sesedikit mungkin hak-hak akses SU pada akses Database.

E.       Pemulihan Keamanan Database (Database Security)

Keamanan database memiliki beberapa tujuan, namun keamanan database yang memiliki banyak ancaman atau resiko yang harus dihadapi, tidak jarang menimbukkan kerusakan-kerusakan. Dalam pemulihan keamanan terdapat 2 pendekatan yang bisa dilakukan :
1)      Pemulihan melalui perosesan ulang
Karena perosesan tidak dapat dilanjutkan pada titik yang tepat, maka alternative yang paling baik adalah kembai ke suatu titik yang diketahui dan memrosees ulang bahan kerja disana. Bentuk yang paling sederhana dari jenis pemulihan ini adalah membuat salinan database secara priodik (yang disebut sebagai database save) dan menyimpan record atau catatn secara transaksi yang telah diproses sejak save itu. Selanjutnya, ketika terjadi kegagalan, staf operasi dapat memulihkan database yang diambil dari database yang di-savve dan kemudian memroses ulang semua transaksi.
Kelemahan dari pendekatan ini :
v  Pemrosesan ulang transaksi menghabiskan waktu yang lama.
v  Jika transaksi diproses secara serentak, maka peristiwa yang timbul akan menjadi tidak singkron.

2)      Pemulihan melalui rollback / rollforward
Pendekatan kedua adalah secara periodic membuat salinan database (database save) dan menyimpan suatu log perubahan yang dibuat oleh transaksi terhadap database sejak penyimpanan.
v  Rollback, membatalkan (undo) perubahan yang dibuat akibat adanya kealahan atau memproses sebagian transaksi dengan cara membatalkan perubahan-perubahan yang telah dibuat pada database. Kemudian, transaksi-transaksi yang sah yang sedang dalam proses pada saat yang terjadi kegagalan akan diproses ulang.
v  Rollforward, database dipulihkan dengan menggunakan data yang disimpan dan semua transaksi yang sah sejak penyimpanan tersebut diproses ulang.

F.       Lapisan Keamanan Database (Database Security)

Banyak lapisan dan jenis kontrol keamanan informasi sesuai untuk database, termasuk:
1.      pengendalian akses (Access control)
2.      audit (Auditing)
3.      otentikasi (Authentication)
4.      enkripsi (Encryption)
5.      kontrol integritas  (Integrity controls)
6.      backup (Backups)
7.      aplikasi keamanan  (Application security )


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.

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.





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 :
·         ALTER
·         CRETATE
·         DELETE
·         DROP
·         INDEX
·         INSERT
·         SELECT
·         UPDATE
·         REFERENCES

2.      Tingkatan akses administrator - Global administrative
Hanya digunakan oleh user setingkat root atau administrator dan tidak diberikan kepada user biasa, yaitu :

·         FILE
·         PROCESS
·         RELOAD
·         SHUTDOWN
·         CREATE TEMPORARY TABLE
·         EXCUTE
·         LOCK TABLES
·         REPLICATION CLIENT
·         REPLICATION SLAVE
·         SHOW DATABASES
·         SUPER

3.      Tingkatan Akses khusus — Special privileges
Dapat diterapkan pada setiap user dengan izin akses sebagai berikut :
·         ALL
·         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.

Jenis Hak Akses Berdasarkan Cakupan Akses Level

Seperti yang telah kita pelajari pada tutorial Cara Membuat Hak Akses (Privileges) User MySQL, bahwa MySQL menyediakan berbagai tingkatan level hak akses. Setiap user dapat dibatasi untuk dapat mengakses baik itu sebuah database tertentu saja, tabel tertentu, atau bahkan hanya kolom tertentu.
Jika didasarkan pada pengelompokkan ini, kita dapat membagi hak akses MySQL menjadi 4 level tingkatan, yaitu:

1. Hak Akses Global (*.*)

Hak akses ini berarti user dapat memiliki hak akses untuk seluruh database yang terdapat di dalam MySQL. Contoh penulisan query GRANT untuk level ini adalah:
GRANT SELECT ON *.* TO 'user'@'localhost';
Perhatikan cara penulisan nama_database.nama_tabel, dimana kita menulisnya dengan *.*, sehingga user tersebut dapat mengakses seluruh tabel pada seluruh database.

2. Hak Akses Level Database (nama_database.*)

Hak akses ini berarti user memiliki hak akses penuh untuk sebuah database. Contoh penulisan query GRANT untuk level database ini adalah:
GRANT SELECT ON universitas.* TO 'user'@'localhost';
Untuk penulisan nama_database.nama_tabel, kita membatasi nama database, namun memberikan hak akses untuk seluruh tabel, penulisannya adalah nama_database.*

3. Hak Akses Level Tabel (nama_database.nama_tabel)

Hak akses ini berarti user memiliki hak akses untuk sebuah tabel yang berada pada sebuah database. Contoh penulisan query GRANT untuk level ini adalah:
GRANT SELECT ON universitas.mahasiswa_ilkom TO 'user'@'localhost';
Hak akses yang dimiliki user hanya terbatas pada level sebuah tabel saja.

4. Hak Akses Level Kolom (nama_kolom)

Hak akses ini adalah hak akses paling kecil yang dapat diberikan kepada sebuah user. Dengan hak akses level kolom, user hanya memiliki hak akses untuk beberapa kolom pada sebuah tabel. Contoh penulisan query GRANT untuk level kolom ini adalah:
GRANT SELECT (nama,umur) ON universitas.mahasiswa_ilkom TO 'user'@'localhost';
Level paling akhir ini kita membatasi hak akses user hanya untuk kolom tertentu saja. Penulisan kolom yang diperbolehkan diletakkan di dalam tanda kurung ().

Tipe-Tipe Hak Akses dalam MySQL

Untuk setiap level diatas, kita dapat menerapkan berbagai tipe hak akses yang ingin diberikan, apakah itu hanya untuk melihat saja (query SELECT), menambahkan data (query INSERT), mengupdate data (query UPDATE), bahkan menghapus data (query DELETE).
Pada tabel dibawah ini saya melampirkan seluruh tipe hak akses yang dapat diberikan/dibatasi untuk user. Tabel tersebut diambil langsung dari manual resmi MySQL. Kebanyakan dari hak akses tersebut akan jarang digunakan dan belum kita pelajari, namun tabel dibawah dapat dijadikan referensi terkait hak akses (privileges).





Hak Akses
Keterangan
ALL [PRIVILEGES]
Memberikan seluruh hak akses, kecuali GRANT OPTION
ALTER
Hak akses untuk merubah tabel (ALTER TABLE)
ALTER ROUTINE
Hak akses untuk merubah stored routines
CREATE
Hak akses untuk membuat tabel dan database
CREATE ROUTINE
Hak akses untuk membuat dan menghapus stored routine
CREATE TABLESPACE
Hak akses untuk membuat, mengubah dan menghapus tablespaces dan log file
CREATE TEMPORARYTABLES
Hak akses untuk membuat tabel sementara CREATE TEMPORARY TABLE
CREATE USER
Hak akses untuk membuat, menghapus, dan mengubah user (CREATE USER, DROP USER, RENAME USER, dan REVOKE ALL PRIVILEGES)
CREATE VIEW
Hak akses untuk membuat dan mengubah views
DELETE
Hak akses untuk menghapus data (DELETE)
DROP
Hak akses untuk menghapus database, tabel dan view
EVENT
Hak akses untuk membuat event
EXECUTE
Hak akses untuk menjalankan stored routines
FILE
Hak akses untuk membuat server membaca maupun membuat file
GRANT OPTION
Hak akses untuk memberikan hak akses kepada user lainnya.
INDEX
Hak akses untuk membuat dan menghapus index
INSERT
Hak akses untuk menambahkan data (query INSERT)
LOCK TABLES
Hak akses untuk mengunci tabel (LOCK TABLES)
PROCESS
Hak akses untuk melihat seluruh proses (SHOW PROCESSLIST)
PROXY
Hak akses untuk proses proxy
REFERENCES
Belum diimplementasikan
RELOAD
Hak akses untuk operasi FLUSH
REPLICATION CLIENT
Hak akses untuk mengubah urutan master dan slave server
REPLICATION SLAVE
Hak akses untuk server replikasi untuk membaca log event biner dari server master
SELECT
Hak akses untuk melihat data (query SELECT)
SHOW DATABASES
Hak akses untuk melihat seluruh database (SHOW DATABASES)
SHOW VIEW
Hak akses untuk melihat pembuatan view (SHOW CREATE VIEW)
SHUTDOWN
Hak akses untuk mysqladmin shutdown
SUPER
Hak akses untuk fungsi administrasi server, seperti CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, dan perintah debug mysqladmin
TRIGGER
Hak akses untuk operasi trigger
UPDATE
Hak akses untuk memperbaharui data (UPDATE)


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.

Cara Membuat Hak Akses (Privileges) User MySQL (GRANT)

Hak akses dalam MySQL selain dibatasi dengan query apa saja yang dibolehkan, juga dapat dibatasi pada level dimana query tersebut akan dijalankan, misalkan pada level database, level tabel atau level kolom. Kita akan membahasnya secara lengkap pada tutorial kali ini.
Dalam perancangan aplikasi yang membutuhkan database, setiap user yang akan mengakses database seharusnya memiliki batasan masing-masing sesuai dengan fungsinya. Sebagai contoh, pada database universitas yang telah kita buat, terdapat 2 buah tabel, yakni mahasiswa_ilkomdan mahasiswa_ekonomi.
Misalkan kita membuat user mahasiswa. User mahasiswa ini hanya diberikan hak akses untuk melihat-lihat data tabel mahasiswa_ilkom dan mahasiswa_ekonomi, namun tidak bisa merubah apapun di dalam tabel tersebut. Di dalam MySQL, user mahasiswa ini hanya kita berikan hak akses SELECT.
Contoh lainnya, untuk keperluan administrasi, user ilkom_admin sebagai administrator akan diberikan hak akses untuk dapat menginput data dan merubah data dari tabel mahasiswa_ilkom. Tetapi , user ilkom_admin tidak bisa melihat dan merubah tabel mahasiswa_ekonomi, karena hak akses itu seharusnya diberikan kepada ekonomi_admin.
Dari contoh ini kita dapat melihat perlunya membatasi hak akses untuk masing-masing user: usermahasiswa, user ilkom_admin, dan user ekonomi_admin.

Cara Memberikan Hak Akses Kepada User dengan query GRANT

Untuk memberikan hak akses kepada sebuah user, MySQL menyediakan query GRANT. Berikut format dasar query GRANT:
GRANT hak_akses ON nama_database.nama_tabel TO 'nama_user'@'lokasi_user';
§  hak_akses adalah privileges yang akan berikan  kepada user  tersebut. Hak akses disini berisi query yang diperbolehkan, seperti: SELECT, INSERT, UPDATE, DELETE, atau query lainnya. Jika kita ingin memberikan hak penuh untuk semua query dasar tersebut, hak_akses ini bisa diisi dengan ALL.
§  nama_database adalah nama database yang ingin diberikan hak akses. Jika kita mengizinkan user tersebut dapat mengakses semua database yang ada, nama_databasebisa ditulis dengan tanda bintang (*).
§  nama_tabel adalah nama tabel yang ingin diberikan hak akses. Jika kita mengizinkan user dapat menggunakan semua  tabel, nama_tabel bisa ditulis dengan tanda bintang (*).
§  nama_user adalah nama dari user yang akan diberikan hak akses.
§  lokasi_user adalah alamat IP dari user yang ingin diberikan hak akses.
Sebagai contoh penggunaan query GRANT, misalkan kita ingin memberikan privileges kepadailkom_admin untuk dapat melihat (melakukan query SELECT) pada tabel mahasiswa_ilkom yang berada pada database universitas, maka berikut query yang kita gunakan:
1
2
3
4
mysql> CREATE USER 'ilkom_admin'@'localhost' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.52 sec)
mysql> GRANT SELECT ON universitas.mahasiswa_ilkom TO 'ilkom_admin'@'localhost';
Query OK, 0 rows affected (0.12 sec)
Query diatas terdiri dari 2 bagian, pada bagian pertama kita membuat user ilkom_admin yang harus diakses dari komputer localhost (komputer yang sama dengan server MySQL berada), dan memberikan password ‘r4hasia’. Cara membuat user telah kita bahas pada tutorial sebelumnya, Cara Membuat dan Menghapus User MySQL (CREATE USER). Selanjutnya pada bagian kedua, kita memberikan hak akses dengan query GRANT pada untuk user ilkom_admin.
Perhatikan cara penulisan query GRANT tersebut, setelah keyword GRANT, diikuti dengan kataSELECT. SELECT disini adalah hak akses yang ingin di berikan kepada user, saya memberikan hakSELECT karena user admin saat ini hanya dapat melakukan perintah SELECT.
Setelah SELECT, diikuti dengan penulisan tabel yang diperbolehkan, yakniuniversitas.mahasiswa_ilkom (dibaca:tabel mahasiswa_ilkom pada database universitas). Bagian terakhir adalah user yang akan diberikan hak aksesnya, yakni ilkom_admin padalocalhost. Untuk mencoba user ilkom_admin, keluarlah dari root, dan masuk sebagai ilkom_admin:
D:\MySQL\bin>mysql -u ilkom_admin -pr4hasia

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2

Server version: 5.5.27 MySQL Community Server (GPL)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| universitas        |
+--------------------+
2 rows in set (0.00 sec)

mysql> USE universitas;
Database changed

mysql> SHOW TABLES;
+-----------------------+
| Tables_in_universitas |
+-----------------------+
| mahasiswa_ilkom       |
+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM mahasiswa_ilkom;
+-----------+-----------------+------+--------------+------+
| nim       | nama            | umur | tempat_lahir | IPK  |
+-----------+-----------------+------+--------------+------+
| 089045001 | Andi Suryo      |   23 | Jakarta      | 2.70 |
| 109245021 | Santi Syanum    |   21 | Malang       | 3.20 |
| 099145055 | Neil Situmorang |   22 | Medan        | 1.90 |
+-----------+-----------------+------+--------------+------+
3 rows in set (0.07 sec)

mysql> DELETE FROM mahasiswa_ilkom WHERE nama="Andi Suryo";
ERROR 1142 (42000): DELETE command denied to user
'ilkom_admin'@'localhost' fortable 'mahasiswa_ilkom'

mysql> DROP TABLE mahasiswa_ilkom;
ERROR 1142 (42000): DROP command denied to user
'ilkom_admin'@'localhost' for table 'mahasiswa_ilkom'

Dari contoh query diatas, dapat dilihat bahwa pada saat ilkom_admin menjalankan perintah SHOW TABLES, ia hanya dapat melihat satu tabel, yakni tabel mahasiswa_ilkom. Padahal dalam database tersebut kita juga telah membuat tabel mahasiswa_ekonomi, namun karena hak akses yang diberikan, ilkom_admin hanya dapat melihat tabel yang diperbolehkan.

Cara Memberikan Hak Akses Untuk Seluruh Tabel

Sebagai contoh kedua, kali ini kita akan membuat user mahasiswa yang diberikan hak akses untuk dapat melihat seluruh tabel yang ada pada database universitas, berikut querynya:
1
2
3
4
mysql> CREATE USER 'mahasiswa'@'localhost' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT SELECT ON universitas.* TO 'mahasiswa'@'localhost';
Query OK, 0 rows affected (0.00 sec)
Pembuatan user mahasiswa ini hampir sama dengan perintah saat membuat user ilkom_admin. Kecuali kali ini untuk penulisan tabel kita menggunakan format universitas.* yang berarti dapat mengakses seluruh tabel pada database universitas.
Selanjutnya, kita akan mencoba menggunakan user mahasiswa untuk melihat databaseuniversitas:


1.      D:\MySQL\bin>mysql -u mahasiswa -pr4hasia 
2.      Welcome to the MySQL monitor.  Commands end with ; or \g.
3.      Your MySQL connection id is 3
4.      Server version: 5.5.27 MySQL Community Server (GPL)
5.      Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
6.      Oracle is a registered trademark of Oracle Corporation and/or its
7.      affiliates. Other names may be trademarks of their respective owners.
8.      Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
9.       mysql> USE universitas;
10.  Database changed
11.   mysql> SHOW TABLES;
12.  +-----------------------+
13.  | Tables_in_universitas |
14.  +-----------------------+
15.  | mahasiswa_ekonomi     |
16.  | mahasiswa_ilkom       |
17.  +-----------------------+
18.  2 rows in set (0.00 sec)
Dari hasil query diatas, terlihat bahwa user mahasiswa dapat melihat terdapat 2 tabel dalam database universitas. Dan jika kita membuat sebuah tabel baru dalam database universitas, usermahasiswa juga akan bisa melihatnya.

Cara Memberikan Seluruh Hak Akses (query GRANT ALL)

GRANT ALL adalah cara penyingkatan memberikan hampir semua hak akses kepada sebuah user tertentu. Hak akses ini mencakup seluruh query dasar:
ALTER, CREATE, CREATE TEMPORARY TABLES, DELETE, DROP, EXECUTE, FILE, INDEX, INSERT, LOCK TABLES, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SELECT, SHOW DATABASES, SHUTDOWN, SUPER, dan UPDATE.
Sebagian besar hak akses diatas belum kita bahas, namun ini dapat menjadi referensi jika anda memberikan hak akses dengan GRANT ALL kepada sebuah user. Dari kedua contoh user sebelumnya, yakni user ilkom_admin dan mahasiswa, kita hanya menggunakan hak akses SELECT. Kali ini kita akan memberikan hak akses penuh kepada userekonomi_admin, dengan query GRANT ALL. Berikut querynya:

1.      mysql> CREATE USER 'ekonomi_admin'@'localhost' IDENTIFIED BY 'r4hasia';
2.      Query OK, 0 rows affected (0.00 sec)
3.      mysql> GRANT ALL ON universitas.mahasiswa_ekonomi
4.      TO 'ekonomi_admin'@'localhost';
5.      Query OK, 0 rows affected (0.00 sec)
Dengan memberikan hak akses GRANT ALL, maka user ekonomi_admin dapat menggunakan seluruh query dasar pada tabel mahasiswa_ekonomi, seperti SELECT, UPDATE, bahkan DELETE. Sebagai latihan, silahkan mencoba masuk sebagai user ekonomi_admin dan lakukan perintah seperti UPDATE, DELETE, dan DROP.
Dalam merancang aplikasi yang memerlukan database MySQL, pembatasan hak akses seperti diatas memerlukan seni tersendiri. Permasalahan muncul jika tiba-tiba user yang sudah dibatasi ternyata memerlukan akses ke tabel lain. Kita sebaiknya sudah memperkirakan level apa saja yang bisa diakses oleh user tertentu dan pada tabel apa saja sebelum aplikasi direlease.
Jika anda membangun aplikasi, biasanya pengguna tidak akan diberikan akses langsung dengan MySQL Server, namun kita biasanya akan memandu pengguna melalui interface lainnya seperti halaman web (untuk situs online) atau form visual basic (untuk aplikasi desktop). Dalam aplikasi web, kode PHPlah (atau lebih tepatnya: web server) yang mengakses MySQL, pengguna hanya dihadapkan pada halaman form website.
Untuk hal keamanan database, Jika anda telah membatasi hak akses pengguna pada level PHP, hal tersebut bisa dikatakan sudah cukup. Namun jika terdapat kemungkinan pengguna mengakses MySQL Server secara langsung, kita sedapat mungkin telah mengantisipasinya dengan membuat user berlapis dari kode PHP dan dari dalam MySQL.

Cara Memberikan Hak Akses MySQL Pada Level Kolom

Untuk keperluan yang lebih spesifik, hak akses dapat juga dibatasi hanya untuk kolom tertentu. Hal ini bisa didasarkan bahwa terdapat sebuah kolom yang dirasakan rahasia, dan tidak boleh diketahui user tersebut.
Misalkan kita membuat user tamu_ilkom yang hanya dapat melihat nama dan umur mahasiswa pada tabel mahasiswa_ilkom, dan merahasiakan kolom lainnya seperti alamat dan IPK, maka berikut querynya:

1.      mysql> CREATE USER 'tamu_ilkom'@'localhost';
2.      Query OK, 0 rows affected (0.00 sec)
3.      mysql> GRANT SELECT (nama,umur) ON universitas.mahasiswa_ilkom
4.      TO 'tamu_ilkom'@'localhost';
5.      Query OK, 0 rows affected (0.00 sec)
Perhatikan cara penulisan kolom yang diberikan hak aksesnya, setelah hak akses (dalam contoh adalah SELECT), penulisan nama kolom harus berada dalam tanda kurung. Dapat dilihat bahwa kita memberikan hak akses hanya pada kolom nama dan umur untuk tabel mahasiswa_ilkom.
Untuk mengujinya, masuklah sebagai user tamu_ilkom:

1.      D:\MySQL\bin>mysql -u tamu_ilkom
2.      Welcome to the MySQL monitor.  Commands end with ; or \g.
3.      Your MySQL connection id is 4
4.      Server version: 5.5.27 MySQL Community Server (GPL)
5.      Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
6.      Oracle is a registered trademark of Oracle Corporation and/or its
7.      affiliates. Other names may be trademarks of their respective owners.
8.      Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
9.      mysql> USE universitas.
10.  Database changed
11.  mysql> SHOW TABLES;
12.  +-----------------------+
13.  | Tables_in_universitas |
14.  +-----------------------+
15.  | mahasiswa_ilkom       |
16.  +-----------------------+
17.  1 row in set (0.00 sec)
18.  mysql> SELECT * FROM mahasiswa_ilkom
19.  ERROR 1143 (42000): SELECT command denied to user 'tamu'@'localhost'
20.  for column 'nim' in table 'mahasiswa_ilkom'
21.  mysql> SELECT nama,umur FROM mahasiswa_ilkom;
22.  +-----------------+------+
23.  | nama            | umur |
24.  +-----------------+------+
25.  | Andi Suryo      |   23 |
26.  | Santi Syanum    |   21 |
27.  | Neil Situmorang |   22 |
28.  +-----------------+------+
29.  3 rows in set (0.00 sec)
Pada saat user tamu_ilkom mencoba menampilkan seluruh kolom dengan query SELECT * FROM mahasiswa_ilkom, MySQL akan mengeluarkan error karena user tamu_ilkom hanya memiliki hak akses untuk kolom nama dan umur saja, dimana pada saat menggunakan perintah SELECT nama,umur FROM mahasiswa_ilkom, MySQL menampilkannya dengan baik.

Kelebihan Dan Kekurangan MySQL
Kelebihan MySQL      :
1.      Portabilitas. MySQL dapat berjalan stabil pada berbagai sistem operasi seperti Windows, Linux, FreeBSD, Mac Os X Server, Solaris, Amiga, dan masih banyak lagi.
2.      Perangkat lunak sumber terbuka. MySQL didistribusikan sebagai perangkat lunak sumber terbuka, dibawah lisensi GPL sehingga dapat digunakan secara gratis.
3.      Multi-user. MySQL dapat digunakan oleh beberapa pengguna dalam waktu yang bersamaan tanpa mengalami masalah atau konflik.
4.      Performance tuning', MySQL memiliki kecepatan yang menakjubkan dalam menangani query sederhana, dengan kata lain dapat memproses lebih banyak SQL per satuan waktu.
5.      Ragam tipe data. MySQL memiliki ragam tipe data yang sangat kaya, seperti signed / unsigned integer, float, double, char, text, date, timestamp, dan lain-lain.
6.      Keamanan. MySQL memiliki beberapa lapisan keamanan seperti level subnetmask, nama host, dan izin akses user dengan sistem perizinan yang mendetail serta sandi terenkripsi.
7.      Konektivitas. MySQL dapat melakukan koneksi dengan klien menggunakan protokol TCP/IP, Unix soket (UNIX), atau Named Pipes (NT).
8.      Lokalisasi. MySQL dapat mendeteksi pesan kesalahan pada klien dengan menggunakan lebih dari dua puluh bahasa. Meski pun demikian, bahasa Indonesia belum termasuk di dalamnya.
9.      Antar Muka. MySQL memiliki antar muka (interface) terhadap berbagai aplikasi dan bahasa pemrograman dengan menggunakan fungsi API (Application Programming Interface).
10.  Klien dan Peralatan. MySQL dilengkapi dengan berbagai peralatan (tool)yang dapat    digunakan untuk administrasi basis data, dan pada setiap peralatan yang ada disertakan petunjuk online.

Kekurangan My SQL
1.      Untuk koneksi ke bahasa pemrograman visual seperti vb, delphi, dan foxpro, mysql kurang support, karena koneksi ini menyebabkan field yang dibaca harus sesuai dengan koneksi dari program visual tersebut, dan ini yang menyebabkan mysql jarang dipakai dalam program visual.
2.       Data yang ditangani belum begitu besar
3.      Dari sisi security , atau keamanan, yang agak terlalu sederhana bagi sebuah SQL Engine , meskipun tidak sesederhana SQLite yang juga datang dari dunia Open Source dan cukup digemari para Web Developer .





DAFTAR PUSTAKA



Komentar

Postingan populer dari blog ini

Konsep Pembuatan Script Game Komputer

User Interface pada Game Komputer