Manajemen User dan Hak Akses Database di MySQL
Masih sering saya jumpai para developer aplikasi yang kurang memperhatikan masalah pengaturan hak akses database yang digunakannya. Padahal hal ini permasalahan yang sangat riskan sekali karena menyangkut masalah keamanan databasenya. Sebagai contoh, misalkan ada developer yang masih menggunakan user ‘root’ untuk keperluan koneksi dari aplikasi yang dibuatnya ke database MySQL. Padahal ini riskan sekali, coba bayangkan seandainya ada peretas yang berhasil masuk ke aplikasinya melalui celah kelemahannya, maka peretas bisa melakukan apapun terhadap semua databasenya karena user ‘root’ adalah top level user di MySQL. Hal ini merupakan salah satu contoh kasus saja yang bisa berakibat permasalahan yang fatal.
Oleh karena itu, dalam artikel ini saya akan memaparkan bagaimana cara melakukan manajemen user di MySQL, mulai dari cara membuat user baru, kemudian memberi hak akses si user tersebut pada database tertentu, dan juga bagaimana cara membatasi hak akses si user tersebut.
Dalam artikel ini nanti, semua langkah untuk melakukan manajemen user menggunakan query SQL. Kita dapat menjalankan query ini melalui tools MySQL seperti phpMyAdmin, Navicat dll atau bisa juga melalui console. Meskipun kita dapat melakukan manajemen user dan hak akses ini melalui fitur yang ada di setiap tools tersebut, namun tidak ada salahnya tetap kita belajar dengan query supaya di saat tool-tool tersebut tidak tersedia (melalui console), kita tetap bisa melakukan hal ini. Dan yang perlu diingat, bahwa tool itu juga software tentunya kemungkinan terdapat celah keamanan yang beresiko.
Membuat User Akses
Secara default, ketika MySQL pertama kali diinstall maka hanya terdapat user ‘root’. User ‘root’ ini memiliki level tertinggi (top level) dalam MySQL. Sebaiknya jangan menggunakan ‘root’ ini untuk mengkoneksikan aplikasi database Anda ke MySQL demi keamanan. Untuk itu kita perlu membuat user koneksi selain ‘root’ ini. Ketika pertama kali dalam membuat user di MySQL, kita menggunakan user ‘root’ terlebih dahulu.
Secara umum perintah query untuk membuat user baru adalah sbb:
1.
CREATE
USER
'namauser'
@
'host'
IDENTIFIED
BY
'password'
;
Contoh 1:
1.
CREATE
USER
'rosihanari'
@
'192.168.1.7'
IDENTIFIED
BY
'12345'
;
1.
<?php
2.
$dbhost
=
'192.168.1.2'
;
3.
$dbuser
=
'rosihanari'
4.
$dbpass
=
'12345'
5.
mysql_connect(
$dbhost
,
$dbuser
,
$dbpass
);
6.
?>;
Contoh 2:
1.
CREATE
USER
'rosihanari'
@
'localhost'
IDENTIFIED
BY
'12345'
;
Contoh 3:
1.
CREATE
USER
'rosihanari'
@
'%'
IDENTIFIED
BY
'12345'
;
Mungkin pertanyaan berikutnya adalah, apakah bisa kita membuat sebuah user untuk melakukan koneksi dari beberapa host IP saja? OK bisa, caranya ya cukup membuat beberapa query seperti di atas namun dengan IP host yang berbeda-beda. Misalkan:
1.
CREATE
USER
'rosihanari'
@
'192.168.1.7'
IDENTIFIED
BY
'12345'
;
2.
CREATE
USER
'rosihanari'
@
'192.168.1.8'
IDENTIFIED
BY
'12345'
;
3.
CREATE
USER
'rosihanari'
@
'192.168.1.9'
IDENTIFIED
BY
'12345'
;
Menghapus User
Untuk menghapus user yang sudah dibuat, perintahnya adalah
1.
DROP
USER
‘namauser’@‘host’;
1.
DROP
USER
‘rosihanari’@‘localhost’;
Memberikan Hak Akses User ke Database Tertentu
Setelah kita membuat user-user yang memiliki hak akses ke MySQL nya. Kemudian bagaimana caranya kita membatasi hak akses tiap user tersebut hanya bisa mengakses database tertentu dan hanya bisa melakukan query tertentu saja? OK secara umum sintaks query SQL untuk pembatasan hak akses user adalah sbb:
1.
GRANT
hak1, hak2, ...
ON
namadatabase.namatabel
TO
'namauser'
@
'host'
;
- SELECT: si user bisa melakukan perintah SELECT
- INSERT: si user bisa melakukan perintah INSERT untuk menambah record
- UPDATE: si user bisa melakukan perintah UPDATE untuk update record
- DELETE: si user bisa melakukan perintah DELETE untuk hapus record
- CREATE: si user bisa melakukan perintah CREATE untuk membuat tabel baru
- ALTER: si user bisa melakukan perintah ALTER untuk mengubah struktur tabel
- DROP: si user bisa melakukan perintah DROP untuk menghapus tabel
1.
GRANT
SELECT
ON
db1.*
TO
'rosihanari'
@
'192.168.1.2'
;
Contoh 2:
1.
GRANT
SELECT
,
INSERT
ON
db1.*
TO
'rosihanari'
@
'192.168.1.2'
;
Contoh 3:
1.
GRANT
SELECT
,
INSERT
,
DELETE
ON
db1.tabel1
TO
'rosihanari'
@
'192.168.1.2'
;
Contoh 4:
1.
GRANT
ALL
PRIVILEGES
ON
db1.*
TO
'rosihanari'
@
'localhost'
;
Contoh 5:
1.
GRANT
ALL
PRIVILEGES
ON
*.*
TO
'rosihanari'
@
'localhost'
;
Note:
Setiap kali kita memberikan perintah GRANT di atas, jangan lupa memberikan perintah query
1.
FLUSH
PRIVILEGES
;
Mencabut Hak Akses User
Selanjutnya bagaimana cara mencabut hak akses yang dimiliki user tertentu? Secara umum sintak query SQL nya adalah sbb:
1.
REVOKE
hak1, hak2, ...
ON
namadatabase.namatabel
FROM
'namauser'
@
'host'
;
1.
REVOKE
SELECT
ON
'db1'
.*
FROM
'rosihanari'
@
'192.168.1.2'
;
Contoh 2:
1.
REVOKE
SELECT
,
DELETE
ON
'db1'
.*
FROM
'rosihanari'
@
'192.168.1.2'
;
Contoh 3:
1.
REVOKE
ALL
PRIVILEGES
ON
'db1'
.*
FROM
'rosihanari'
@
'localhost'
;
Note:
Jangan lupa kembali memberikan perintah query FLUSH PRIVILEGES; setelah menjalankan query REVOKE di atas.
OK dari tutorial di atas mudah-mudahan bisa memberikan manfaat untuk pengunjung blog tutorial ini untuk mewujudkan server MySQL yang aman dan handal. Usahakan sedari sekarang mempraktikkan manajemen user di atas, jangan sampai menunda-nunda dan baru menyadari setelah terjadi sesuai dengan database kita. Karena terkadang kelalaian kita dari hal-hal kecil seperti ini bisa membawa masalah yang besar dari sistem yang kita bangun dengan susah payah. Betul???
No comments:
Post a Comment