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 .
Komentar
Posting Komentar