Wednesday, August 26, 2009

Belajar administrasi user pada Mysql

I. Pendahuluan
Dalam tutorial sebelumnya, kita sudah mempelajari tentang perintah-perintah dasar MySQL. Pada tutorial kali ini kita akan membuat bagaimana caranya agar database MySQL kita hanya bisa diakses oleh user-user tertentu saja. Denagn kata lain kita akan mempelajari tentang pemberian password pada MySQL.

A. Memberi password root
Sebelumnya, kalau kita ingin mengakses database MySQL kita, maka hanya tinggal kita ketikkan mysql dan kita bisa langsung mengakses database MySQL kita. Namun, bagaimana jika ada orang yang kita tidak kehendaki mengetikkan kata itu juga? Tentu orang tersebut bisa langsung mengakses database kita dan bisa mengubah atau malah menghapus database-database yang ada di MySQL. Hal itu tentu akan sangat kita hindari. Untuk menghindari hal itu, sebaiknya kita memberikan password kepada database kita. Format untuk memberi password adalah:

# mysqladmin -u root password password_kita

misalnya kita ingin memberikan password pada MySQL kita berupa 123456, maka ketikkan:

# mysqladmin -u root password 123456

Jadi kalau ada orang yang hanya menulis mysql untuk masuk ke database kita, akan terjadi error seperti berikut:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Untuk mengakses mysql yang sudah diberi password, maka ketikkan:

# mysql -u root -p

dan masukkan password yang sudah kita buat.

B. Merubah Password root
Kalau kita ingin merubah password root, maka kita harus berada di dalam database MySQL dan ketikkan:

> update mysql.user set password=password('password_baru') where user='root';

> flush privileges;

Flush priveleges digunakan bila terjadi perubahan yang dilakukan di database MySQL, sehingga perubahan tersebut akan berpengaruh pada selanjutnya. Sekarang keluar dari mysql dan ketikkan

# mysql -u root -p

masukkan password dengan password yang baru dibuat.

C. Lupa password root
Jika kita benar-benar lupa dengan password root mysql dan kita tidak berada di lingkungan mysql tetapi di lingkungan linux, maka ikuti langkah berikut ini:
1. Matikan MySQL

#/etc/init.d/mysqld stop

2. Masuk ke Server MySQL tanpa Password

# mysqld_safe --skip-grant-tables &

3. Akses ke Server MySQL

# mysql -u root

4. Membuat password root MySQL

mysql> use mysql;
mysql> update user set password=PASSWORD("password_baru") where User='root';
mysql> flush privileges;
mysql> quit;

5. Matikan Server MySQL

# /etc/init.d/mysqld stop

6. Mengetes Server MySQL

# /etc/init.d/mysqld start

# mysql -u root -p

masukkan password yang baru dibuat dan seharusnya kita sudah dapat untuk mengakses server MySQL kita.

D. Menambah User Baru
Setelah kita membuat password root untuk MySQL, maka selanjutnya kita akan membahas cara menambah user baru pada database MySQL. Sangat tidak dianjurkan untuk selalu mengakses database dengan user root, karena dapat berakibat fatal jika kita memberikan perintah yang keliru. Untuk menambah user baru, kita harus sebagai user root. Berikut adalah langkah-langkahnya:
1. Masuk ke MySQL

# mysql -u root -p

2. Pilih Database MySQL

> use mysql;

3. Melihat Tabel-Tabel

> show tables;

4. Melihat tabel user

> describe user;

Akan terlihat sebagai berikut:


5. Masukkan User Baru
Untuk memasukkan user baru, maka ikuti perintah berikut:

Perintah di atas akan menambahkan user baru dengan nama dedi dan password 123456. Untuk dapat melihat konfigurasi user yang baru dibuat, maka ketikkan perintah berikut:


Setelah itu, jangan lupa untuk memberikan perintah:

> flush privileges;

Untuk mengetesnya, keluar dari MySQL lalu coba untuk mengakses database dengan user baru tersebut.

# mysql -u dedi -p

Namun, biasanya untuk memasukkan user baru digunakan perintah Grant dimana perintah ini selain dapat menambah user baru juga dapat memberi izin akses user tersebut sehingga kita tidak bekerja dua kali. Untuk lebih jelasnya tentang perintah Grant, silahkan ke tutorial selanjutnya.

E. Menghapus User
Untuk menghapus user maka yang berhak melakukannya adalah root dengan format:

