Anda di halaman 1dari 29

Praktikum Pemrograman Client Server

STMIK Palangka Raya

QUERY PEMBUATAN USER DAN HAK AKSES MYSQL


1 MENGENAL SUPER USER ROOT DAN PENGERTIAN PRIVILEGES MYSQL
Data Control Language (DCL), yakni query yang digunakan untuk mengontrol dan membatasi
hak akses ke database. Kita akan membahas tentang bagaimana cara membuat user MySQL,
membatasi dan mengadministrasikan serta hak akses user dalam database MySQL.
Dalam tutorial belajar MySQL ini kita akan Membahas Superuser root dan pengertian privileges
MySQL.

a. Mengenal Hak Akses Superuser: root


Jika anda mengikuti tutorial belajar MySQL dari awal, selama ini kita hanya
menggunakan 1 user dalam belajar MySQL, yaitu user root. User root ini otomatis dibuat
pada saat instalasi MySQL Server pertama kali.
User root dalam

istilah

keamanan

komputer

sering

disebut

sebagai superuser. Superusermerupakan tingkatan user tertinggi dimana user ini dapat
melihat, mengubah, bahkan menghapus seluruh database dan menjalankan perintah apapun
yang terdapat dalam MySQL.
Dalam tahap pembelajaran, kita diuntungkan dan dimudahkan dengan
menggunakan user rootdalam membuat database MySQL. Hal ini dikarenakan
user root dapat menjalankan segala perintah dalam MySQL.
Namun pada aplikasi real dunia nyata, menggunakan user root untuk mengkases
database dalam operasional sehari-hari sangat tidak disarankan. Memberikan kemampuan
dan hak akses untuk menghapus seluruh database akan berdampak fatal pada operasional
aplikasi.
Kita

dapat

membuat

user

baru

yang

hanya

bisa

menjalankan

perintah SELECT saja, dan user tersebut dibatasi untuk tidak dapat menjalankan
query DROP.
Sebagai contoh, dalam database mahasiswa yang kita gunakan sepanjang berlajar
MySQL di praktikum ini, kita mungkin butuh untuk membuat user untuk setiap jurusan,

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

dan membatasi user tersebut hanya dapat mengakses tabel yang sesuai dengan jurusannya
masing-masing.
Untuk kerperluan multi user inilah MySQL menyediakan banyak perintah yang
dapat digunakan untuk membuat, dan membatasi hak akses user dalam mengakses
database.

b. Pengertian Hak akses (Privileges) dalam MySQL


User dalam MySQL dapat dibuat dengan berbagai kombinasi hak akses yang dapat
dibatasi. Apakah user tersebut dapat membuat, mengubah dan menghapus sebuah tabel,
atau user tersebut kita batasi hanya untuk melihat tabel saja (perintah SELECT).
Lebih jauh lagi, MySQL memiliki kemampuan untuk membatasi hak akses dari
komputer mana MySQL Client dijalankan. Misalkan tabel jurusan_fisika, hanya dapat
diakses dari komputer yang alamat IP-nya berasal dari jurusan fisika saja, sehingga
membatasi hak akses mahasiswa fisika untuk melihat tabel jurusan pariwisata.
Selain lokasi IP address, hak akses user dalam MySQL dapat dibatasi juga pada
level tabel dan kolom tertentu saja. Misalkan dalam tabel mahasiswa terdapat kolom IPK
yang harus dirahasiakan, maka kita bisa membatasi hak akses untuk kolom IPK dan
membuka akses untuk kolom lainnya.
Dalam bahasa inggrisnya, hak akses ini dikenal dengan istilah privileges. Kita
akan membahas cara membuat user dan membatasi hak aksesnya selanjutnya.

c. Mengenal Database mysql


Seluruh user dan hak aksesnya (privileges), disimpan oleh mysql pada sebuah database
khusus, yakni database mysql. Tabel khusus ini langsung dibuat secara otomatis pada saat instalasi
MySQL. Anda bisa melihat isi database ini dengan menjalankan perintah query dibawah ini:
Enter password: ******
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.

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

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 |
| mahasiswa
|
| mysql
|
| performance_schema |
| test
|
+--------------------+
5 rows in set (0.00 sec)
mysql> USE mysql;
Database changed
mysql> SHOW TABLES;
+---------------------------+
| Tables_in_mysql
|
+---------------------------+
| columns_priv
|
| db
|
| event
|
| func
|
| general_log
|
| help_category
|
| help_keyword
|
| help_relation
|
| help_topic
|
| host
|
| ndb_binlog_index
|
| plugin
|
| proc
|
| procs_priv
|
| proxies_priv
|
| servers
|
| slow_log
|
| tables_priv
|
| time_zone
|
| time_zone_leap_second
|
| time_zone_name
|
| time_zone_transition
|
| time_zone_transition_type |

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

| user
|
+---------------------------+
24 rows in set (0.00 sec)

Dalam membuat user beserta hak aksesnya, MySQL menyediakan 2 cara:


1. Menggunakan perintah khusus (query GRANT ) dalam pembuatan user.
2. Mengubah langsung data record yang terdapat dalam database mysql .
Menggunakan perintah khusus dalam membuat uses akan lebih mudah digunakan
dan lebih aman, karena jika mengubah tabel mysql langsung, kita memiliki resiko salah
perintah yang dapat menyebabkan terhapusnya data dalam database mysql. Namun
mengubah database mysql menawarkan fleksibilitas yang lebih dalam membuat hak akses.

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

2 CARA MEMBUAT DAN MENGHAPUS USER MYSQL (CREATE USER)


