Cara Membuat Hak Akses (Privileges) User MySQL (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 universitas yang telah kita buat, terdapat 2 buah tabel, yakni mahasiswa_ilkomdan mahasiswa_ekonomi.

Misalkan kita membuat user mahasiswa. User mahasiswa ini hanya diberikan hak akses untuk melihat-lihat data tabel mahasiswa_ilkom dan mahasiswa_ekonomi, namun tidak bisa merubah apapun di dalam tabel tersebut. Di dalam MySQL, user mahasiswa ini hanya kita berikan hak aksesSELECT.

Contoh lainnya, untuk keperluan administrasi, user ilkom_admin sebagai administrator akan diberikan hak akses untuk dapat menginput data dan merubah data dari tabel mahasiswa_ilkom. Tetapi , user ilkom_admin tidak bisa melihat dan merubah tabel mahasiswa_ekonomi, karena hak akses itu seharusnya diberikan kepada ekonomi_admin.

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 kita ingin memberikan hak penuh untuk semua query dasar tersebut, hak_akses ini bisa diisi dengan ALL.
  • nama_database adalah nama database yang ingin diberikan hak akses. Jika kita mengizinkan user tersebut dapat mengakses semua database yang ada, nama_database bisa ditulis dengan tanda bintang (*).
  • nama_tabel adalah nama tabel yang ingin diberikan hak akses. Jika kita mengizinkan user dapat menggunakan semua  tabel, nama_tabel bisa ditulis dengan tanda bintang (*).
  • nama_user adalah nama dari user yang akan diberikan hak akses.
  • lokasi_user adalah alamat IP dari user yang ingin diberikan hak akses.

Sebagai contoh penggunaan query GRANT, misalkan kita ingin memberikan privileges kepadailkom_admin untuk dapat melihat (melakukan query SELECT) pada tabel mahasiswa_ilkom yang berada pada database universitas, maka berikut query yang kita gunakan:

mysql> CREATE USER 'ilkom_admin'@'localhost' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.52 sec)

mysql> GRANT SELECT ON universitas.mahasiswa_ilkom TO 
'ilkom_admin'@'localhost';
Query OK, 0 rows affected (0.12 sec)

Query diatas terdiri dari 2 bagian, pada bagian pertama kita membuat user ilkom_admin yang harus diakses dari komputer localhost (komputer yang sama dengan server MySQL berada), dan memberikan password ‘r4hasia’. Cara membuat user telah kita bahas pada tutorial sebelumnya, Cara Membuat dan Menghapus User MySQL (CREATE USER).

Selanjutnya pada bagian kedua, kita memberikan hak akses dengan query GRANT pada untuk userilkom_admin.

Perhatikan cara penulisan query GRANT tersebut, setelah keyword GRANT, diikuti dengan kataSELECT. SELECT disini adalah hak akses yang ingin di berikan kepada user, saya memberikan hakSELECT karena user admin saat ini hanya dapat melakukan perintah SELECT.

Setelah SELECT, diikuti dengan penulisan tabel yang diperbolehkan, yakniuniversitas.mahasiswa_ilkom (dibaca:tabel mahasiswa_ilkom pada database universitas). Bagian terakhir adalah user yang akan diberikan hak aksesnya, yakni ilkom_admin pada localhost.

Untuk mencoba user ilkom_admin, keluarlah dari root, dan masuk sebagai ilkom_admin:

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

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2

Server version: 5.5.27 MySQL Community Server (GPL)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| universitas        |
+--------------------+
2 rows in set (0.00 sec)

mysql> USE universitas;
Database changed

mysql> SHOW TABLES;
+-----------------------+
| Tables_in_universitas |
+-----------------------+
| mahasiswa_ilkom       |
+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM mahasiswa_ilkom;
+-----------+-----------------+------+--------------+------+
| nim       | nama            | umur | tempat_lahir | IPK  |
+-----------+-----------------+------+--------------+------+
| 089045001 | Andi Suryo      |   23 | Jakarta      | 2.70 |
| 109245021 | Santi Syanum    |   21 | Malang       | 3.20 |
| 099145055 | Neil Situmorang |   22 | Medan        | 1.90 |
+-----------+-----------------+------+--------------+------+
3 rows in set (0.07 sec)

mysql> DELETE FROM mahasiswa_ilkom WHERE nama="Andi Suryo";
ERROR 1142 (42000): DELETE command denied to user
'ilkom_admin'@'localhost' fortable 'mahasiswa_ilkom'

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

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

