Wednesday, June 8, 2022

Query Lanjutan ( Intermediate ) Database MySQL - III

 



Pembuatan User dan Hak Akses MySQL:

  • Mengenal Superuser root dan Pengertian Privileges MySQL

Mengenal Hak Akses Superuser: ‘root’

User ‘root’ dalam istilah keamanan komputer sering disebut sebagai ‘superuser’Superuser merupakan tingkatan user tertinggi dimana user ini dapat melihat, mengubah, bahkan menghapus seluruh database dan menjalankan perintah apapun yang terdapat dalam MySQL.

Dalam tahap pembelajaran,  diuntungkan dan dimudahkan dengan menggunakan user root dalam 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.

Hal dapat dibuatkan user baru yang hanya bisa menjalankan perintah SELECT saja, dan user tersebut dibatasi untuk tidak dapat menjalankan query DROP.

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 dibatasi 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 bisa membatasi hak akses untuk kolom IPK dan membuka akses untuk kolom lainnya.

Dalam bahasa inggrisnya, hak akses ini dikenal dengan istilah ‘privileges’

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. hal ini bisa dilihat 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.
 
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 |
| 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, memiliki resiko salah perintah yang dapat menyebabkan terhapusnya data dalam database mysql. Namun mengubah database mysql menawarkan fleksibilitas yang lebih dalam membuat hak akses.

  • Cara Membuat dan Menghapus User MySQL (CREATE USER)

Menyiapkan Database Sample: universitas

Sebagai database contoh yang akan digunakan untuk belajar membuat user baru MySQL, akan dibuat sebuah database universitas. Silahkan masuk dengan user root ke dalam MySQL Server.

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


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

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


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 universitas,  akan membuat user ilkom_admin, berikut contoh querynya:

mysql> CREATE USER 'ilkom_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, harus keluar dari user root yang digunakan saat ini, dan login sebagai ilkom_admin.

mysql> exit;
Bye
 
D:\MySQL\bin>mysql -u ilkom_admin
 
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>


Pada contoh diatas, pertama-tama menggunakan perintah exit untuk keluar dari root. Setelah itu log in menggunakan user yang baru saja dibuat, yakni ilkom_admin.

Jika memeriksa database untuk user ini, user ilkom_admin belum memiliki hak akses untuk database apapun. 

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.10 sec)

Terlihat bahwa hasil SHOW DATABASES dari user ilkom_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. User ini hanya bisa menggunakan query SELECT untuk database ini, tetapi tidak untuk query DELETE, INSERT, maupun UPDATE.

Cara Membuat User dalam MySQL dengan Password

User ilkom_admin yang baru saja dibuat, dapat diakses oleh siapapun sepanjang ia mengetahui username yang digunakan, yakni ilkom_admin.

Untuk menambah keamanan,  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 ingin membuat user ilkom_admin2 dengan password ‘12345’, maka querynya:

mysql> CREATE USER ilkom_admin2 IDENTIFIED BY 'rahasia';
Query OK, 0 rows affected (0.01 sec)


Dan jika ingin mengakses user tersebut, haruslah menggunakan password:

D:\MySQL\bin>mysql -u ilkom_admin2
ERROR 1045 (28000): Access denied for user 'ilkom_admin2'@'localhost'
(using password: NO)
 
D:\MySQL\bin>mysql -u ilkom_admin2 –p12345
 
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.

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 dibahas bahwa pengaksesan MySQL Server dapat dilakukan dari komputer mana saja sepanjang 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 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, bisa mengisinya dengan alamat IP seperti ‘192.168.0.2’, atau alamat host domain
  • password adalah password yang harus dituliskan pada saat nama_user mengakses MySQL server.

Sebagai contoh query, misalkan ingin membuat user ilkom_admin3 dengan password 123456 dan hanya bisa diakses dari IP 192.168.0.4, maka querynya:

mysql> CREATE USER 'ilkom_admin3'@'192.168.0.4' IDENTIFIED by '123456';
Query OK, 0 rows affected (0.01 sec)

Jika menggunakan user ilkom_admin3 dari komputer dengan IP address selain ‘192.168.0.4’, MySQL akan menghasilkan error.

D:\MySQL\bin>mysql -u ilkom_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 ilkom_admin4 dapat diakses dari seluruh alamat mulai dari 192.168.0.1 sampai dengan 192.168.0.255, namun tidak untuk IP 192.168.1.0.

Bahkan sebenarnya perintah:

CREATE USER 'ilkom_admin';

Adalah sama dengan

CREATE USER 'ilkom_admin'@%;

Yang berarti user ilkom_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 menggunakan MySQL Client pada komputer yang sama dengan MySQL server, maka dalam tutorial selanjutnya hanya akan memakai lokasi localhost, seperti:

CREATE USER 'ilkom_admin'@'localhost';

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.

Pada tutorial ini, maka akan tercipta 3 user, yakni ilkom_admin, ilkom_admin2 dan ilkom_admin3. Kita akan menghapus ketiganya:

mysql> DROP USER ilkom_admin;
Query OK, 0 rows affected (0.00 sec)
 
mysql> DROP USER ilkom_admin2;
Query OK, 0 rows affected (0.00 sec)
 
mysql> DROP USER ilkom_admin3; ERROR 1396 (HY000):
Operation DROP USER failed for 'ilkom_admin3'@'%'


Untuk user ilkom_admin3, MySQL akan mengeluarkan pesan error. Hal ini dikarenakan pada saat  membuat user ilkom_admin3, membatasi user ini dengan hanya bisa diakses dari IP 192.168.0.4, sehingga untuk menghapusnya harus mencantumkan alamat lengkap IP:

mysql> DROP USER 'ilkom_admin3'@'192.168.0.4';
Query OK, 0 rows affected (0.00 sec)


  • Cara Membuat Hak Akses (Privileges) User MySQL (GRANT)

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 lainnya. Jika 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 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 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 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 gunakan:

mysql> CREATE USER 'ilkom_admin'@'localhost' IDENTIFIED BY '12345';
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 membuat user ilkom_admin yang harus diakses dari komputer localhost (komputer yang sama dengan server MySQL berada), dan memberikan password ‘12345’

Selanjutnya pada bagian kedua, memberikan hak akses dengan query GRANT pada untuk user ilkom_admin.