Setelah memahami pengertian Superuser root dan Privileges dalam MySQL, serta pentingnya
membatasi hak akses user, kali ini kita akan mempelajari cara membuat user MySQL,
membatasinya dengan password, membatasi hak akses dari alamat IP, serta menghapus user dalam
MySQL.
Pembuatan user baru dalam MySQL, hanya dapat dilakukan menggunakan user root, atau
user yang diberikan hak akses GRANT OPTION (pembahasan tentang GRANT OPTION akan
kita bahas dalam materi lainnya).

2.1.1 Menyiapkan Database Sample: stmik


D:\MySQL\bin>mysql -u root p
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> CREATE DATABASE stmik;
Query OK, 1 row affected (0.00 sec)
mysql> USE stmik;
Database changed

Database ini akan memiliki 2 buah tabel, yakni tabel mahasiswa_ti, dan table
mahasiswa_si. Masing-masing tabel berisi tentang data mahasiswa. Dalam query berikut, kita
membuat kedua tabel tersebut dan menyiapkan data sampel sebagai contoh:

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

mysql> CREATE TABLE mahasiswa_ti ( nim CHAR(9), nama CHAR(50), umur INT,
tempat_lahir CHAR(50), IPK DECIMAL (3,2) );
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO mahasiswa_ti VALUES ('089045001', 'Andi Suryo', 23,
'Jakarta', 2.7);
Query OK, 1 row affected (0.05 sec)
mysql> INSERT INTO mahasiswa_ti VALUES ('109245021', 'Santi Syanum',
21, 'Malang', 3.2);
Query OK, 1 row affected (0.04 sec)
mysql> INSERT INTO mahasiswa_ti VALUES ('099145055', 'Neil Situmorang',
22, 'Medan', 1.9);
Query OK, 1 row affected (0.12 sec)
mysql> CREATE TABLE mahasiswa_si ( nim CHAR(9), nama CHAR(50),
umur INT, tempat_lahir CHAR(50), IPK DECIMAL (3,2) );
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO mahasiswa_si VALUES ('089023013',
'Alex Supriyanto', 23, 'Surabaya', 2.9);
Query OK, 1 row affected (0.04 sec)
mysql> INSERT INTO mahasiswa_si VALUES ('109223041', 'Rani Sabrina',
21, 'Padang',3.7);
Query OK, 1 row affected (0.04 sec)
mysql> INSERT INTO mahasiswa_si VALUES ('099123043', 'Ocha Septriani',
22,'Makasar', 3.1);
Query OK, 1 row affected (0.05 sec)
mysql> SELECT * FROM mahasiswa_ti;
+-----------+-----------------+------+--------------+------+
| 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.00 sec)
mysql> SELECT * FROM mahasiswa_si;
+-----------+-----------------+------+--------------+------+
| nim
| nama
| umur | tempat_lahir | IPK |
+-----------+-----------------+------+--------------+------+
| 089023013 | Alex Supriyanto |
23 | Surabaya
| 2.90 |
| 109223041 | Rani Sabrina
|
21 | Padang
| 3.70 |

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

| 099123043 | Ocha Septriani |


22 | Makasar
| 3.10 |
+-----------+-----------------+------+--------------+------+
3 rows in set (0.00 sec)

2.1.2 Cara Membuat User Baru dalam MySQL


Untuk membuat user baru, MySQL menyediakan query CREATE USER, berikut format
dasar perintah:
CREATE USER 'nama_user';

nama_user adalah nama dari user yang akan dibuat, maksimal 16 karakter.

Untuk database stmik, kita akan membuat user ti_admin, berikut contoh querynya:
mysql> CREATE USER 'ti_admin';
Query OK, 0 rows affected (0.09 sec)

Dengan query CREATE USER tersebut, sebuah user baru telah dibuat di dalam MySQL Server.
Untuk mencoba menggunakan user tersebut, kita harus keluar dari user root yang digunakan saat
ini, dan login sebagai ti_admin.
mysql> exit;
Bye
D:\MySQL\bin>mysql -u ti_admin
Welcome to the MySQL monitor.
Your MySQL connection id is 4

Commands end with ; or \g.

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>

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

Pada contoh di atas, pertama-tama kita menggunakan perintah exit untuk keluar dari root. Setelah
itu kita log in menggunakan user yang baru saja dibuat, yakni ti_admin.
Jika anda memeriksa database untuk user ini, user ti_admin belum memiliki hak akses untuk
database apapun. Kita akan membahasnya pada materi selanjutnya.
1
mysql> SHOW DATABASES;
2
+--------------------+
3
| Database
|
4
+--------------------+
| information_schema |
5
+--------------------+
6
1 row in set (0.10 sec)
7
Terlihat bahwa hasil SHOW DATABASES dari user ti_admin hanya berisi database
information_schema.

Database information_schema sendiri

bukan merupakan database

asli. information_schema akan ada untuk setiap user MySQL dan hanya database
virtual yang digunakan untuk menyimpan metadata (data keterangan) tentang database. Kita
hanya bisa menggunakan query SELECT untuk database ini, tetapi tidak untuk query DELETE,
INSERT, maupun UPDATE.

2.1.3 Cara Membuat User dalam MySQL dengan Password


User ti_admin yang baru saja dibuat, dapat diakses oleh siapapun sepanjang ia mengetahui
username yang digunakan, yakni ti_admin.
Untuk menambah keamanan, kita seharusnya menambahkan password yang harus diinputkan oleh
user pada saat login. Format dasar querynya:
CREATE USER 'nama_user' IDENTIFIED BY 'password' ;

