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_database bisa 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 kepada ilkom_admin untuk dapat
melihat (melakukan query SELECT) pada tabel mahasiswa_ilkom yang
berada pada database universitas, maka berikut query yang kita gunakan:
|
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 kata SELECT. SELECT
disini adalah hak akses yang ingin di berikan kepada user, saya memberikan hak SELECT
karena user admin saat ini hanya dapat melakukan perintah SELECT.
Setelah SELECT, diikuti
dengan penulisan tabel yang diperbolehkan, yakni universitas.mahasiswa_ilkom
(dibaca:tabel mahasiswa_ilkom pada database universitas). Bagian
terakhir adalah user yang akan diberikan hak aksesnya, yakni ilkom_admin
pada localhost.
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.
Setelah
menampilkan isi tabel mahasiswa_ilkom, user ilkom_admin
mencoba menghapus tabel mahasiswa_ilkom. Tetapi karena kita membatasi
hak aksesnya, ilkom_admin tidak dapat menjalankan query DELETE
dan DROP, dan akan langsung ditolak oleh MySQL.
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:
|
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 database universitas:
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, user mahasiswa juga akan bisa
melihatnya.
Cara Memberikan Seluruh Hak Akses (query GRANT ALL)
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 user ekonomi_admin, dengan query GRANT ALL.
Berikut querynya:
|
mysql> CREATE USER
'ekonomi_admin'@'localhost' IDENTIFIED BY
'r4hasia';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL
ON universitas.mahasiswa_ekonomi
TO 'ekonomi_admin'@'localhost';
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.
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:
|
mysql> CREATE USER
'tamu_ilkom'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT SELECT
(nama,umur) ON universitas.mahasiswa_ilkom
TO 'tamu_ilkom'@'localhost';
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:
|
D:\MySQL\bin>mysql -u
tamu_ilkom
Welcome to the
MySQL monitor. Commands end
with ; or \g.
Your MySQL connection id is
4
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> USE universitas;
Database changed
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_universitas |
+-----------------------+
|
mahasiswa_ilkom |
+-----------------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM
mahasiswa_ilkom;
ERROR 1143 (42000): SELECT command denied to
user 'tamu'@'localhost'
for column 'nim'
in table 'mahasiswa_ilkom'
mysql> SELECT nama,umur FROM
mahasiswa_ilkom;
+-----------------+------+
|
nama | umur
|
+-----------------+------+
| Andi
Suryo | 23 |
| Santi Syanum
| 21 |
| Neil Situmorang | 22
|
+-----------------+------+
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.
Dari
tutorial Cara Membuat Hak Akses (Privileges) User MySQL dengan query
GRANT ini, kita telah mempelajari cara memberikan hak akses untuk
user. Hak akses itu sendiri sebenarnya dapat dibatasi pada 4 tingkatan level,
yakni level global, level database, level tabel, dan level
kolom. Pada tutorial diatas, kita telah mencoba level database, tabel
dan kolom, namun untuk lebih dalam, kita akan membahasnya pada tutorial
MySQL selanjutnya: Membahas Jenis-jenis Hak Akses dalam MySQL.