Perhatikan cara penulisan query GRANT tersebut, setelah keyword GRANT, diikuti dengan kata SELECTSELECT disini adalah hak akses yang ingin di berikan kepada user,  pada user ini diberikan 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 -p12345
 
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, dan hanya dapat melihat satu tabel, yakni tabel mahasiswa_ilkom. Padahal dalam database tersebut 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 dibatasi 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 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 '123456';
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 menggunakan format universitas.* yang berarti dapat mengakses seluruh tabel pada database universitas.

Selanjutnya, akan mencoba menggunakan user mahasiswa untuk melihat database universitas:

D:\MySQL\bin>mysql -u mahasiswa -p123456
 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
 
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_ekonomi     |
| mahasiswa_ilkom       |
+-----------------------+
2 rows in set (0.00 sec)

Dari hasil query diatas, terlihat bahwa user mahasiswa dapat melihat terdapat 2 tabel dalam database universitas. Dan jika 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, hanya menggunakan hak akses SELECT. Kali ini akan memberikan hak akses penuh kepada user ekonomi_admin, dengan query GRANT ALL. Berikut querynya:

mysql> CREATE USER 'ekonomi_admin'@'localhost' IDENTIFIED BY '123456';
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 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 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.

  • Jenis-jenis Hak Akses (Privileges) dalam MySQL

Jenis Hak Akses Berdasarkan Cakupan Akses Level

Jika didasarkan pada pengelompokkan ini, dapat membagi hak akses MySQL menjadi 4 level tingkatan, yaitu:

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 menulisnya dengan *.*, sehingga user tersebut dapat mengakses seluruh tabel pada seluruh database.

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 universitas.* TO 'user'@'localhost';

Untuk penulisan nama_database.nama_tabel, membatasi nama database, namun memberikan hak akses untuk seluruh tabel, penulisannya adalah nama_database.*

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:

GRANT SELECT ON universitas.mahasiswa_ilkom TO 'user'@'localhost';

Hak akses yang dimiliki user hanya terbatas pada level sebuah tabel saja.

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 universitas.mahasiswa_ilkom TO 'user'@'localhost';

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

Tipe-Tipe Hak Akses dalam MySQL

Untuk setiap level diatas, 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 melampirkan seluruh tipe hak akses yang dapat diberikan/dibatasi untuk user. Tabel tersebut diambil langsung dari manual resmi MySQL. 

Hak AksesKeterangan
ALL [PRIVILEGES]Memberikan seluruh hak akses, kecuali GRANT OPTION
ALTERHak akses untuk merubah tabel (ALTER TABLE)
ALTER ROUTINEHak akses untuk merubah stored routines
CREATEHak akses untuk membuat tabel dan database
CREATE ROUTINEHak akses untuk membuat dan menghapus stored routine
CREATE TABLESPACEHak akses untuk membuat, mengubah dan menghapus tablespaces dan log file
CREATE TEMPORARYTABLESHak akses untuk membuat tabel sementara CREATE TEMPORARY TABLE
CREATE USERHak akses untuk membuat, menghapus, dan mengubah user (CREATE USER, DROP USER, RENAME USER, dan REVOKE ALL PRIVILEGES)
CREATE VIEWHak akses untuk membuat dan mengubah views
DELETEHak akses untuk menghapus data (DELETE)
DROPHak akses untuk menghapus database, tabel dan view
EVENTHak akses untuk membuat event
EXECUTEHak akses untuk menjalankan stored routines
FILEHak akses untuk membuat server membaca maupun membuat file
GRANT OPTIONHak akses untuk memberikan hak akses kepada user lainnya.
INDEXHak akses untuk membuat dan menghapus index
INSERTHak akses untuk menambahkan data (query INSERT)
LOCK TABLESHak akses untuk mengunci tabel (LOCK TABLES)
PROCESSHak akses untuk melihat seluruh proses (SHOW PROCESSLIST)
PROXYHak akses untuk proses proxy
REFERENCESBelum diimplementasikan
RELOADHak akses untuk operasi FLUSH
REPLICATION CLIENTHak akses untuk mengubah urutan master dan slave server
REPLICATION SLAVEHak akses untuk server replikasi untuk membaca log event biner dari server master
SELECTHak akses untuk melihat data (query SELECT)
SHOW DATABASESHak akses untuk melihat seluruh database (SHOW DATABASES)
SHOW VIEWHak akses untuk melihat pembuatan view (SHOW CREATE VIEW)
SHUTDOWNHak akses untuk mysqladmin shutdown
SUPERHak akses untuk fungsi administrasi server, seperti CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, dan perintah debug mysqladmin
TRIGGERHak akses untuk operasi trigger
UPDATEHak akses untuk memperbaharui data (UPDATE)
USAGESama artinya dengan “tanpa hak akses”


Pengertian Hak Akses GRANT ALL

GRANT ALL adalah cara penyingkatan memberikan hampir semua hak akses kepada sebuah user tertentu. Hak akses ini mencakup seluruh query dasar:

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.

Untuk lebih memahami cara pembuatan user dan hak aksesnya, akan memberikan beberapa contoh.

1. Buatlah user ‘dosen_ilkom’ yang dapat melihatmerubah dan menambahkan data ke tabel mahasiswa_ilkom, namun tidak dapat menghapus data yang ada. User tersebut hanya dapat diakses dari localhost.

Berikut adalah query yang dibutuhkan:

mysql> CREATE USER 'dosen_ilkom'@'localhost' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT SELECT,INSERT,UPDATE ON universitas.mahasiswa_ilkom
TO 'dosen_ilkom'@'localhost';

Query OK, 0 rows affected (0.07 sec)


2. Buatlah user ‘sensus_ilkom’ yang dapat melihat seluruh tabel di dalam database mahasiswa_ilkom, namun hanya pada kolom nimnama, dan umur. User tersebut akan mengakses database dari IP 192.168.0.4 .

Berikut adalah query yang dibutuhkan:

mysql> CREATE USER 'sensus_ilkom'@'192.168.0.4' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT SELECT(nim,nama,umur) ON universitas.mahasiswa_ilkom
TO 'sensus_ilkom'@'192.168.0.4';

Query OK, 0 rows affected (0.00 sec)


3. Buatlah user ’admin_kampus’ yang dapat mengeditmembuat, dan menghapus tabel dalam database universitas, namun tidak bisa melakukan manipulasi data di dalam tabel tersebut. User ini bisa diakses dari komputer manapun.