> delete from mysql.user where user='nama_user';

dalam kasus kita:

> delete from mysql.user where user='dedi';

Kalau sudah menghapus user, ketikkan: > flush privileges;

F. Merubah Password User
Untuk merubah password user, maka yang berhak melakukannya adalah root dengan perintah:

> update mysql.user set password=password('password_untuk_dedi') where user='dedi';

G. Manajemen user
Untuk menjaga kestabilan dan keamanan database, maka kita harus mengetahui proses yang sedang terjadi pada database server dengan cara melihat siapa saja yang mengakses database kita. Ketikkan perintah berikut:

> show processlist;

Perintah tersebut akan menampilkan user-user yang sedang mengakses MySQL server.

H. Konfigurasi Izin Akses User
Dengan MySQL, kita dapat mengatur izin akses tiap-tiap user, misalnya user tertentu hanya dapat membaca data pada database tanpa bisa melakukan modifikasi atau hanya dapat mengakses database yang ditentukan saja serta beberapa izin-izin akses lainnya. Ada dua perintah yang digunakan yaitu Grant dan Revoke.
1. Menggunakan Grant
Grant merupakan perintah untuk memberikan hak izin akses bagi user agar dapat mengakses database, tabel, dan kolom. Selain itu kita dapat menambahkan user baru dengan perintah grant ini. Izin akses pada MySQL diatur dalam database sistem MySQL yang terdiri atas lima buah tabel yaitu user, d, host, tables_priv dan columns_priv. Jika kita melakukan perubahan izin akses pada user yang masih aktif bekerja dalam prompt MySQL, MySQL tidak langsung menerapkan perubahan tersebut meski kita telah mengetikkan flush privileges. Konfigurasi itu berlaku berlaku ketika user tersebut menutup koneksi dengan database MySQL kemudian melakukan koneksi kembali. Perintah Grant memiliki tingkat pilihan yang dapat dipergunakan yaitu:

a. Izin Akses Penuh
Izin ini digunakan untuk mengakses seluruh database yang berada pada server. Konfigurasi akses ini terletak pada tabel user. Untuk memberikan izin akses penuh pada user, maka ikuti langkah-langkah berikut:

# mysql -u root -p

> use mysql;
> grant all privileges on * to dedi@localhost identified by 'password' with grant option;

Perintah di atas akan memberikan izin akses penuh setara dengan root pada user dedi. Sebaiknya kita tidak memberikan izin akses ini pada user lain, karena kaan terdapat multi root pada database server MySQL.

Option identified by 'password' akan menerapkan user tersebut agar tetap memasukkan password saat mengakses database. Jika kita tidak memberikan option password, user tersebut dapat mengakses database tanpa harus memasukkan password terlebih dahulu. Sedangkan penyertaan option with grant option akan memebrikan hak penuh pada user sehinga user tersebut mampu memberikan perintah grant pada user lainnya.

Namun perintah di atas memiliki kekurangan yaitu ketika kita sebelumnya tidak memilih database mysql sebagai database ktif maka server akan mengabaikan akses reload, shutdown, process, file dan grant. Berati user tersebut tetap tidak diizinkan mengakses perintah-perintah tersebut. oleh karena itu, kita dapat mengganti tanda * menjadi tanda *.*

Sebenarnya perintah grant juga secara otomatis dapat membuat user baru. Misalnya user budi belum ada dalam user database namun dengan perintah seperti diatas (dengan merubah dedi menjadi budi dan merubah passwordnya juga), maka di dalam database mysql sudah terbentuk user budi secara otomatis.

Jika kita tidak memasukkan option password pada perintah grant, maka user tersebut bisa mengakses database MySQL tanpa harus memasukkan password dan itu sangat beresiko.

b. Izin akses Database
Izin ini digunakan untuk mengakses tabel-tabel yang berada pada database yang telah ditentukan, konfigurasi akses ini terletak pada tabel db dan tabel host. Untuk memberikan izin akses database pada user, lakukan seperti contoh berikut:

mysql>grant all on *.* to 'wau'@'192.168.0.186' identified by 'yui';

Perintah diatas akan mengatur user tini hanya dapat mengakses database latihan saja dan tidak dapat mengakses database lainnya.