nama_user adalah nama dari user yang akan dibuat, maksimal 16 karakter.

password adalah password yang harus dituliskan pada saat nama_user mengakses MySQL
server.

Misalkan kita ingin membuat user ti_admin2 dengan password r4hasia, maka querynya:
mysql> CREATE USER ti_admin2 IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.01 sec)

Note : Jika anda masih menggunakan user ti_admin, keluarlah terlebih dahulu dan masuk kembali sebagai
root.
Dan jika anda ingin mengakses user tersebut, haruslah menggunakan password:

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

D:\MySQL\bin>mysql -u ti_admin2
ERROR 1045 (28000): Access denied for user 'ti_admin2'@'localhost'
(using password: NO)
D:\MySQL\bin>mysql -u ti_admin2 p r4hasia
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
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>

Terlihat dari contoh query pertama jika tanpa password, MySQL akan mengeluarkan pesan error.

2.1.4 Cara Membuat User MySQL dengan batasan IP address


Dalam membuat user, MySQL menyediakan pilihan untuk membatasi hak akses user
tersebut dari lokasi tempat user mengakses MySQL server.
Seperti yang telah kita bahas pada materi: Menjalankan MySQL Server, bahwa
pengaksesan MySQL Server dapat dilakukan dari komputer mana saja sepanjang kita memiliki
program MySQL Client dan terhubung melalui jaringan dengan MySQL Server. MySQL
menggunakan alamat IP address untuk mengetahui darimana MySQL Server diakses.
Misalkan sebuah kantor memiliki 6 komputer yang terhubung dalam jaringan. MySQL
Server berada pada komputer yang berada di alamat IP 192.168.0.1., sedangkan komputer lainnya
memiliki alamat IP 192.168.0.2 sampai dengan 192.168.0.6. Kebijakan perusahaan adalah untuk
mengakses tabel yang bersifat rahasia hanya bisa diakses dari komputer dengan IP 192.168.0.4.

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

Untuk keperluan ini MySQL menyediakan cara agar sebuah user hanya dapat diakses dari alamat
IP tertentu saja.
Format dasar query:
CREATE USER 'nama_user'@'lokasi_user' IDENTIFIED BY 'password';

nama_user adalah nama dari user yang akan dibuat, maksimal 16 karakter.

lokasi_user adalah lokasi tempat user yang diperbolehkan mengakses. Jika berada di
komputer yang sama dengan MySQL Server, lokasi_user ditulis sebagai localhost,
namun jika berada di komputer tertentu, kita bisa mengisinya dengan alamat IP seperti
192.168.0.2, atau alamat host domain seperti user.duniailkom

password adalah password yang harus dituliskan pada saat nama_user mengakses MySQL
server.

Sebagai contoh query, misalkan kita ingin membuat user ti_admin3 dengan password
r4hasia dan hanya bisa diakses dari IP 192.168.0.4, maka querynya:
mysql> CREATE USER 'ti_admin3'@'192.168.0.4' IDENTIFIED by 'r4hasia';
Query OK, 0 rows affected (0.01 sec)

Jika kita menggunakan user ti_admin3 dari komputer dengan IP address selain 192.168.0.4, MySQL
akan menghasilkan error.

D:\MySQL\bin>mysql -u ti_admin3 -pr4hasia


ERROR 1045 (28000): Access denied for user 'ilkom_admin3'@'localhost'
(using password: YES)

MySQL juga memiliki fitur untuk membuat alamat IP menggunakan wildcard % yang
maksudnya adalah semua alamat IP. Contohnya :
CREATE USER 'ilkom_admin4'@'192.168.0.%';

Perintah tersebut akan membuat user ti_admin4 dapat diakses dari seluruh alamat mulai
dari 192.168.0.1 sampai dengan 192.168.0.255, namun tidak untuk IP192.168.1.0.
Bahkan sebenarnya perintah:
CREATE USER 'ti_admin';

Adalah sama dengan

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

CREATE USER 'ilkom_admin'@%;

Yang berarti user ti_admin dapat diakses dari mana saja.


Alamat yang sering digunakan sebagai alamat IP adalah localhost, yang berarti alamat IP
komputer tempat dimana MySQL Server berada. Karena di dalam tahap belajar ini kita
menggunakan MySQL Client pada komputer yang sama dengan MySQL server, maka dalam
tutorial selanjutnya saya hanya akan memakai lokasi localhost, seperti:
CREATE USER 'ti_admin'@'localhost';

2.1.5 Cara menghapus User MySQL


Untuk menghapus user, MySQL menyediakan query DROP USER. Berikut format dasar
penggunaan:
DROP user nama_user

nama_user adalah nama dari user yang akan dihapus.

Sebagai contoh, jika anda mengikuti seluruh query dalam tutorial ini, maka akan tercipta 3 user,
yakni ti_admin, ti_admin2 dan ti_admin3. Kita akan menghapus ketiganya:
mysql> DROP USER ti_admin;
Query OK, 0 rows affected (0.00 sec)
mysql> DROP USER ti_admin2;
Query OK, 0 rows affected (0.00 sec)
mysql> DROP USER ti_admin3;
ERROR 1396 (HY000): Operation DROP USER failed for 'ti_admin3'@'%'

Untuk user ti_admin3, MySQL akan mengeluarkan pesan error. Hal ini dikarenakan pada saat kita
membuat user ti_admin3, kita membatasi user ini dengan hanya bisa diakses dari IP 192.168.0.4,
sehingga untuk menghapusnya harus mencantumkan alamat lengkap IP:
mysql> DROP USER 'ti_admin3'@'192.168.0.4';
Query OK, 0 rows affected (0.00 sec)