Berikut adalah query yang dibutuhkan:

mysql> CREATE USER 'admin_kampus'@'%' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT CREATE,DROP,ALTER ON universitas.* 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. Sebaiknya sudah memperkirakan level apa saja yang bisa diakses oleh user tertentu dan pada tabel apa saja sebelum aplikasi direlease.

  • Cara Melihat Daftar User dan Hak Akses (SHOW GRANTS FOR)

Cara Melihat Daftar User MySQL

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

Database mysql digunakan secara internal untuk manajemen meta data MySQL (metadata adalah data tentang sistem mysql itu) 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, 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.

Perintah melihat user pada MySQL:

D:\MySQL\bin>mysql -uroot -p1234
 
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.
 
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               |
| universitas        |
+--------------------+
6 rows in set (0.11 sec)
 
mysql> USE mysql;
Database changed
 
mysql> SELECT user,host FROM mysql.user;
+------------------+-------------+
| user             | host        |
+------------------+-------------+
| admin_kampus     | %           |
| sensus_ilkom     | 192.168.0.4 |
| sensus_mahasiswa | 192.168.0.4 |
| dosen_ilkom      | localhost   |
| ekonomi_admin    | localhost   |
| ilkom_admin      | localhost   |
| mahasiswa        | localhost   |
| root             | localhost   |
| tamu             | localhost   |
+------------------+-------------+
9 rows in set (0.12 sec)

Dari perintah diatas, pertama kali 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 dibuat. Jika diperhatikan terdapat juga user root di dalam daftar tersebut.

Cara Melihat Hak Akses User MySQL (SHOW GRANTS FOR)

Setelah mendapatkan daftar user MySQL, tentunya 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: localhost192.168.0.5, atau ‘%’.

Contoh 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 `universitas`.*
TO 'admin_kampus'@'%'
2 rows in set (0.00 sec)

Tambahkan perintah \G sebagai pengganti titik koma (;) diakhir query agar hasil tampilan tidak dalam bentuk tabel, tetapi ditampilakan per baris kebawah, hal ini karena hasil query SHOW GRANTS FOR bisa menjadi sangat panjang sehingga susah membacanya jika dalam bentuk tabel (coba query tersebut tanpa format \G untuk melihat perbedaan dengan \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 passwordPassword yang tertera di sini adalah hasil fungsi hashing yang digunakan secara internal oleh MySQL untuk menyimpan password. 

Baris kedua berisi :

GRANT CREATE, DROP, ALTER ON `universitas`.* 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 CREATEDROP, 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_ilkom' \G
 
ERROR 1141 (42000): There is no such grant defined for user
'dosen_ilkom' on host '%'
 
mysql> SHOW GRANTS FOR 'dosen_ilkom'@'localhost'\G
 
*************************** 1. row ***************************
Grants for dosen_ilkom@localhost: GRANT USAGE ON *.* TO 'dosen_ilkom'
@'localhost' IDENTIFIED BY PASSWORD
'*7438236BE048F242AA18D2EE074296F078CD701A'
 
*************************** 2. row ***************************
Grants for dosen_ilkom@localhost: GRANT SELECT, INSERT, UPDATE ON
`universitas`.`mahasiswa_ilkom` TO 'dosen_ilkom'@'localhost'
2 rows in set (0.00 sec)

Terlihat bahwa MySQL mengeluarkan pesan error pada saat perintah SHOW GRANTS FOR ‘dosen_ilkom’ dijalankan, karena secara default MySQL akan mengeksekusi SHOW GRANTS FOR ‘dosen_ilkom’@’%’, padahal user dosen_ilkom berada pada localhost, bukan pada ‘%‘ (perhatikan hasil tabel user yang menjelaskan dosen_ilkom berada di localhost).

Sehingga ketika menggantinya menjadi SHOW GRANTS FOR ‘dosen_ilkom’@’localhost’, MySQL sukses menjalankan query tersebut.

  • Cara Menghapus Hak Akses User MySQL (REVOKE)

Cara Penggunaan Query REVOKE untuk Menghapus Hak Akses

Langkah pertama sebelum membuat query REVOKE adalah mengetahui user siapa dan hak apa saja yang akan dihapus. Untuk melihat hak akses apa saja yang dimiliki oleh seorang user, dapat menggunakan query SHOW GRANTS FOR.

Untuk tutorial ini akan dibuat user baru admin_data. User admin_data akan diberikan hak akses untuk query SELECT,INSERT,UPDATE, dan DELETE untuk seluruh tabel yang berada di dalam database universitas. Berikut adalah query yang mengunakan dengan user root:

D:\MySQL\bin>mysql -u root -p1234
 
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.
 
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 USER 'admin_data'@'localhost'IDENTIFIED by '12345';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON universitas.*
TO 'admin_data'@'localhost';
Query OK, 0 rows affected (0.00 sec)
 
mysql> SHOW GRANTS FOR 'admin_data'@'localhost'\G
 
*************************** 1. row ***************************
Grants for admin_data@localhost: GRANT USAGE ON *.* TO
'admin_data'@'localhost' IDENTIFIED BY PASSWORD
'*7438236BE048F242AA18D2EE074296F078CD701A'
 
*************************** 2. row ***************************
Grants for admin_data@localhost: GRANT SELECT, INSERT, UPDATE,
DELETE ON `universitas`.* TO 'admin_data'@'localhost'
2 rows in set (0.06 sec)


Setelah menjalankan perintah diatas, user admin_data memiliki 4 jenis hak akses, yaitu SELECT,INSERT,UPDATE, dan DELETE. Query REVOKE dapat di buat untuk menghapus seluruh atau salah satu hak akses saja. Berikut adalah format dasar penulisan query REVOKE:

REVOKE jenis_hak_akses (kolom1,kolom2) ON
nama_database.nama_tabel FROM nama_user@lokasi_user;
  • Jenis_hak_akses adalah privileges yang akan dihapus dari user tersebut. Bisa membuat hak akses secara satu persatu untuk keperluan yang spesifik, atau mengisikan perintah ALL PRIVILEGES untuk menghapus seluruh hak akses.
  • kolom1,kolom2 adalah nama judul kolom yang hak aksesnya akan dicabut. Jika tidak diisi, maka dianggap query REVOKE akan menghapus pada seluruh kolom.
  • nama_database adalah nama database yang ingin dihapuskan hak aksesnya. nama_database bisa ditulis dengan tanda bintang (*) untuk merujuk kepada seluruh database.
  • nama_tabel adalah nama tabel yang ingin dihapuskan hak aksesnya. nama_tabel bisa ditulis dengan tanda bintang (*) untuk merujuk kepada seluruh tabel.
  • nama_user adalah nama dari user yang akan dihapus hak aksesnya.
  • lokasi_user adalah alamat IP dari user yang akan dihapus hak aksesnya.

Sebagai contoh, saya akan menghapus hak akses SELECT dari user admin_data:

mysql> exit;
Bye
 
D:\MySQL\bin>mysql -uadmin_data -p12345
 
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.08 sec)
 