c. Izin Akses Tabel
Izin ini digunakan untuk mengatur izin akases terhadap semua kolom yang terdapat pada tabel yang ditentukan, konfigurasi akses ini terletak pada tables_priv. Tabel tables_priv menyediakan perintah izin akses select, insert, update, delete, create, drop, grant, references, index dan alter. Untuk menggunakan izin akses tabel, ketikkan perintah berikut:

grant select on latihan

Perintah di atas menjelaskan bahwa user dimas hanya diperbolehkan untuk melakukan perintah select pada tabel teman dalam database latihan. Dia tidak bisa merubah pada tabel tersebut dan hanya diperbolehkan untuk melihat saja.

d. Izin Akses Kolom
Izin ini digunakan untuk mengatur izin akses pada kolom yang ditentukan saja. Konfigurasi ini terletak pada tabel columns_priv dan lebih sedikit dibandingkan dengan teble tables_priv. Hak akses yang dizinkan meliputi select, insert, update dan References. Contoh penggunaan izin akses kolom adalah sebagai berikut:


Perintah di atas akan menjelaskan bahwa user deni hanya mendapat izin melakukan update pada kolom nama saja, sedangkan field-field yang lain tidak bisa dirubah oleh user deni. Kombinasi antara izin akses tabel dan kolom dapat dilakukan dengan cara:


e. Menampilkan Izin Akses
Untuk mengetahui izin akses pada user, ketikkan:

> show grants;



2. Menggunakan Revoke
Revoke merupakan kebalikan dari Grant yaitu menghapu atau mencabut kembali izin akses user yang sebelumnya telah diberikan. Tingkat pilihan yang dapat digunakan juga sama dengan perintah Grant sehingga semua izin akses dengan Grant dapat anda cabut lagi. Untuk menggunakan Revoke, maka perintahnya sama dengan contoh-contoh diatas, hanya saja ganti perintah grant menjadi revoke sehingga user tersebut tidsak bisa mengakses suatu database atau kolom atau tabel.

3. Mengakses server mysql di server lain
Jika sebelumnya untuk mengakses database dengan mengetikan

# mysql -u root -p

maka kita langsung mengakses database, itu berarti database kita berada dalam localhost. Lalu bagaimana kalau database kita terletak pada server lain? Untuk mengaksesnya, maka ketikkan:

# mysql -u root -h alamat_ip

misalnya seorang host dari IP 192.168.1.3 ingin mengakses database server yang terletak pada 192.168.1.2, maka:

# mysql -u root -h 192.168.1.2

Jika ada error seperti berikut:

ERROR 1130 (00000): Host '192.168.1.3' is not allowed to connect to this MySQL server

maka itu berarti IP tersebut tidak diijinkan untuk mengakses database tersebut. Agar IP tersebut diperbolehkan mengakses database, maka kita harus memberikan perintah grant kepada database server tersebut. Misalnya seseorang yang bernama susan ingin mengakses database coba yang berada di database server yang mempunyai IP 192.168.1.2. Maka agar user susan dapat mengakses database server, pastikan bahwa user susan sudah ada dalam database klien. Untuk mengeceknya berikan perintah berikut:

> use mysql;

> select user from users;

Jika user susan belum ada, buatlah user tersebut seperti pada contoh di atas.
Kemudian dari sisi server, buat perintah grant dengan format:

> grant all on nama_database.* to nama_user@alamat_ip identified by 'password_user';

Dalam kasus ini:

> grant all on coba.* to
susan@192.168 This e-mail address is being protected from spambots, you need JavaScript enabled to view it
.1.3 identified by '123456';

> flush priveleges;

Untuk mengecek apakah user susan dapat mengakses database server, ketik perintah berikut:

> show grants for
susan@192.168 This e-mail address is being protected from spambots, you need JavaScript enabled to view it
.1.3

Setelah itu, coba akses kembali ke database server dengan cara:

# mysql -h 192.168.1.2 -u susan -p

Dan masukkan password untuk susan yaitu 123456, maka user susan hanya dapat mengakses database coba yang ada di database server. Namun perlu diperhatikan yaitu pada saat menuliskan perintah grant agar selalu menulis identified by 'password_user', karena jika tidak ditulis, maka akan membahayakan security database server sebab user susan bisa masuk ke database server tanpa password. Dan lebih berbahaya lagi jika hal ini diketahui oleh orang lain.

source http://www.catatanlepas.com/component/content/article/86.html

2 comments:

Agung Setiawan said...

sip dah Gan, makasih infonya, mantap

dendy said...

sama-sama gan.hehehe