Sampai tahap ini kita sudah mempelajari cara membuat user MySQL, membatasinya dengan password dan
alamat IP, serta menghapus user MySQL. Namun user tersebut belum bisa melakukan apa-apa, karena kita
belum memberikan hak akses.

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

3 CARA MEMBUAT HAK AKSES (PRIVILEGES) USER MYSQL


(GRANT)
Jika pada Cara Membuat dan Menghapus User MySQL, kita telah belajar cara membuat
user, pada materi kali ini kita akan mempelajari cara untuk membuat dan memberikan hak akses
kepada user tersebut dengan query GRANT.
Hak akses dalam MySQL selain dibatasi dengan query apa saja yang dibolehkan, juga
dapat dibatasi pada level dimana query tersebut akan dijalankan, misalkan pada level database,
level tabel atau level kolom. Kita akan membahasnya secara lengkap pada tutorial kali ini.
Dalam perancangan aplikasi yang membutuhkan database, setiap user yang akan
mengakses database seharusnya memiliki batasan masing-masing sesuai dengan fungsinya.
Sebagai contoh, pada database stmik yang telah kita buat, terdapat 2 buah tabel,
yakni mahasiswa_ti dan mahasiswa_si.
Misalkan kita membuat user mahasiswa. User mahasiswa ini hanya diberikan hak akses
untuk melihat-lihat data tabel mahasiswa_ti dan mahasiswa_si, namun tidak bisa merubah
apapun di dalam tabel tersebut. Di dalam MySQL, user mahasiswa ini hanya kita berikan hak
akses SELECT.
Contoh lainnya, untuk keperluan administrasi, user ti_admin sebagai administrator akan
diberikan hak akses untuk dapat menginput data dan merubah data dari tabel mahasiswa_ti. Tetapi
, user ti_admin tidak bisa melihat dan merubah tabel mahasiswa_si, karena hak akses itu
seharusnya diberikan kepada si_admin.
Dari contoh ini kita dapat melihat perlunya membatasi hak akses untuk masing-masing
user: usermahasiswa, user ti_admin, dan user si_admin.

3.1.1 Cara Memberikan Hak Akses Kepada User dengan query GRANT
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

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

lainnya.

Jika

kita

ingin

STMIK Palangka Raya

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_databasebisa
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

ti_admin untuk

dapat

melihat

(melakukan

query SELECT)

pada

tabel mahasiswa_ti yang berada pada database stmik, maka berikut query yang kita gunakan:
mysql> CREATE USER 'ti_admin'@'localhost' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.52 sec)
mysql> GRANT SELECT ON stmik.mahasiswa_ti TO
'ti_admin'@'localhost';
Query OK, 0 rows affected (0.12 sec)

Query diatas terdiri dari 2 bagian, pada bagian pertama kita membuat user ti_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 materi sebelumnya,
Cara Membuat dan Menghapus User MySQL (CREATE USER).
Selanjutnya pada bagian kedua, kita memberikan hak akses dengan query GRANT pada
untuk user ti_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
stmik.mahasiswa_ti (dibaca:tabel mahasiswa_ti pada database stmik). Bagian terakhir adalah
user yang akan diberikan hak aksesnya, yakni ti_admin pada localhost.

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

Untuk mencoba user ti_admin, keluarlah dari root, dan masuk sebagai ti_admin:
D:\MySQL\bin>mysql -u ti_admin -pr4hasia
Welcome to the MySQL monitor.
Your MySQL connection id is 2

Commands end with ; or \g.

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 |
| stmik
|
+--------------------+
2 rows in set (0.00 sec)
mysql> USE stmik;
Database changed
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_stmik |
+-----------------------+
| mahasiswa_ti
|
+-----------------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM mahasiswa_ti;
+-----------+-----------------+------+--------------+------+
| 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)

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

mysql> DELETE FROM mahasiswa_ti WHERE nama="Andi Suryo";


ERROR 1142 (42000): DELETE command denied to user
'ilkom_admin'@'localhost' fortable 'mahasiswa_ti'
mysql> DROP TABLE mahasiswa_ti;
ERROR 1142 (42000): DROP command denied to user
'ilkom_admin'@'localhost' for table 'mahasiswa_ti'

Dari contoh query diatas, dapat dilihat bahwa pada saat ti_admin menjalankan perintah SHOW
TABLES, ia hanya dapat melihat satu tabel, yakni tabel mahasiswa_ti. Padahal dalam database tersebut
kita juga telah membuat tabel mahasiswa_si, namun karena hak akses yang diberikan, ti_admin hanya
dapat melihat tabel yang diperbolehkan.
Setelah menampilkan isi tabel mahasiswa_ti,

user ti_admin mencoba menghapus table

mahasiswa_ti. Tetapi karena kita membatasi hak aksesnya, ti_admin tidak dapat menjalankan
query DELETE dan DROP, dan akan langsung ditolak oleh MySQL.

3.1.2 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 stmik, berikut querynya:
mysql> CREATE USER 'mahasiswa'@'localhost' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT SELECT ON stmik.* TO 'mahasiswa'@'localhost';
Query OK, 0 rows affected (0.00 sec)

Pembuatan

user mahasiswa ini

hampir

sama

dengan

perintah

saat

membuat

user ti_admin. Kecuali kali ini untuk penulisan tabel kita menggunakan format stmik.* yang
berarti dapat mengakses seluruh tabel pada database stmik.
Selanjutnya, kita akan mencoba menggunakan user mahasiswa untuk melihat database stmik:
D:\MySQL\bin>mysql -u mahasiswa -pr4hasia
Welcome to the MySQL monitor.
Your MySQL connection id is 3