mysql> USE universitas;
Database changed
 
mysql> SHOW tables;
+-----------------------+
| Tables_in_universitas |
+-----------------------+
| mahasiswa_ekonomi     |
| mahasiswa_ilkom       |
+-----------------------+
2 rows 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> exit;
Bye
 
D:\MySQL\bin>mysql -u root -p1234
 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
 
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> REVOKE SELECT ON universitas.* FROM 'admin_data'@'localhost';
Query OK, 0 rows affected (0.00 sec)
 
mysql> SHOW GRANTS FOR 'admin_data'@'localhost'\G
 
*************************** 1. row ***************************
Grants for admin_data@localhost: GRANT USAGE ON *.*
TO 'admin_data'@'localhost' IDENTIFIED BY PASSWORD
'*7438236BE048F242AA18D2EE074296F078CD701A'
 
*************************** 2. row ***************************
Grants for admin_data@localhost: GRANT INSERT, UPDATE, DELETE ON
`universitas`.* TO 'admin_data'@'localhost'
2 rows in set (0.00 sec)


Contoh query MySQL diatas, pertama-tama keluar dari user root dengan perintah exit;, dan masuk sebagai admin_data. Selanjutnya ingin menguji user admin_data untuk menampilkan isi tabel mahasiswa_ilkom, dan melakukan pengecekan hak akses user tersebut.

Setelah memastikan hak akses admin_data,   kembali menggunakan user root dan menghapus hak akses SELECT dari admin_data dengan query REVOKE, dan kembali memeriksa hak aksesnya.

Untuk menguji bahwa user admin_data sudah tidak dapat melihat database universitas lagi, akan kembali masuk sebagai user admin_data:

mysql> exit;
Bye
 
D:\MySQL\bin>mysql -uadmin_data -p12345
 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
 
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_ekonomi     |
| mahasiswa_ilkom       |
+-----------------------+
2 rows in set (0.00 sec)
 
mysql> SELECT * FROM mahasiswa_ilkom;
ERROR 1142 (42000): SELECT command denied to user
'admin_data'@'localhost' fortable 'mahasiswa_ilkom'
 
mysql> SHOW GRANTS FOR 'admin_data'@'localhost'\G
 
*************************** 1. row ***************************
Grants for admin_data@localhost: GRANT USAGE ON *.* TO
'admin_data'@'localhost' IDENTIFIED BY PASSWORD
'*7438236BE048F242AA18D2EE074296F078CD701A'
 
*************************** 2. row ***************************
Grants for admin_data@localhost: GRANT INSERT, UPDATE, DELETE
ON `universitas`.* TO 'admin_data'@'localhost'
2 rows in set (0.00 sec)
 
mysql> INSERT INTO mahasiswa_ilkom VALUES ('129245021', 'Ginara Maulida',
22, 'Malang', 3.8);
Query OK, 1 row affected (0.11 sec)


Pada saat menggunakan user admin_data,  mencoba melakukan query SELECT, dan seperti yang diharapkan, MySQL menolak untuk memperlihatkan isi tabel mahasiswa_ilkom karena hak akses untuk query SELECT telah dihapus.

Namun karena user admin_data masih memiliki hak akses INSERT, UPDATE dan DELETE, pada perintah terakhir mencoba menambahkan data baru kedalam tabel mahasiswa_ilkom, dan berhasil.

Untuk menghapus hak akses lainnya, anda tinggal membuat perintah REVOKE untuk masing-masing hak akses, atau menggunakan REVOKE ALL untuk menghapus seluruh hak akses.

Cara Penggunaan Query REVOKE ALL untuk Menghapus Seluruh Hak Akses

Jika pada penjelasan sebelumnya akan diberikan fleksibilitas untuk dapat memilih hak akses apa saja yang akan dihapus, namun sebagai cara singkat, MySQL menyediakan query REVOKE ALL untuk mencabut seluruh hak akses.

Sebagai lanjutan dari user admin_data, memutuskan untuk mencabut seluruh hak aksesnya kembali. Silahkan masuk sebagai root, dan jalankan perintah berikut:

D:\MySQL\bin>mysql -u root -p1234
 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
 
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 GRANTS FOR 'admin_data'@'localhost'\G
 
*************************** 1. row ***************************
Grants for admin_data@localhost: GRANT USAGE ON *.* TO
'admin_data'@'localhost' IDENTIFIED BY PASSWORD
'*7438236BE048F242AA18D2EE074296F078CD701A'
 
*************************** 2. row ***************************
Grants for admin_data@localhost: GRANT INSERT, UPDATE, DELETE ON
`universitas`.* TO 'admin_data'@'localhost'
2 rows in set (0.00 sec)
 
mysql> REVOKE ALL ON universitas.* FROM 'admin_data'@'localhost';
Query OK, 0 rows affected (0.00 sec)
 
mysql> SHOW GRANTS FOR 'admin_data'@'localhost'\G
 
*************************** 1. row ***************************
Grants for admin_data@localhost: GRANT USAGE ON *.* TO
'admin_data'@'localhost' IDENTIFIED BY PASSWORD
'*7438236BE048F242AA18D2EE074296F078CD701A'
1 row in set (0.00 sec)


Pada perintah pertama, menggunakan query SHOW GRANTS FOR untuk melihat hak akses admin_data, lalu menggunakan query REVOKE ALL untuk menghapus seluruh hak aksesnya, dan memastikannya lagi dengan memeriksa query SHOW GRANTS FOR.

  • Cara Mengalihkan Hak Akses User MySQL (GRANT OPTION)

