Bab 5 MySQL
5.3. Hak Akses
Yang perlu kita perhatikan adalah: Kenapa sedemikian mudahnya kita mengakses MySQL (cukup mengetikkan ‘mysql’)? Kok tidak ada pertanyaan seperti username dan login?
Memang inilah yang harus diwaspadai. Pertama kali MySQL dijalankan dia akan membolehkan siapapun untuk masuk ke dalam sistem. Ini SANGAT BERBAHAYA SEKALI! Sekarang yang harus kita lakukan pertama kali adalah PEMBATASAN HAK AKSES.
Mari kita lihat apa saja yang sudah ada di MySQL. Masuklah ke dalam sistem MySQL dengan mengetikkan mysql pada sistem prompt. Jangan lupa, sebelumnya kita harus sudah mengaktifkan MySQL servernya dulu
Pertama kali MySQL dijalankan dia akan membolehkan
siapapun untuk masuk ke dalam sistem.
Ini SANGAT
BERBAHAYA
SEKALI! Sekarang
yang harus kita lakukan
pertama kali adalah
PEMBATASAN
HAK AKSES.
5E - C O M M E R C E P E M O G R A M A N W E B 101
C:\apache\mysql\bin>mysql <enter>
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is xx to server version:
3.23.47-nt.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
mysql>_
Pada MySQL prompt ketikkan sebagai berikut:
mysql>SHOW DATABASES ; +———————————+
| Database | +———————————+
| mysql |
| test | +———————————+
2 rows in set (0.00 sec)
Perintah diatas menampilkan database apa saja yang sudah ada sejak MySQL pertama kali diinstal. Disini ada 2 database, yaitu database mysql dan test. Database mysql berisi data-data tentang user, password, nama host, dan sebagainya (nanti kita lihat isinya yach..sabar..). Dan database test merupakan database untuk latihan bagi siapa saja yang mau. Kalau tidak diperlukan, kita bisa hapus database test ini.
Catatan:
MySQL berarti merujuk ke perangkat lunak/software database MySQL, sedangkan mysql (dengan huruf kecil) berarti merujuk ke sebuah nama database.
Sekarang kita lihat apa saja isi dari database mysql tersebut Aktifkan database mysql:
mysql>USE mysql ; Database changed
Kita sudah mengaktifkan database MySQL dan sistem memberi respon dengan pesan ‘Database changed’.
Tampilkan isi database MYSQL:
mysql>SHOW TABLES ; +————————————————————+
| Tables_in_mysql | +————————————————————+
| columns_priv |
| db |
| func |
| host |
| tables_priv |
| user | +————————————————————+
6 rows in set (0.00 sec)
MySQL berarti
merujuk ke perangkat
lunak/software database
MySQL, sedangkan
mysql (dengan huruf
kecil) berarti merujuk
ke sebuah nama
database.
102P E M A H A M AN T E N T A N G MYSQL5
Ada 6 tabel yang dapat dijelaskan kegunaannya sebagai berikut:
Nama Tabel Kegunaan
columns_priv Data hak akses user (user privileges) pada kolom-kolom tertentu di dalam suatu tabel.
db Nama database yang bisa diakses oleh user tertentu.
func
host Nama-nama host yang diijinkan mengakses MYSQL
tables_priv Data hak akses user (user privileges) pada tabel-tabel tertentu di dalam suatu database.
user Nama-nama pengguna (user) yang diijinkan untuk mengakses MYSQL.
Yang akan kita lihat dahulu adalah isi tabel user. Tuliskan perintah dibawah ini pada MySQL prompt:
mysql>DESCRIBE user;
atau:
mysql> SHOW COLUMNS FROM user ;
Perintah tersebut untuk menampilkan kolom-kolom (field) apa saja yang ada di dalam sebuah tabel. Hasilnya adalah sebagai berikut:
+————————————+———————————+———+————+—————+————+
| Field | Type | Null | Key | Default | Extra | +————————————+———————————+———+————+—————+————+
| Host |char(60) binary | | Pri | | |
| User | char(16) binary | | Pri | | |
| Password | char(16) binary | | | | |
| Select_priv | enum(‘N’,’Y’) | | | N | |
| Insert_priv | enum(‘N’,’Y’) | | | N | |
| Update_priv | enum(‘N’,’Y’) | | | N | |
| Delete_priv | enum(‘N’,’Y’) | | | N | |
| Create_priv | enum(‘N’,’Y’) | | | N | |
| Drop_priv | enum(‘N’,’Y’) | | | N | |
| Reload_priv | enum(‘N’,’Y’) | | | N | |
| Shutdown_priv | enum(‘N’,’Y’) | | | N | |
| Process_priv | enum(‘N’,’Y’) | | | N | |
| File_priv | enum(‘N’,’Y’) | | | N | |
| Grant_priv | enum(‘N’,’Y’) | | | N | |
| References_priv | enum(‘N’,’Y’) | | | N | |
| Index_priv | enum(‘N’,’Y’) | | | N | |
| Alter_priv | enum(‘N’,’Y’) | | | N | |
+———————————+————————————+———+————+—————+————+ 17 rows in set (0.00 sec)
5E - C O M M E R C E P E M O G R A M A N W E B 103
Kita lihat sepintas bahwa tabel user ini mencakup nama user,nama host dari mana si user mengakses mysql, password dari user yang bersangkutan, dan sisanya adalah jenis-jenis hak akses (user privileges) yang dimiliki user tersebut. Mengenai jenis akses akan kita bahas nanti pada bab tersendiri yach...
karena ceritanya memang agak panjang dan teoritis...
Sedangkan mulai MySQL versi 4.0.xx (atau yang lebih baru), ada beberapa perubahan yang terjadi pada tabel user. Mari kita lihat apa saja perbedaannya dibanding dengan MySQL versi yang lebih lama:
mysql> desc user ;
+ --- + --- + --- + --- + --- + --- +
| Field | Type | Null | Key | Default | Extra |
+ --- + --- + --- + --- + --- + --- +
| Host | varchar(60)binary | | PRI | | |
| User | varchar(16)binary | | PRI | | |
| password | varchar(16) | | | N | |
| Select_priv | enum(‘N’,’Y’) | | | N | |
| Insert_priv | enum(‘N’,’Y’) | | | N | |
| Update_priv | enum(‘N’,’Y’) | | | N | |
| Delete_priv | enum(‘N’,’Y’) | | | N | |
| Create_priv | enum(‘N’,’Y’) | | | N | |
| Drop_priv | enum(‘N’,’Y’) | | | N | |
| Reload_priv | enum(‘N’,’Y’) | | | N | |
| Shutdown_priv | enum(‘N’,’Y’) | | | N | |
| Process_priv | enum(‘N’,’Y’) | | | N | |
| File_priv | enum(‘N’,’Y’) | | | N | |
| Grant_priv | enum(‘N’,’Y’) | | | N | |
| References_priv | enum(‘N’,’Y’) | | | N | |
| Index_priv | enum(‘N’,’Y’) | | | N | |
| Alter_priv | enum(‘N’,’Y’) | | | N | |
| Show_db_priv | enum(‘N’,’Y’) | | | N | |
| Super_priv | enum(‘N’,’Y’) | | | N | |
| Create_tmp_table_priv | enum(‘N’,’Y’) | | | N | |
| Lock_tables_priv | enum(‘N’,’Y’) | | | N | |
| Execute_priv | enum(‘N’,’Y’) | | | N | |
| Repl_slave_priv | enum(‘N’,’Y’) | | | N | |
| ssl_type | enum | | | | |
| |(‘’,’ANY’,’X509', | | | | |
| |’SPECIFIED’) | | | | |
| ssl_cipher | blob | | | | |
| x509_issuer | blob | | | | |
| x509_subject | blob | | | | |
| max_questions | int(11) | | | 0 | |
| max_updates | int(11) unsigned | | | 0 | |
| max_connections | int(11) unsigned | | | 0 | |
+ --- + --- + --- + --- + --- + --- + 31 rows in set (0.29 sec)
Terlihat ada penambahan 14 baris privileges baru, seperti super_priv, max_connections, dan sebagainya. Tetapi untuk sementara ini kita tidak akan membahasnya dulu secara detail.
104P E M A H A M AN T E N T A N G MYSQL5
Sekarang kita kembali ke bahasan sebelumnya yach... Untuk saat ini kita perlukan hanya 3 kolom pertama saja, yaitu kolom (field) host, user dan pass- word:
mysql> SELECT user, host, password FROM user ; +---+---+---+
| user | host | password | +---+---+---+
| root | localhost | |
| root | % | |
| | localhost | |
| | % | | +---+---+---+
4 rows in set (0.00 sec)
Nah, dari sini baru ketahuan kenapa bisa terjadi siapa saja yang nyelonong ke dalam MySQL kita. Perhatikan deh, untuk user root (ada 2 baris) sama sekali tidak memiliki password apapun. Dan kemudian, ada user yang ‘kosong’ (ada 2 baris, tidak bernama, tidak berwujud) dan anehnya lagi tidak ber-password. Kesemuanya ini SANGAT SANGAT BERBAHAYA!
Untuk itu harus diambil tindakan tegas! (hehehe... seperti aparat keamanan aja yach gaya bicaranya...:))
Tindakan keamanan pertama: Hapus user yang tidak berwujud itu:
mysql> DELETE FROM user WHERE user=’ ‘ ; Query OK, 2 rows affected (0.00 sec)
Keliatannya sudah OK nih. Tapi coba kita periksa lagi:
mysql> SELECT user, host, password FROM user ; +———+—————+———————+
| user | host | password | +———+—————+———————+
| root | localhost | |
| root | % | | +———+—————+———————+
2 rows in set (0.00 sec)
Ternyata emang OK tuch. User yang tidak berwujud itu telah lenyap.
Tugas selanjutnya, atau TINDAKAN PENGAMANAN KEDUA adalah MEMBERIKAN PASSWORD KEPADA ROOT.