Commands end with ; or \g.

Server version: 5.5.27 MySQL Community Server (GPL)


Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights
reserved.

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

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 stmik;
Database changed
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_stmik
|
+-----------------------+
| mahasiswa_ti
|
| mahasiswa_si
|
+-----------------------+
2 rows in set (0.00 sec)

Dari hasil query diatas, terlihat bahwa user mahasiswa dapat melihat terdapat 2 tabel
dalam database stmik. Dan jika kita membuat sebuah tabel baru dalam database stmik, user
mahasiswa juga akan bisa melihatnya.

3.1.3 Cara Memberikan Seluruh Hak Akses (query GRANT ALL)


Dari kedua contoh user sebelumnya, yakni user ti_admin dan mahasiswa, kita hanya
menggunakan hak akses SELECT. Kali ini kita akan memberikan hak akses penuh kepada user
si_admin, dengan query GRANT ALL. Berikut querynya:
mysql> CREATE USER 'si_admin'@'localhost' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL ON stmik.mahasiswa_si TO 'si_admin'@'localhost';
Query OK, 0 rows affected (0.00 sec)

Dengan memberikan hak akses GRANT ALL, maka user si_admin dapat menggunakan seluruh
query dasar pada tabel mahasiswa_si, seperti SELECT, UPDATE, bahkan DELETE. Sebagai latihan,
silahkan mencoba masuk sebagai user si_admin dan lakukan perintah seperti UPDATE, DELETE,
dan DROP.

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

3.1.4 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_ti yang hanya dapat melihat nama dan umur mahasiswa pada
tabel mahasiswa_ti, dan merahasiakan kolom lainnya seperti alamat dan IPK, maka berikut
querynya:
mysql> CREATE USER 'tamu_ti'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT SELECT (nama,umur) ON stmik.mahasiswa_ti TO
'tamu_ti'@'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_ti.
Untuk mengujinya, masuklah sebagai user tamu_ti:
D:\MySQL\bin>mysql -u tamu_ti
Welcome to the MySQL monitor.
Your MySQL connection id is 4

Commands end with ; or \g.

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 stmik;
Database changed

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

mysql> SHOW TABLES;


+-----------------------+
| Tables_in_stmik
|
+-----------------------+
| mahasiswa_ti
|
+-----------------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM mahasiswa_ti;
ERROR 1143 (42000): SELECT command denied to user 'tamu'@'localhost'
for column 'nim' in table 'mahasiswa_ti'
mysql> SELECT nama,umur FROM mahasiswa_ti;
+-----------------+------+
| nama
| umur |
+-----------------+------+
| Andi Suryo
|
23 |
| Santi Syanum
|
21 |
| Neil Situmorang |
22 |
+-----------------+------+
3 rows in set (0.00 sec)

Pada saat user tamu_ti mencoba menampilkan seluruh kolom dengan query SELECT *
FROM mahasiswa_ti, MySQL akan mengeluarkan error karena user tamu_ti hanya memiliki
hak akses untuk kolom nama dan umur saja, dimana pada saat menggunakan perintah SELECT
nama,umur FROM mahasiswa_ti, MySQL menampilkannya dengan baik.
Dari materi 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 materi MySQL selanjutnya: Membahas Jenisjenis Hak Akses dalam MySQL.

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

4 ENIS-JENIS HAK AKSES (PRIVILEGES) DALAM MYSQL


Jika pada materi sebelumnya kita telah membahas cara membuat user dalam MySQL,
Dalam tutorial kali ini kita akan membahas jenis-jenis hak akses yang ada pada MySQL. Hak akses
ini nantinya digunakan untuk membatasi hak dari masing-masing user dalam mengunakan My
SQL

4.1.1 Jenis Hak Akses Berdasarkan Cakupan Akses Level


Seperti yang telah kita pelajari pada tutorial Cara Membuat Hak Akses (Privileges) User
MySQL, bahwa MySQL menyediakan berbagai tingkatan level hak akses. Setiap user dapat
dibatasi untuk dapat mengakses baik itu sebuah database tertentu saja, tabel tertentu, atau bahkan
hanya kolom tertentu.
Jika didasarkan pada pengelompokkan ini, kita dapat membagi hak akses MySQL menjadi 4
level tingkatan, yaitu:
4.1.1.1 Hak Akses Global (*.*)
Hak akses ini berarti user dapat memiliki hak akses untuk seluruh database yang terdapat
di dalam MySQL. Contoh penulisan query GRANT untuk level ini adalah:
GRANT SELECT ON *.* TO 'user'@'localhost';

Perhatikan cara penulisan nama_database.nama_tabel, dimana kita menulisnya dengan *.*,


sehingga user tersebut dapat mengakses seluruh tabel pada seluruh database.

4.1.1.2

Hak Akses Level Database (nama_database.*)


Hak akses ini berarti user memiliki hak akses penuh untuk sebuah database. Contoh

penulisan query GRANT untuk level database ini adalah:


GRANT SELECT ON stmik.* TO 'user'@'localhost';

Untuk penulisan nama_database.nama_tabel, kita membatasi nama database, namun


memberikan hak akses untuk seluruh tabel, penulisannya adalah nama_database.*
4.1.1.3 Hak Akses Level Tabel (nama_database.nama_tabel)
Hak akses ini berarti user memiliki hak akses untuk sebuah tabel yang berada pada sebuah
database. Contoh penulisan query GRANT untuk level ini adalah:
Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

GRANT SELECT ON stmik.mahasiswa_ti TO 'user'@'localhost';