Pengertian Hak Akses GRANT OPTION

Ada kalanya seorang user MySQL ingin mengalihkan hak akses yang ia miliki ke user lainnya.

Misalkan mahasiswa ilkom sudah dirasa terlalu banyak, sehingga user ilkom_admin1 membutuhkan admin baru untuk membantunya. User ilkom_admin1 bisa saja mengalihkan hak akses yang dimilikinya (tanpa mengapus hak akses sendiri) ke user ilkom_admin2.

Kemampuan untuk memberikan hak akses inilah yang disebut dengan hak GRANT OPTION. Tetapi syarat untuk seorang user dapat mengalihkan hak aksesnya adalah sewaktu pembuatan user asal, user root harus memberikan hak GRANT OPTION.

Cara Penggunaan dan Penulisan query GRANT OPTION (1)

Terdapat beberapa cara penulisan GRANT OPTION. Cara pertama yaitu menuliskan GRANT OPTION secara terpisah dengan hak akses. Cara ini digunakan jika user telah ada dan hak akses telah diberikan.

Format dasar penulisan GRANT OPTION:

GRANT GRANT OPTION ON nama_database.nama_tabel TO 'nama_user'@'lokasi_user';
  • GRANT OPTION adalah perintah yang dituliskan jika mengizinkan user tersebut bisa memberikan hak akses kepada user lainnya.
  • nama_database adalah nama database yang ingin diberikan hak akses. Jika 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 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 latihan, akan dibuat user ilkom_admin1 dengan hak GRANT OPTION, lalu memberikan akses tersebut ke user ilkom_admin2.

D:\MySQL\bin>mysql -uroot -p1234
 
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.
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 USER 'ilkom_admin1'@'localhost' IDENTIFIED by '12345';
Query OK, 0 rows affected (0.04 sec)
 
mysql> GRANT SELECT ON universitas.mahasiswa_ilkom TO
'ilkom_admin1'@'localhost';
Query OK, 0 rows affected (0.14 sec)
 
mysql> GRANT GRANT OPTION ON universitas.mahasiswa_ilkom
TO 'ilkom_admin1'@'localhost';
Query OK, 0 rows affected (0.00 sec)
 
mysql> SHOW GRANTS FOR ilkom_admin1@localhost \G
 
*************************** 1. row ***************************
Grants for ilkom_admin1@localhost: GRANT USAGE ON *.*
TO 'ilkom_admin1'@'localhost' IDENTIFIED BY PASSWORD
'*7438236BE048F242AA18D2EE074296F078CD701A'
 
*************************** 2. row ***************************
Grants for ilkom_admin1@localhost: GRANT SELECT ON
`universitas`.`mahasiswa_ilkom` TO 'ilkom_admin1'@'localhost'
WITH GRANT OPTION
2 rows in set (0.00 sec)


Perhatikan pada baris setelah membuat user ilkom_admin1 (baris ke-14) dan hak akses SELECT (baris ke-17). Pada baris ke-21 saya memberikan perintah GRANT OPTION untuk user ilkom_admin1. Lalu pada baris ke 25 saya menggunakan menggunakan query SHOW GRANTS FOR untuk memeriksa hak akses ilkom_admin1, dan seperti yang terlihat pada baris ke-35, ada tambahan penjelasan pada user ilkom_admin1 ‘WITH GRANT OPTION’.

Jika mencoba masuk sebagai user ilkom_admin1, user tersebut dapat melihat isi seluruh tabel mahasiswa_ilkom. Untuk mencoba memberikan hak akses yang sama kepada user ilkom_admin2, pertama-tama dari user root akan membuat user ilkom_admin2. Berikut querynya:

mysql> CREATE USER 'ilkom_admin2'@'localhost' IDENTIFIED by '12345';
Query OK, 0 rows affected (0.00 sec)
 
mysql> SHOW GRANTS FOR ilkom_admin2@localhost \G
 
*************************** 1. row ***************************
Grants for ilkom_admin2@localhost: GRANT USAGE ON *.*
TO 'ilkom_admin2'@'localhost' IDENTIFIED BY PASSWORD
'*7438236BE048F242AA18D2EE074296F078CD701A'
1 row in set (0.00 sec)


Perintah diatas digunakan untuk membuat user ilkom_admin2 tanpa hak akses, karena akan memberikan hak aksesnya melalui user ilkom_admin1. Untuk mencoba hak GRANT OPTION ini, keluarlah dari root, dan masuk sebagai ilkom_admin1.

mysql> exit;
Bye
 
D:\MySQL\bin>mysql -uilkom_admin1 -p12345
 
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.10 sec)
 
mysql> USE universitas;
Database changed
 
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 |
| 129245021 | Ginara Maulida  |   22 | Malang       | 3.80 |
+-----------+-----------------+------+--------------+------+
4 rows in set (0.12 sec)
 
mysql> GRANT SELECT ON universitas.mahasiswa_ilkom TO
 'ilkom_admin2'@'localhost';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT INSERT ON universitas.mahasiswa_ilkom TO
'ilkom_admin2'@'localhost';
 
ERROR 1142 (42000): INSERT command denied to user
'ilkom_admin1'@'localhost' for table 'mahasiswa_ilkom'


Setelah masuk sebagai user ilkom_admin1 (baris ke-4), saya menjalankan beberapa query untuk mengecek hak akses ilkom_admin1 dengan perintah SELECT pada tabel mahasiswa_ilkom (baris ke-17 dan 29). Terlihat bahwa user ilkom_admin1 dapat menjalankan perintah SELECT tersebut tanpa masalah.

Pada baris ke 40 dan 44 menjalankan perintah GRANT untuk meneruskan hak akses SELECT kepada user ilkom_admin2. Baris 40 berjalan sukses karena user ilkom_admin1 memiliki hak akses GRANT OPTION untuk query SELECT.

Namun perintah pada baris ke 44, menghasilkan error karena user ilkom_admin1 tidak memiliki hak akses untuk perintah INSERT, sehingga tidak bisa meneruskan hak aksesnya kemapa user ilkom_admin2.

Sebagai langkah terakhir,  akan mencoba masuk dengan user ilkom_admin2 untuk testing perintah SELECT yang didapat dari user ilkom_admin1.

mysql> exit
Bye
 
