- Home »
- Hak Akses Previlege Mysql
// Unknown
// On-Kamis, 27 Agustus 2015
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.
Secara sekilas, kita telah membahas tentang pengertian hak akses (privileges) pada artikel Tutorial Belajar MySQL: Mengenal Superuser root dan Pengertian Privileges MySQL.
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 akses SELECT.
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.
Saya akan menggunakan contoh database universitas yang telah dibuat pada Tutorial Cara Membuat dan Menghapus User MySQL, jika anda ingin mengikuti contoh yang tersedia, silahkan buat database tersebut terlebih dahulu.
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.
1
2
3
4
5
6
| 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) |
Selanjutnya pada bagian kedua, kita memberikan hak akses dengan query GRANT pada untuk user ilkom_admin.
Perhatikan cara penulisan query GRANT tersebut, setelah keyword GRANT, diikuti dengan kata SELECT. SELECT disini adalah hak akses yang ingin di berikan kepada user, saya memberikan hak SELECT karena user admin saat ini hanya dapat melakukan perintah SELECT.
Setelah SELECT, diikuti dengan penulisan tabel yang diperbolehkan, yakni universitas.mahasiswa_ilkom (dibaca:tabel mahasiswa_ilkom pada database universitas). Bagian terakhir adalah user yang akan diberikan hak aksesnya, yakni ilkom_admin pada localhost.
Untuk mencoba user ilkom_admin, keluarlah dari root, dan masuk sebagai ilkom_admin:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| D:\MySQL\bin>mysql -u ilkom_admin -pr4hasiaWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 2Server 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 itsaffiliates. Other names may be trademarks of their respectiveowners.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 changedmysql> 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' |
Setelah menampilkan isi tabel mahasiswa_ilkom, user ilkom_admin mencoba menghapus tabel mahasiswa_ilkom. Tetapi karena kita membatasi hak aksesnya, ilkom_admin tidak dapat menjalankan query DELETE dan DROP, dan akan langsung ditolak oleh MySQL.
Cara Memberikan Hak Akses Untuk Seluruh Tabel
Sebagai contoh kedua, kali ini kita akan membuat user mahasiswa yang diberikan hak akses untuk dapat melihat seluruh tabel yang ada pada database universitas, berikut querynya:
1
2
3
4
5
| 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) |
Selanjutnya, kita akan mencoba menggunakan user mahasiswa untuk melihat database universitas:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| D:\MySQL\bin>mysql -u mahasiswa -pr4hasiaWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 3Server 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 itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> USE universitas;Database changedmysql> SHOW TABLES;+-----------------------+| Tables_in_universitas |+-----------------------+| mahasiswa_ekonomi || mahasiswa_ilkom |+-----------------------+2 rows in set (0.00 sec) |
Cara Memberikan Seluruh Hak Akses (query GRANT ALL)
Dari kedua contoh user sebelumnya, yakni user ilkom_admin dan mahasiswa, kita hanya menggunakan hak akses SELECT. Kali ini kita akan memberikan hak akses penuh kepada user ekonomi_admin, dengan query GRANT ALL. Berikut querynya:
1
2
3
4
5
6
| mysql> CREATE USER 'ekonomi_admin'@'localhost' IDENTIFIED BY 'r4hasia';Query OK, 0 rows affected (0.00 sec)mysql> GRANT ALL ON universitas.mahasiswa_ekonomiTO 'ekonomi_admin'@'localhost';Query OK, 0 rows affected (0.00 sec) |
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:
1
2
3
4
5
6
| 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) |
Untuk mengujinya, masuklah sebagai user tamu_ilkom:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| D:\MySQL\bin>mysql -u tamu_ilkomWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 4Server 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 itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> USE universitas;Database changedmysql> 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) |
Diberdayakan oleh Blogger.