Hak akses yang dimiliki user hanya terbatas pada level sebuah tabel saja.
4.1.1.4 Hak Akses Level Kolom (nama_kolom)
Hak akses ini adalah hak akses paling kecil yang dapat diberikan kepada sebuah user.
Dengan hak akses level kolom, user hanya memiliki hak akses untuk beberapa kolom pada sebuah
tabel. Contoh penulisan query GRANT untuk level kolom ini adalah:
GRANT SELECT (nama,umur) ON stmik.mahasiswa_ti TO 'user'@'localhost';

Level paling akhir ini kita membatasi hak akses user hanya untuk kolom tertentu saja. Penulisan
kolom yang diperbolehkan diletakkan di dalam tanda kurung.

4.1.2 Tipe-Tipe Hak Akses dalam MySQL


Untuk setiap level diatas, kita dapat menerapkan berbagai tipe hak akses yang ingin
diberikan, apakah itu hanya untuk melihat saja (query SELECT), menambahkan data
(query INSERT),

mengupdate

data

(query UPDATE),

bahkan

menghapus

data

(query DELETE).
Pada tabel dibawah ini saya melampirkan seluruh tipe hak akses yang dapat
diberikan/dibatasi untuk user. Tabel tersebut diambil langsung dari manual resmi MySQL.
Kebanyakan dari hak akses tersebut akan jarang digunakan dan belum kita pelajari, namun tabel
dibawah dapat dijadikan referensi terkait hak akses (privileges).

Hak Akses

Keterangan

ALL [PRIVILEGES]

Memberikan seluruh hak akses, kecuali GRANT OPTION

ALTER

Hak akses untuk merubah tabel (ALTER TABLE)

ALTER ROUTINE

Hak akses untuk merubah stored routines

CREATE

Hak akses untuk membuat tabel dan database

CREATE ROUTINE

Hak akses untuk membuat dan menghapus stored routine

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

Hak Akses

Keterangan

CREATE TABLESPACE

Hak akses untuk membuat, mengubah dan menghapus tablespaces dan


log file

CREATE

Hak akses untuk membuat tabel sementara CREATE TEMPORARY

TEMPORARYTABLES

TABLE

CREATE USER

Hak akses untuk membuat, menghapus, dan mengubah user (CREATE


USER, DROP USER, RENAME USER, dan REVOKE ALL
PRIVILEGES)

CREATE VIEW

Hak akses untuk membuat dan mengubah views

DELETE

Hak akses untuk menghapus data (DELETE)

DROP

Hak akses untuk menghapus database, tabel dan view

EVENT

Hak akses untuk membuat event

EXECUTE

Hak akses untuk menjalankan stored routines

FILE

Hak akses untuk membuat server membaca maupun membuat file

GRANT OPTION

Hak akses untuk memberikan hak akses kepada user lainnya.

INDEX

Hak akses untuk membuat dan menghapus index

INSERT

Hak akses untuk menambahkan data (query INSERT)

LOCK TABLES

Hak akses untuk mengunci tabel (LOCK TABLES)

PROCESS

Hak akses untuk melihat seluruh proses (SHOW PROCESSLIST)

PROXY

Hak akses untuk proses proxy

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

Hak Akses

Keterangan

REFERENCES

Belum diimplementasikan

RELOAD

Hak akses untuk operasi FLUSH

REPLICATION CLIENT

Hak akses untuk mengubah urutan master dan slave server

REPLICATION SLAVE

Hak akses untuk server replikasi untuk membaca log event biner dari
server master

SELECT

Hak akses untuk melihat data (query SELECT)

SHOW DATABASES

Hak akses untuk melihat seluruh database (SHOW DATABASES)

SHOW VIEW

Hak akses untuk melihat pembuatan view (SHOW CREATE VIEW)

SHUTDOWN

Hak akses untuk mysqladmin shutdown

SUPER

Hak akses untuk fungsi administrasi server, seperti CHANGE


MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, dan
perintah debug mysqladmin

TRIGGER

Hak akses untuk operasi trigger

UPDATE

Hak akses untuk memperbaharui data (UPDATE)

USAGE

Sama artinya dengan tanpa hak akses

4.1.3 Pengertian Hak Akses GRANT ALL


Pada materi Cara Membuat Hak Akses (Privileges) User MySQL dengan query GRANT, kita telah
melihat penulisan hak akses GRANT ALL. Namun sebenarnya apa saja hak akses yang bisa
dilakukan dengan GRANT ALL? Dan apa saja hak akses lainnya?
GRANT ALL adalah cara penyingkatan memberikan hampir semua hak akses kepada sebuah user
tertentu. Hak akses ini mencakup seluruh query dasar:

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

ALTER, CREATE, CREATE TEMPORARY TABLES, DELETE, DROP, EXECUTE,


FILE, INDEX, INSERT, LOCK TABLES, PROCESS, RELOAD, REPLICATION
CLIENT, REPLICATION SLAVE, SELECT, SHOW DATABASES, SHUTDOWN,
SUPER, dan UPDATE.
Sebagian besar hak akses diatas belum kita bahas, namun ini dapat menjadi referensi jika
anda memberikan hak akses dengan GRANT ALL kepada sebuah user.
Untuk lebih memahami cara pembuatan user dan hak aksesnya, saya akan memberikan beberapa
contoh, dan jika anda sudah mempelajari tutorial sebelumnya, contoh disini akan mudah dipahami.
1. Buatlah user dosen_ti yang dapat melihat, merubah dan menambahkan data ke table
mahasiswa_ti, namun tidak dapat menghapus data yang ada. User tersebut hanya dapat diakses
dari localhost.
Berikut adalah query yang dibutuhkan:
mysql> CREATE USER 'dosen_ti'@'localhost' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT SELECT,INSERT,UPDATE ON stmik.mahasiswa_ti
TO 'dosen_ti'@'localhost';
Query OK, 0 rows affected (0.07 sec)