D:\MySQL\bin>mysql -uilkom_admin2 -p12345
 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
 
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> 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 |
| 129245021 | Ginara Maulida  |   22 | Malang       | 3.80 |
+-----------+-----------------+------+--------------+------+
4 rows in set (0.00 sec)


Seperti yang diharapkan, user ilkom_admin2 dapat menjalankan perintah SELECT yang diberikan oleh user ilkom_admin1.

Cara Penggunaan dan Penulisan query GRANT OPTION

Selain format penulisan GRANT OPTION yang diberikan pada perintah terpisah setelah membuat user dan hak aksesnya seperti contoh sebelumnya, MySQL memiliki cara kedua dengan menyatukannya penulisan GRANT OPTION dengan pemberian hak akses.

Berikut adalah format dasar penulisannya:

GRANT hak_akses ON nama_database.nama_tabel TO 'nama_user'@'lokasi_user' with GRANT OPTION;

Perhatikan bahwa penambahan kata WITH GRANT OPTION pada bagian akhir perintah.

Sebagai contoh, akan membuat user ekonomi_admin1 dengan hak akses ALL PRIVILEGES pada tabel mahasiswa_ekonomi dengan hak GRANT OPTION.

D:\MySQL\bin>mysql -uroot -p1234
 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
 
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 USER 'ekonomi_admin1'@'localhost' IDENTIFIED by 'r4hasia';
Query OK, 0 rows affected (0.01 sec)
 
mysql> GRANT ALL ON universitas.mahasiswa_ekonomi TO
'ekonomi_admin1'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
 
mysql> SHOW GRANTS FOR ekonomi_admin1@localhost \G
 
*************************** 1. row ***************************
Grants for ekonomi_admin1@localhost: GRANT USAGE ON *.*
TO 'ekonomi_admin1'@'localhost' IDENTIFIED BY PASSWORD
'*7438236BE048F242AA18D2EE074296F078CD701A'
 
*************************** 2. row ***************************
Grants for ekonomi_admin1@localhost: GRANT ALL PRIVILEGES ON
`universitas`.`mahasiswa_ekonomi` TO 'ekonomi_admin1'@'localhost'
WITH GRANT OPTION
2 rows in set (0.00 sec)


Dari query diatas, menggabungkan query pemberian hak akses dengan pemberian GRANT OPTION. Sebagai latihan, bisa meneruskan membuat user ekonomi_admin2, dan memberikan hak akses ALL dari user ekonomi_admin1.

Namun pada kasus-kasus tertentu, hak akses GRANT OPTION memberikan fleksibilitas yang tinggi dalam merancang database.

  • Pengertian Fungsi Hashing dan Cara Kerja Password MySQL

Mengenal Sistem Enkripsi Hashing

Dalam mengelola user, MySQL menyimpan password di dalam tabel user yang berada di dalam database mysql. Pada tutor ini akan mencoba melihat password tiap-tiap user yang terdaftar dengan melihatnya dari tabel user ini.

Berikut query yang diperlukan untuk melihat password seluruh user dalam MySQL (masuklah sebagai root):

D:\MySQL\bin>mysql -uroot -p1234
 
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.
 
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               |
| universitas        |
+--------------------+
6 rows in set (0.54 sec)
 
mysql> USE mysql;
Database changed
 
mysql> SELECT user,password,host FROM user;
+------------------+-------------------------------------------+-------------+
| user             | password                                  | host        |
+------------------+-------------------------------------------+-------------+
| root             | *AA1420F182E88B9E5F874F6FBE7459291E8F4601 | localhost   |
| ilkom_admin      | *7438236BE048F242AA18D2EE074296F078CD701A | localhost   |
| mahasiswa        | *7438236BE048F242AA18D2EE074296F078CD701A | localhost   |
| ekonomi_admin    | *7438236BE048F242AA18D2EE074296F078CD701A | localhost   |
| tamu             |                                           | localhost   |
| dosen_ilkom      | *7438236BE048F242AA18D2EE074296F078CD701A | localhost   |
| sensus_mahasiswa | *7438236BE048F242AA18D2EE074296F078CD701A | 192.168.0.4 |
| admin_kampus     | *7438236BE048F242AA18D2EE074296F078CD701A | %           |
| ilkom_admin1     | *7438236BE048F242AA18D2EE074296F078CD701A | localhost   |
+------------------+-------------------------------------------+-------------+
13 rows in set (0.16 sec)


Query diatas, dapat melihat seluruh userpassword, dan lokasi dari user yang terdaftar dalam MySQL. Namun seperti yang terlihat, isian dari password disimpan dalam angka yang acak. Ini adalah hasil fungsi hashing yang digunakan MySQL untuk menangani password.

Pengertian Fungsi Hashing MySQL

Dalam ilmu komputer, fungsi hashing biasanya dipelajari bersama-sama dengan kriptografi, yaitu ilmu tentang pembuatan pesan rahasia dan cara memecahkannya.

Secara sederhana, fungsi hashing adalah sebuah fungsi yang digunakan untuk mengacak sebuah kata menjadi kata lain yang tidak bermakna dan sedapat mungkin kata hasil hashing tidak bisa ditebak dari kata apa kata tersebut berasal.

Seluruh password user yang disimpan MySQL, terlebih dahulu diproses melalui fungsi hashing ini. Tujuannya, agar user yang tidak berhak, tidak dapat melihat password user lainnya.

Mengenal Fungsi PASSWORD()

Untuk mendapatkan hasil hashing untuk password MySQL, bisa menggunakan fungsi PASSWORD yang disediakan MySQL. Berikut contoh query untuk penggunaan fungsi PASSWORD:

mysql> SELECT PASSWORD('1234');
+-------------------------------------------+
| PASSWORD('1234')                        |
+-------------------------------------------+
| *AA1420F182E88B9E5F874F6FBE7459291E8F4601 |
+-------------------------------------------+
1 row in set (0.16 sec)


Seperti yang terlihat, MySQL meng-hashing kata qwerty menjadi karakter-karakter acak sepanjang 41 karakter. Hasil hashing inilah yang disimpan dalam tabel user diatas.

