Tabel-tabel User, db, host, tables_priv dan columns_priv digunakan untuk mengatur user dan ijin akses masingmasing user (user privileges). Oleh karena itu, kelima tabel tersebut disebut grant tables, fungsi-fungsi tabel-tabel
tersebut adalah :
Nama Tabel
Fungsi
Tingkatan Akses
User
Db
Host
Tables_priv
Columns_priv
Global
Database
Database
Tabel
Kolom (field)
perubahan terakhir yang terjadi, serta memerintahkan sistem MySQL untuk memperhatikan
perubahan-perubahan tersebut.
SHUTDOWN digunakan untuk mematikan server MySQL. Digunakan dengan MYSQLADMIN
SHUTDOWN.
CREATE TEMPORARY TABLE digunakan untuk membuat tabel temporer
EXECUTE digunakan untuk menajlankan perintah
LOCK TABLES digunakan untuk mengunci tabel
REPLICATION CLIENT digunakan untuk proses replikasi database pada klien
REPLICATION SLAVE digunakan untuk proses replikasi database sebagai database sekunder (slave)
SHOW DATABASES digunakan untuk menampilkan selutuh database yang ada di server MySQL
SUPER
3. Tingkatan akses khusus (Special Privileges) dapat diterapkan pada setiap user dengan ijin akses sebagai
berikut :
ALL digunakan untuk memberikan semua ijin akses sehingga user tersebut memiliki hak akses seperti
layaknya seorang root.
USAGE digunakan untuk sekedar membuat user saja tapi tidak memberikan ijin akses apapun kepada
user tersebut (user bisa masuk ke dalam MySQL server dengan password yang ditentukan, tetapi
tidak bisa melakukan hal lainnya
Database mysql merupakan database yang sangat penting dan vital didalam sistem MySQL, karena fungsinya
mengatur ijin akses semua user yang terdaftar. Maka database mysql ini tidak boleh diakses oleh siapapun juga,
kecuali System Administrator (root) yang bersangkutan. Bila anda seorang root jangan pernah memberikan orang
lain untuk mengakses database mysql.
Pada MySQL versi 5.0.45 terdapat tabel user pada database mysql sebagai berikut :
mysql> desc user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host
| char(60)
| NO
| PRI |
|
|
| User
| char(16)
| NO
| PRI |
|
|
| Password
| char(41)
| NO
|
|
|
|
| Select_priv
| enum('N','Y')
| NO
|
| N
|
|
| Insert_priv
| enum('N','Y')
| NO
|
| N
|
|
| Update_priv
| enum('N','Y')
| NO
|
| N
|
|
| Delete_priv
| enum('N','Y')
| NO
|
| N
|
|
| Create_priv
| enum('N','Y')
| NO
|
| N
|
|
| Drop_priv
| enum('N','Y')
| NO
|
| N
|
|
| Reload_priv
| enum('N','Y')
| NO
|
| N
|
|
| Shutdown_priv
| enum('N','Y')
| NO
|
| N
|
|
| Process_priv
| enum('N','Y')
| NO
|
| N
|
|
| File_priv
| enum('N','Y')
| NO
|
| N
|
|
| Grant_priv
| enum('N','Y')
| NO
|
| N
|
|
| References_priv
| enum('N','Y')
| NO
|
| N
|
|
| Index_priv
| enum('N','Y')
| NO
|
| N
|
|
| Alter_priv
| enum('N','Y')
| NO
|
| N
|
|
| Show_db_priv
| enum('N','Y')
| NO
|
| N
|
|
| Super_priv
| enum('N','Y')
| NO
|
| N
|
|
| Create_tmp_table_priv | enum('N','Y')
| NO
|
| N
|
|
| Lock_tables_priv
| enum('N','Y')
| NO
|
| N
|
|
| Execute_priv
| enum('N','Y')
| NO
|
| N
|
|
| Repl_slave_priv
| enum('N','Y')
| NO
|
| N
|
|
| Repl_client_priv
| enum('N','Y')
| NO
|
| N
|
|
| Create_view_priv
| enum('N','Y')
| NO
|
| N
|
|
| Show_view_priv
| enum('N','Y')
| NO
|
| N
|
|
| Create_routine_priv
| enum('N','Y')
| NO
|
| N
|
|
| Alter_routine_priv
| enum('N','Y')
| NO
|
| N
|
|
| Create_user_priv
| enum('N','Y')
| NO
|
| N
|
|
| ssl_type
| enum('','ANY','X509','SPECIFIED') | NO
|
|
|
|
| ssl_cipher
| blob
| NO
|
|
|
|
| x509_issuer
| blob
| NO
|
|
|
|
| x509_subject
| blob
| NO
|
|
|
|
| max_questions
| int(11) unsigned
| NO
|
| 0
|
|
| max_updates
| int(11) unsigned
| NO
|
| 0
|
|
| max_connections
| int(11) unsigned
| NO
|
| 0
|
|
| max_user_connections | int(11) unsigned
| NO
|
| 0
|
|
+-----------------------+-----------------------------------+------+-----+---------+-------+
37 rows in set (0.02 sec)
Host, digunakan untuk menentukan alamat tempat komputer pengakses database. Anda dapat
memasukkan host bernilai localhost apabila ingin menggunakan database pada server lokal (pada mesin
yang sama dengan aplikasi yang mengakses).
User, digunakan untuk merekam User ID. Kolom ini sebaiknya dibentuk dengan sistem unik, karena akan
digunakan untuk merekam account pada saat login MySQL.
Password, digunakan untuk menyimpan data kunci dari user yang ada. Setiap user memiliki satu buah
password. Dalam kolom ini setiap password yang masuk akan dienkripsi dengan sistem password.
Select_priv, digunakan untuk memberikan hak akses pada user. Arti select_priv adalah ijin user untuk
melakukan perintah select (menampilkan data). Apabila anda memasukkan YES, berarti user tersebut
dapat melakukan seleksi data, dan apabila NO maka user tersebut tidak dapat melakukan seleksi data.
Insert_priv, merupakan hak akses yang diberikan pada user untuk memasukkan data ke dalam tabel.
Apabila anda memasukkan YES, berarti user tersebut dapat memasukkan data, dan apabila NO maka user
tersebut tidak dapat memasukkan data.
Update_priv, adalah hak akses yang dapat diberikan kepada user untuk melakukan perubahan/
peremajaan data miliknya. Apabila anda memasukkan YES, berarti user tersebut dapat melakukan
perubahan data, dan apabila NO maka user tersebut tidak dapat melakukan perubahan data.
Delete_priv, adalah hak akses yang diberikan untuk melakukan penghapusan data. Apabila anda
memasukkan YES, berarti user tersebut dapat melakukan penghapusan data, dan apabila NO maka user
tersebut tidak dapat melakukan penghapusan data.
Create_priv, adalah hak akses yang diberikan untuk membuat database dan tabel baru. Apabila anda
memasukkan YES, berarti user tersebut dapat membuat database dan tabel baru, dan apabila NO maka
user tersebut tidak dapat membuat database dan tabel baru.
Drop_priv, digunakan untuk memberikan hak akses kepada user untuk menghapus database maupun
tabel. Apabila anda memasukkan YES, berarti user tersebut dapat menghapus database dan tabel, dan
apabila NO maka user tersebut tidak dapat menghapus database dan tabel
Reload_priv, adalah hak akses untuk melakukan refresh server. Kolom ini biasanya hanya digunakan oleh
para administrator pada database MySQL.
Shutdown_priv, biasanya hanya digunakan oleh para DBA dalam menangani database server, jika bernilai
YES, user dapat mematikan server MySQL dari komputer manapun.
Grant_priv, digunakan untuk mengatur setiap user dalam mengakses database, yaitu database apa yang
boleh dan tidak untuk diakses.
Index_priv, digunakan untuk melakukan pengaturan boleh tidaknya user membentuk sebuah kolom
index.
Alter_priv, alter merupakan salah satu perintah DML. Fungsinya untuk melakukan perubahan struktur
tabel yang telah dibuat. Apabila bernilai YES maka user dapat melakukan perubahan jika NO user tidak
dapat melakukan perubahan pada setiap tabel yang sudah dibuat
User dan password yang kosong akan mengakibatkan siapapun dapat masuk begitu saja kedalam server database
mysql tanpa harus memasukkan identitas diri dan password. Pada kolom host diisi dengan tanda %, berarti user
yang bersangkutan dapat mengakses MySQL dari mesin (komputer) manapun juga.
Sebagai tindakan pengamanan awal, kita harus menghapus semua user tanpa identitas tersebut dengan perintah
DELETE yaitu DELETE FROM user WHERE user=; dan user tanpa password yaitu
mysql> DELETE FROM user WHERE user = 'darwin';
Query OK, 1 row affected (0.00 sec)
Changed: 1
Warnings: 0
Gantilah xxxxxx dengan password pilihan anda sendiri. Sebaiknya password hanya anda sendiri yang tahu dan
mudah anda ingat tapi tidak mudah ditebak oleh orang lain.
MySQL membaca grant tables hanya satu kali pada saat server pertama kali dijalankan. Bila kita menggunakan
perintah INSERT, UPDATE, DELETE pada kelima grant tables, maka harus diikuti perintah FLUSH. Perintah FLUSH
akan memerintahkan kepada sistem untuk membaca ulang kelima grant tables tanpa harus me-restart server
MySQL.
Manajemen User
Perintah GRANT digunakan untuk membuat user baru beserta ijin aksesnya. Sedangkan perintah REVOKE
digunakan untuk menghapus ijin akses user. Tetapi perintah REVOKE tidak berarti menghapus seorang user secara
permanen, dia tetap vbisa masuk (login) kedalam MySQL walaupun tidak berbuat apa-apa. Untuk menghapus
user secara permanen, digunakan perintah DELETE.
Bentuk umum dari perintah GRANT dan REVOKE adalah sebagai berikut :
Bentuk umum perintah GRANT
GRANT jenis_akses(nama_kolom) ON nama_database
TO nama_user IDENTIFIED BY nama_password
[WITH GRANT pilihan_akses]
Bentuk umum perintah REVOKE
REVOKE jenis_akses ON nama_database FROM user
Perintah pertama dilakukan untuk membuat user baru dengan nama siapa dengan tingkatan akses sebagai
administrator, karena diberikan privileges ALL yang berarti dapat mengakses semua database yang ada didalam
server (ON *.*) selama lokasi pengakses tersebut dilakukan pada mesin lokal (siapa@localhost). Lokasi pengakses
biasa bisa disesuaikan dengan menggunakan alamat IP dan nama domain. Perintah WITH GRANT OPTION
memberikan wewenang kepada siapa untuk memberikan ijin akses (GRANT) kepada user-user lainnya.
Pada contoh perintah kedua, akses dapat dilakukan dari mesin mana saja diseluruh dunia selama user tersebut
dapat melakukan koneksi ke server MySQL (TO siapa@%) bisa juga ditulis tanpa tanda %, menjadi hanya TO
siapa.
mysql> GRANT USAGE ON *.* TO nana@localhost
-> IDENTIFIED BY '1234';
Query OK, 0 rows affected (0.00 sec)
Walaupun diberikan perintan ON *.*, tetapi user nana ini tingkatannya adalah user biasa dengan tidak memiliki
izin akses apapun. Karena perintah yang digunakan adalah GRANT USAGE. Tetapi nana tetapi bisa masuk (login)
kedalam MySQL. User seperti ini disebut Dummy User (atau Blank User).
Untuk mengetahui ijin akses seorang user dapat dilihat pada tabel user kolom privileges. Bila kita melakukan
perintah SELECT * FROM USER, maka perhatikan pada kolom-kolom privileges isiannya harus tetap N pada user
selain root. Agar terlihat oleh layar, perintahnya akan dibagi-bagi :
Apabila user nana kolom privilegesnya diubah dari N menjadi Y, maka nana dapat mengakses semua database
yang ada didalam server MySQL.
-> ON nanadb.*
-> TO nana@localhost;
Query OK, 0 rows affected (0.09 sec)
Perintah diatas akan memberikan ijin akses (user privilileges) SELECT, INSERT, UPDATE dan DELETE kepada nana,
yang hanya bisa diakses dari mesin lokal (TO nana@localhost) dan hanya bisa menggunakan database nanadb
beserta seluruh tabelnya (ON nanadb.*). Dengan adanya perintah tersebut akan berpengaruh pada tabel user, db,
host, columns_priv, dan table_priv.
mysql> SELECT user, select_priv, insert_priv, update_priv,
-> delete_priv, create_priv, drop_priv
-> FROM db WHERE user = 'nana';
+------+-------------+-------------+-------------+-------------+-------------+-----------+
| user | select_priv | insert_priv | update_priv | delete_priv | create_priv | drop_priv |
+------+-------------+-------------+-------------+-------------+-------------+-----------+
| nana | Y
| Y
| Y
| Y
| N
| N
|
+------+-------------+-------------+-------------+-------------+-------------+-----------+
1 row in set (0.06 sec)
Misalnya kita mempunyai user baru yang bernama saya yang akan kita beri ijin akses SELECT dan INSERT saja, dan
hanya berlaku pada kolom judul_kaset dan nama_artis didalam tabel kaset pada database nanadb. Maka bentuk
perintahnya adalah :
mysql> GRANT
-> SELECT (judul_kaset, nama_artis),
-> INSERT (judul_kaset, nama_artis)
-> ON nanadb.kaset
-> TO saya@localhost
-> IDENTIFIED BY 'xxxxxx';
Query OK, 0 rows affected (0.00 sec)
Tampilkanlah tabel table_priv. Untuk dapat melihat secara keseluruhan kita bagi tampilan menjadi beberapa
kolom
mysql> use mysql;
Database changed
mysql> SELECT host, db, user, table_name, grantor
-> FROM tables_priv WHERE user = 'saya';
+-----------+--------+------+------------+----------------+
| host
| db
| user | table_name | grantor
|
+-----------+--------+------+------------+----------------+
| localhost | nanadb | saya | kaset
| root@localhost |
+-----------+--------+------+------------+----------------+
1 row in set (0.00 sec)
Ketentuan-ketentuan nama kolom yang bisa diakses oleh saya pada tabel kaset dapat dilihat pada tabel
columns_priv :
mysql> SELECT * FROM columns_priv WHERE user = 'saya';
+-----------+--------+------+------------+-------------+---------------------+---------------+
| Host
| Db
| User | Table_name | Column_name | Timestamp
| Column_priv
|
+-----------+--------+------+------------+-------------+---------------------+---------------+
| localhost | nanadb | saya | kaset
| judul_kaset | 2012-05-16 07:04:59 | Select,Insert |
| localhost | nanadb | saya | kaset
| nama_artis | 2012-05-16 07:04:59 | Select,Insert |
+-----------+--------+------+------------+-------------+---------------------+---------------+
2 rows in set (0.00 sec)
Perintan TO sebenarnya terdiri dari dua bagian, yaitu nama user dan alamat / lokasi pengakses. Pada perintah TO
kita memberikan ijin akses kepada user nana dengan alamat mesin localhost. Alamat ini bisa kita isi dengan
alamat IP dan nama domain.
Untuk menghapus ijin akses CREATE dan DROP dari user nana
mysql> REVOKE CREATE, DROP
-> ON nanadb.*
-> FROM nana@localhost;
Query OK, 0 rows affected (0.00 sec)
Perintah diatas akan menghapus semua ijin akses yang dimiliki oleh user nana. Untuk menghapus secara
permanen kita gunakan perintah
mysql> DELETE FROM user WHERE user = 'nana';
Query OK, 1 row affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)