2. Buatlah user sensus_ti yang dapat melihat seluruh tabel di dalam database mahasiswa_ti,
namun hanya pada kolom nim, nama, dan umur. User tersebut akan mengakses database dari
IP 192.168.0.4 .
Berikut adalah query yang dibutuhkan:
mysql> CREATE USER 'sensus_ti'@'192.168.0.4' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT SELECT(nim,nama,umur) ON stmik.mahasiswa_ti
TO 'sensus_ti'@'192.168.0.4';
Query OK, 0 rows affected (0.00 sec)

3. Buatlah user admin_kampus yang dapat mengedit, membuat, dan menghapus tabel dalam
database stmik, namun tidak bisa melakukan manipulasi data di dalam tabel tersebut. User ini
bisa diakses dari komputer manapun.
Berikut adalah query yang dibutuhkan:

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

mysql> CREATE USER 'admin_kampus'@'%' IDENTIFIED BY 'r4hasia';


Query OK, 0 rows affected (0.00 sec)
mysql> GRANT CREATE,DROP,ALTER ON stmik.* TO 'admin_kampus'@'%';
Query OK, 0 rows affected (0.00 sec)

Dalam merancang aplikasi yang memerlukan database MySQL, pembatasan hak akses
seperti diatas memerlukan seni tersendiri. Permasalahan muncul jika tiba-tiba user yang sudah
dibatasi ternyata memerlukan akses ke tabel lain. Kita sebaiknya sudah memperkirakan level apa
saja yang bisa diakses oleh user tertentu dan pada tabel apa saja sebelum aplikasi direlease.
Jika anda membangun aplikasi, biasanya pengguna tidak akan diberikan akses langsung
dengan MySQL Server, namun kita biasanya akan memandu pengguna melalui interface lainnya
seperti halaman web (untuk situs online) atau form visual basic (untuk aplikasi desktop). Dalam
aplikasi web, kode PHPlah (atau lebih tepatnya: web server) yang mengakses MySQL, pengguna
hanya dihadapkan pada halaman form website.
Untuk hal keamanan database, Jika anda telah membatasi hak akses pengguna pada
level PHP, hal tersebut bisa dikatakan sudah cukup. Namun jika terdapat kemungkinan pengguna
mengakses MySQL Server secara langsung, kita sedapat mungkin telah mengantisipasinya
dengan membuat user berlapis (dari kode PHP dan dari dalam MySQL).

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

5 CARA MELIHAT DAFTAR USER MYSQL DAN HAK AKSESNYA


(SHOW GRANTS FOR)
Pada tutorial MySQL kali ini kita akan membahas tentang cara melihat siapa saja user yang
terdaftar dalam MySQL, dan melihat hak akses apa saja yang diberikan kepada user tersebut
menggunakan query SHOW GRANTS FOR.
Pada artikel sebelumnya, kita telah belajar cara membuat user MySQL dan hak akses user
MySQL. Untuk sistem yang besar, pemantauan dan manajemen user akan sangat diperlukan.
Selain untuk kenyamanan pengguna, hal ini juga berkaitan erat dengan keamanan Server MySQL.
Misalnya, untuk user yang tidak aktif lagi sebaiknya dihapus dari sistem, karena bisa saja
disalahgunakan oleh orang lain.

5.1.1 Cara Melihat Daftar User MySQL


Untuk melihat user yang terdaftar di dalam MySQL Server, kita dapat mengaksesnya
dengan melihat tabel user yang terdapat di dalam database mysql.
Database mysql digunakan

secara

internal

untuk

manajemen meta

data

MySQL (metadataadalah data tentang sistem mysql itu sendiri) dimana salah satunya adalah
tabel user MySQL. Karena pentingnya database ini, biasanya hanya user root yang memiliki hak
akses penuh untuk database mysql.
Database mysql terdiri dari banyak tabel, namun untuk keperluan user, kita hanya akan
menggunakan tabel user. Berikut query untuk melihat seluruh user yang terdaftar dalam MySQL:
SELECT user,host FROM mysql.user;

Dari query SELECT diatas, kita bisa melihat user apa saja dan pada alamat mana saja yang
terdaftar.
Jika anda mengikuti materi MySQL untuk membuat user dalam Modul ini, didalam MySQL
Server akan terdapat beberapa user, berikut adalah contoh perintah melihat user pada MySQL:
D:\MySQL\bin>mysql u root -pqwerty
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.27 MySQL Community Server (GPL)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights
reserved.

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

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 |
| mahasiswa
|
| mysql
|
| performance_schema |
| test
|
| stmik
|
+--------------------+
6 rows in set (0.11 sec)
mysql> USE mysql;
Database changed
mysql> SELECT user,host FROM mysql.user;
+------------------+-------------+
| user
| host
|
+------------------+-------------+
| admin_kampus
| %
|
| sensus_ti
| 192.168.0.4 |
| sensus_mahasiswa | 192.168.0.4 |
| dosen_ti
| localhost
|
| si_admin
| localhost
|
| ti_admin
| localhost
|
| mahasiswa
| localhost
|
| root
| localhost
|
| tamu
| localhost
|
+------------------+-------------+
9 rows in set (0.12 sec)