Lalu bagaimana cara MySQL membandingkan password saat user masuk ke sistem? MySQL cukup membandingkan isian password yang diinput penguna, memasukkannya ke dalam fungsi PASSWORD, dan membandingkan hasilnya dengan yang terdapat di tabel user. Jika hasil hashing nya bernilai sama, maka password tersebut benar dan pengguna berhak masuk ke dalam sistem.

Bisa dicoba kata-kata lainnya ke dalam fungsi PASSWORD ini, misalnya untuk user ilkom_admin, saya menggunakan password ‘12345’.

mysql> SELECT PASSWORD('r4hasia');
+-------------------------------------------+
| PASSWORD('r4hasia')                       |
+-------------------------------------------+
| *7438236BE048F242AA18D2EE074296F078CD701A |
+-------------------------------------------+
1 row in set (0.00 sec)


Fungsi hashing ini dirancang untuk tidak bisa ditebak dari apa kata password ‘yang asli’ berasal. 

  • Cara Merubah dan Menghapus Password User MySQL

Cara Merubah Password User MySQL dari User Root

Jika user yang ‘lupa’ password bukan user root, maka  tinggal menimpa password lama dengan yang baru. Berikut adalah format dasar query yang digunakan:

SET PASSWORD FOR nama_user@'lokasi_user' = PASSWORD('password_baru');
  • nama_user adalah nama dari user yang akan diubah passwordnya.
  • lokasi_user adalah alamat IP dari user yang akan diubah passwordnya.
  • password_baru adalah password yang akan diberikan kepada nama_user.

Perhatikan bahwa kita menggunakan fungsi PASSWORD untuk membuat password baru.

Contoh merubah password ilkom_admin menjadi ‘54321’. Berikut query yang digunakan:

D:\MySQL\bin>mysql -uroot -p1234
 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
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 GRANTS FOR ilkom_admin@localhost \G
 
*************************** 1. row ***************************
Grants for ilkom_admin@localhost: GRANT USAGE ON *.*
TO 'ilkom_admin'@'localhost' IDENTIFIED BY PASSWORD
'*7438236BE048F242AA18D2EE074296F078CD701A'
 
*************************** 2. row ***************************
Grants for ilkom_admin@localhost: GRANT SELECT ON
`universitas`.`mahasiswa_ilkom` TO 'ilkom_admin'@'localhost'
2 rows in set (0.07 sec)
 
mysql> SET PASSWORD FOR ilkom_admin@'localhost' = PASSWORD('54321');
Query OK, 0 rows affected (0.00 sec)
 
mysql> SHOW GRANTS FOR ilkom_admin@localhost \G
 
*************************** 1. row ***************************
Grants for ilkom_admin@localhost: GRANT USAGE ON *.*
TO 'ilkom_admin'@'localhost' IDENTIFIED BY PASSWORD
'*B865CAE8F340F6CE1485A06F4492BB49718DF1EC'
 
*************************** 2. row ***************************
Grants for ilkom_admin@localhost: GRANT SELECT ON
`universitas`.`mahasiswa_ilkom` TO 'ilkom_admin'@'localhost'
2 rows in set (0.00 sec)

Setelah masuk sebagai root (baris…), periksa terlebih dahulu user ilkom_admin dengan query SHOW GRANTS FOR (baris …). Pada baris…, terdapat hasil hashing dari password ‘12345’ yang digunakan sebagai password pada waktu membuat user ilkom_admin. Hasil hashing inilah yang disimpan MySQL di dalam databasenya.

Pada baris ke… saya merubah password ilkom_admin menjadi ‘54321’. Lalu pada baris.. kembali memeriksa hasil hashing password dengan SHOW GRANTS FOR . Dan seperti yang terlihat, hasil hashing juga telah berubah yang menandakan pergantian password berhasil.

Cara Merubah Password User MySQL dari User itu Sendiri

Untuk merubah password dari user yang dilogin saat ini, bisa menggunakan perintah yang lebih sederhana:

SET PASSWORD=PASSWORD('the_password')

Berikut adalah contoh query dimana ingin login sebagai ilkom_admin dengan password ‘54321’ dan mengubahnya menjadi ‘6789:

D:\MySQL\bin>mysql -uilkom_admin -54321
 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
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> SET PASSWORD = PASSWORD('6789');
Query OK, 0 rows affected (0.00 sec)

Password baru tersebut akan aktif setelah user keluar dari sesi MySQL saat ini.

Cara Menghapus Password User MySQL

Jika yang diinginkan adalah menghapus password dari seorang user secara keseluruhan, maka cukup memberikan string kosong sebagai isian password.

SET PASSWORD FOR 'nama_user'@'lokasi_user' = ''

Contohkan ketika menghapus password untuk user ekonomi_admin melalui user root:

D:\MySQL\bin>mysql -uroot -p1234
 
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> SET PASSWORD FOR ekonomi_admin@'localhost' = '';
Query OK, 0 rows affected (0.00 sec)
 
mysql> SHOW GRANTS FOR ekonomi_admin@localhost \G
 
*************************** 1. row ***************************
Grants for ekonomi_admin@localhost: GRANT USAGE ON *.*
TO 'ekonomi_admin'@'localhost'
 
*************************** 2. row ***************************
Grants for ekonomi_admin@localhost: GRANT ALL PRIVILEGES ON
`universitas`.`mahasiswa_ekonomi` TO 'ekonomi_admin'@'localhost'
2 rows in set (0.00 sec)

Terlihat dari hasil SHOW GRANTS FOR, user ekonomi_admin tidak memiliki password, dan user tersebut dapat masuk kedalam MySQL tanpa password sama sekali.

Cara Membuat Password User MySQL, Sama Dengan User Lain

Walaupun tidak tahu password asli yang digunakan oleh user lain, namun jika yang diinginkan adalah membuat password yang sama dengan user lain, dapat menggunakan hasil hashing dari password user tersebut.

Berikut adalah format dasarnya:

SET PASSWORD FOR 'nama_user'@'lokasi_user' ='*nilai hashing';
  • nama_user adalah nama dari user yang akan diubah passwordnya.
  • lokasi_user adalah alamat IP dari user yang akan diubah passwordnya.
  • nilai_hashing adalah nilai dari fungsi hashing password user yang akan disamakan passwordnya.

Dari hasil SHOW GRANTS FOR untuk user ilkom_admin, mendapati hasil hashingnya adalah ‘*F366568C1E05004FD78F38B712C83917196C95D8’, dan nilai inilah yang akan dipakai untuk password user ekonomi_admin. Berikut query yang digunakan (dari user root):