Setelah menampilkan isi tabel mahasiswa_ilkom,  user ilkom_admin mencoba menghapus tabelmahasiswa_ilkom. Tetapi karena kita membatasi hak aksesnya, ilkom_admin tidak dapat menjalankan query DELETE dan DROP, dan akan langsung ditolak oleh MySQL.


Cara Memberikan Hak Akses Untuk Seluruh Tabel

Sebagai contoh kedua, kali ini kita akan membuat user mahasiswa yang diberikan hak akses untuk dapat melihat seluruh tabel yang ada pada database universitas, berikut querynya:

mysql> CREATE USER 'mahasiswa'@'localhost' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT SELECT ON universitas.* TO 'mahasiswa'@'localhost';
Query OK, 0 rows affected (0.00 sec)

Pembuatan user mahasiswa ini hampir sama dengan perintah saat membuat user ilkom_admin. Kecuali kali ini untuk penulisan tabel kita menggunakan format universitas.* yang berarti dapat mengakses seluruh tabel pada database universitas.

Selanjutnya, kita akan mencoba menggunakan user mahasiswa untuk melihat databaseuniversitas:

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

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 kita membuat sebuah tabel baru dalam database universitas, usermahasiswa juga akan bisa melihatnya.


Cara Memberikan Seluruh Hak Akses (query GRANT ALL)

Dari kedua contoh user sebelumnya, yakni user ilkom_admin dan mahasiswa, kita hanya menggunakan hak akses SELECT. Kali ini kita akan memberikan hak akses penuh kepada userekonomi_admin, dengan query GRANT ALL. Berikut querynya:

mysql> CREATE USER 'ekonomi_admin'@'localhost' IDENTIFIED BY 'r4hasia';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL ON universitas.mahasiswa_ekonomi
TO 'ekonomi_admin'@'localhost';
Query OK, 0 rows affected (0.00 sec)

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


Cara Memberikan Hak Akses MySQL Pada Level Kolom

Untuk keperluan yang lebih spesifik, hak akses dapat juga dibatasi hanya untuk kolom tertentu. Hal ini bisa didasarkan bahwa terdapat sebuah kolom yang dirasakan rahasia, dan tidak boleh diketahui user tersebut.

Misalkan kita membuat user tamu_ilkom yang hanya dapat melihat nama dan umur mahasiswa pada tabel mahasiswa_ilkom, dan merahasiakan kolom lainnya seperti alamat dan IPK, maka berikut querynya:

mysql> CREATE USER 'tamu_ilkom'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT SELECT (nama,umur) ON universitas.mahasiswa_ilkom 
TO 'tamu_ilkom'@'localhost';
Query OK, 0 rows affected (0.00 sec)

Perhatikan cara penulisan kolom yang diberikan hak aksesnya, setelah hak akses (dalam contoh adalah SELECT), penulisan nama kolom harus berada dalam tanda kurung. Dapat dilihat bahwa kita memberikan hak akses hanya pada kolom nama dan umur untuk tabel mahasiswa_ilkom.

Untuk mengujinya, masuklah sebagai user tamu_ilkom:

D:\MySQL\bin>mysql -u tamu_ilkom

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4

Server version: 5.5.27 MySQL Community Server (GPL)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> USE universitas;
Database changed

mysql> SHOW TABLES;
+-----------------------+
| Tables_in_universitas |
+-----------------------+
| mahasiswa_ilkom       |
+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM mahasiswa_ilkom;
ERROR 1143 (42000): SELECT command denied to user 'tamu'@'localhost' 
for column 'nim' in table 'mahasiswa_ilkom'

mysql> SELECT nama,umur FROM mahasiswa_ilkom;
+-----------------+------+
| nama            | umur |
+-----------------+------+
| Andi Suryo      |   23 |
| Santi Syanum    |   21 |
| Neil Situmorang |   22 |
+-----------------+------+
3 rows in set (0.00 sec)

Pada saat user tamu_ilkom mencoba menampilkan seluruh kolom dengan query SELECT * FROM mahasiswa_ilkom, MySQL akan mengeluarkan error karena user tamu_ilkom hanya memiliki hak akses untuk kolom nama dan umur saja, dimana pada saat menggunakan perintah SELECT nama,umur FROM mahasiswa_ilkom, MySQL menampilkannya dengan baik.


 

Dari tutorial Cara Membuat Hak Akses (Privileges) User MySQL dengan query GRANT ini, kita telah mempelajari cara memberikan hak akses untuk user. Hak akses itu sendiri sebenarnya dapat dibatasi pada 4 tingkatan level, yakni level global, level database, level tabel, dan level kolom. Pada tutorial diatas, kita telah mencoba level database, tabel dan kolom,

sumber : klik disini

Pos ini dipublikasikan di database. Tandai permalink.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s