Dari perintah diatas, pertama kali saya login sebagai root, lalu menggunakan database mysql, dan
terakhir menjalankan query SELECT user,host FROM mysql.user untuk melihat daftar user yang ada di
dalam MySQL. Secara total terdapat 9 user yang merupakan user yang saya buat pada penjelasan sub materi
sebelum ini. Jika anda perhatikan terdapat juga user root di dalam daftar tersebut.

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

5.1.2 Cara Melihat Hak Akses User MySQL (SHOW GRANTS FOR)
Setelah mendapatkan daftar user MySQL, tentunya kita ingin melihat apa saja hak akses yang
dimiliki oleh masing-masing user tersebut. Untuk melihat hak aksesnya, MySQL menyediakan
query SHOW GRANTS FOR.

Format dasar query SHOW GRANTS FOR adalah sebagai berikut:


SHOW GRANTS FOR nama_user@lokasi_user;

nama_user adalah nama dari user yang akan diquery.

lokasi_user adalah alamat IP dari user nama_user, dapat berupa: localhost, 192.168.0.5,
atau %.

Sebagai contoh, kita akan melihat hak akses untuk user admin_kampus dengan query berikut:
mysql> SHOW GRANTS FOR 'admin_kampus' \G
*************************** 1. row ***************************
Grants for admin_kampus@%: GRANT USAGE ON *.* TO 'admin_kampus'@'%'
IDENTIFIED BY PASSWORD '*7438236BE048F242AA18D2EE074296F078CD701A'
*************************** 2. row ***************************
Grants for admin_kampus@%: GRANT CREATE, DROP, ALTER ON `stmik`.*
TO 'admin_kampus'@'%'
2 rows in set (0.00 sec)

Saya menambahkan perintah \G sebagai pengganti titik koma (;) diakhir query agar hasil
tampilan tidak dalam bentuk tabel, tetapi ditampilakan per baris kebawah (pernah kita bahas pada
tutorial Dasar Penulisan Query MySQL), hal ini karena hasil query SHOW GRANTS FOR bisa
menjadi sangat panjang sehingga susah membacanya jika dalam bentuk tabel (silahkan mencoba
query tersebut tanpa format \G untuk melihat perbedaan yang saya maksud, ganti \G menjadi titik
koma ;).
Hasil query SHOW GRANTS FOR diatas terdiri dari 2 baris, baris pertama berisi:
GRANT USAGE ON *.* TO 'admin_kampus'@'%' IDENTIFIED BY PASSWORD '......'

Barisi ini lebih kepada penjelasan bahwa user admin_kampus berada pada lokasi % dan
memiliki password. Password yang tertera di sini adalah hasil fungsi hashing yang digunakan
secara internal oleh MySQL untuk menyimpan password. Saya akan membuat artikel tersendiri
untuk menjelaskan bagaimana password untuk user disimpan dan diproses oleh MySQL. Untuk
saat ini kita sepakati saja bahwa MySQL tidak menyimpan password dalam bentuk aslinya.
Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

Baris kedua berisi :


GRANT CREATE, DROP, ALTER ON `stmik`.* TO 'admin_kampus'@'%'

Inilah hasil query yang menjelaskan hak akses apa saja yang dimiliki oleh user admin_kampus.
Terlihat bahwa user admin_kampus memiliki hak akses CREATE, DROP, dan ALTER untuk
seluruh tabel dalam database universitas.
Query SHOW GRANTS FOR akan meminta masukan alamat lokasi user jika alamat user
tersebut tidak didefenisikan sebagai %, berikut contoh yang saya maksud:
mysql> SHOW GRANTS FOR 'dosen_ti' \G
ERROR 1141 (42000): There is no such grant defined for user
'dosen_ti' on host '%'
mysql> SHOW GRANTS FOR 'dosen_ti'@'localhost'\G
*************************** 1. row ***************************
Grants for dosen_ti@localhost: GRANT USAGE ON *.* TO 'dosen_ti'
@'localhost' IDENTIFIED BY PASSWORD
'*7438236BE048F242AA18D2EE074296F078CD701A'
*************************** 2. row ***************************
Grants for dosen_ti@localhost: GRANT SELECT, INSERT, UPDATE ON
`stmik`.`mahasiswa_ti` TO 'dosen_ti'@'localhost'
2 rows in set (0.00 sec)

Terlihat bahwa MySQL mengeluarkan pesan error pada saat perintah SHOW GRANTS
FOR

dosen_ti dijalankan,

karena

secara

default MySQL akan

mengeksekusi SHOW

GRANTS FOR dosen_ti@%, padahal user dosen_ti berada pada localhost, bukan pada %
(perhatikan hasil tabel user yang menjelaskan dosen_ti berada di localhost).
Sehingga ketika saya menggantinya menjadi SHOW GRANTS FOR dosen_ti@localhost,
MySQL sukses menjalankan query tersebut.
Dalam materi kali ini kita telah membahas query SHOW GRANTS FOR untuk melihat hak
akses sebuah user. Jika anda ingin menghapus beberapa user diatas, bisa menggunakan
perintah DROP USER, seperti yang telah kita bahas pada tutorial Cara Membuat dan Menghapus
User MySQL.

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Praktikum Pemrograman Client Server

STMIK Palangka Raya

Sedangkan jika anda ingin mencabut hak akses user yang ada tanpa menghapus user tersebut,
dapat menggunakan query REVOKE yang akan kita bahas pada materi selanjutnya, Cara
menghapus hak akses user MySQL menggunakan query REVOKE.

Untuk Kalangan Sendiri

Herkules S.Kom., M.Cs

Anda mungkin juga menyukai