mysql> SET PASSWORD FOR ekonomi_admin@'localhost'
'*F366568C1E05004FD78F38B712C83917196C95D8';
Query OK, 0 rows affected (0.00 sec)
 
mysql> exit
Bye
 
D:\MySQL\bin>mysql -uekonomi_admin -p6789
 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
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.

Karena user ilkom_admin baru diganti passwordnya menjadi 6789 maka dengan men-copy hasil hashing user ilkom_admin ke user ekonomi_admin, keduanya memiliki password yang sama, yaitu 54321.

  • Cara Mereset Password root (Lupa Password root MySQL)

Reset Password root MySQL dengan Opsi skip-grant-tables

Cara pertama yang akan digunakan untuk mereset user root MySQL adalah dengan menjalankan MySQL Server tanpa sistem manajemen user sama sekali. Dengan cara ini, user root dapat masuk tanpa password.

MySQL menyimpan hak akses dan password user di dalam database mysql. Database ini menyimpan data-data tentang setingan MySQL, termasuk data tentang userpassword dan hak aksesnya di dalam tabel mysql. Karena tabel mysql ini menyimpan tentang user dan hak aksesnya, maka disebut juga dengan Grant Tabel.

Cara yang akan dilakukan adalah menjalankan MySQL Server tanpa menggunakan database mysql ini. Yang berarti MySQL Server tidak dapat memeriksa setiap user, dan setiap user yang log in akan memiliki akses root!.

Langkah pertama untuk mereset password user root adalah menghentikan MySQL Server apabila masih berjalan. 

Cara paling cepat mematikan MySQL Server adalah dari menu task manager, pilih tab Procesess, cari mysqld.exe, klik kanan dan pilih menu end process.

Cara Menghentikan MySQL Server dari Task Manager

Selanjutnya akan menjalankan kembali MySQL Server (menggunakan mysqld), namun dengan perintah tambahan skip-grant-tables. Buka lokasi file mysqld melalui cmd, lalu jalankan perintah :

mysqld --skip-grant-tables

Berikut adalah tampilan cmd windows:

Menjalankan MySQL Server dengan opsi skip-grant-tables

Untuk memeriksa apakah MySQL Server telah berjalan, dapat dilihat dari task manager, pilih tab Procesess, dan jika ada mysqld.exe, berarti MySQL Server telah berjalan.

Saat ini MySQL Server telah berjalan dengan opsi skip-grant-tables, sehingga kita dapat masuk sebagai root tanpa password:


Segera setelah masuk sebagi root, langsung jalankan perintah untuk membuat password untuk user root. Karena masuk dengan opsi skip-grant-tables, maka  tidak bisa menjalankan cara membuat password, namun harus secara manual mengupdate tabel user pada database mysql.

Berikut query yang digunakan untuk update password root:

UPDATE mysql.user SET Password = PASSWORD('password_baru') WHERE User = 'root';

Perintah tersebut adalah query UPDATE yang biasa digunakan untuk mengupdate sebuah record atau baris, namun yang diupdate kali ini adalah tabel user pada database mysql.

Setelah perintah tersebut dijalankan, untuk merefresh tabel user, jalankan query:

FLUSH PRIVILEGES;

Perintah FLUSH PRIVILEGES digunakan untuk membuat MySQL Server mengupdate hak akses di tabel user. Lalu keluarlah dari MySQL.

Berikut query yang digunakan untuk mereset password root menjadi ‘123456’:

mysql> UPDATE mysql.user SET Password = PASSWORD('123456') WHERE User = 'root';
Query OK, 1 row affected (0.20 sec)
Rows matched: 1  Changed: 1  Warnings: 0
 
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.42 sec)
 
mysql> exit;
Bye

Setelah keluar dari MySQL Client, hentikan MySQL Server dari task manager dan jalankan MySQL Server seperti biasa.

Reset Password root MySQL dengan Opsi init-file

Cara kedua untuk mereset password user root MySQL adalah dengan menggunakan opsi init-file.

Opsi init-file digunakan untuk memerintahkan MySQL Server menjalankan sebuah file pada saat Server pertama kali dijalankan. Dan akan memanfaatkan fitur ini untuk mereset password root MySQL

Sebagai langkah pertama, akan membuat sebuah file text yang berisi perintah query MySQL untuk mereset password. Isi dari file text tersebut adalah:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('password_baru');

Perintah ini sama dengan query untuk mereset password user , namun kali ini user yang direset adalah root, dan ‘password_baru’ adalah password root yang diinginkan.

Contoh akan mereset password root menjadi ‘123456’, sehingga perintahnya adalah:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');

Satelah file ini sebagai ‘reset_password.sql’. Bisa menggunakan program notepad bawaan windows untuk menulisnya, namun pastikan akhiran dari file adalah ‘.sql’. Savelah file ini di lokasi yang bisa diakses MySQL, untuk contoh kali ini akan meletakkannya di dalam folder bin MySQL.

File reset_password di folder bin MySQL

Selanjutnya, hentikan MySQL Server jika masih berjalan. Lalu jalankan kembali MySQL Server, namun kali ini dengan opsi init-file=’lokasi_file_reset_password.sql’.

Karena menyimpan file reset_password di drive D:\MySQL\bin, maka lokasi_file_reset_password.sql adalah di “D:\MySQL\bin\reset_password.sql”. Berikut perintah untuk menjalankan MySQL Server dengan opsi init-file:

mysqld --init-file=D:\MySQL\bin\reset_password.sql

Menjalankan MySQL Server dengan opsi init-file

MySQL Server akan menjalankan file ‘reset_password.sql’ tersebut dan mereset password user root menjadi ‘123456’.

Untuk mencoba password root yang baru saja di reset, masuklah sebagai user root dengan password ‘123456’.

Jika anda berhasil masuk sebagai root, berarti reset password berhasil dijalankan.

Masuk sebagai root dengan opsi init-file

Sebagai langkah terakhir, hentikan MySQL Server dan hapus file reset_password.sql.

Memunculkan Simbol & Emoji Pada OS Mac

  Memunculkan Simbol & Emoji  1. Buka aplikasi Pages / Notes pada Macbook. 2. Klik pada Menubar Edit --> Pilih Emoji and Symbols a...