Categories
Tutorial, Manual, Tips dan Trik

Membatasi Hak Akses User MySQL Pada Level Basis Data, Tabel, Kolom dan Baris

Daftar Isi

Simulasi

Simulasi ini dijalankan secara berurutan, tidak bisa dibolak-balik.

Persiapan Data

Login sebagai admin_

Memasukkan data awal di tabel informasi dan pembayaran.

INSERT INTO `db`.`informasi` (`informasi`) VALUES ('john giro1,giro2');
INSERT INTO `db`.`informasi` (`informasi`) VALUES ('paimo giro1,giro3');

INSERT INTO `db`.`pembayaran` (`kodebilling`, `nama`, `statustagihan`, `norekening`, `nominal`) VALUES ('123456789', 'Fulan', 'tagihan', 'giro1', '100000');
INSERT INTO `db`.`pembayaran` (`kodebilling`, `nama`, `statustagihan`, `norekening`, `nominal`) VALUES ('987654321', 'Juan Dela Cruz', 'tagihan', 'giro1,giro3', '150000');
INSERT INTO `db`.`pembayaran` (`kodebilling`, `nama`, `statustagihan`, `norekening`, `nominal`) VALUES ('111222333', 'Max Mustermann', 'tagihan', 'giro1,giro2', '200000');
INSERT INTO `db`.`pembayaran` (`kodebilling`, `nama`, `statustagihan`, `norekening`, `nominal`) VALUES ('333222111', 'Jean Dupont', 'tagihan', 'giro2', '250000');
INSERT INTO `db`.`pembayaran` (`kodebilling`, `nama`, `statustagihan`, `norekening`, `nominal`) VALUES ('123123123', 'Tan Ah Beng', 'tagihan', 'giro3', '300000');

Uji Keamanan

Login sebagai john

mysql> select * from db.informasi;
+-------------+-------------------+
| idinformasi | informasi         |
+-------------+-------------------+
|           1 | john giro1,giro2  |
|           2 | paimo giro1,giro3 |
+-------------+-------------------+
2 rows in set (0.03 sec)

mysql> select * from db.pembayaran;
ERROR 1143 (42000): SELECT command denied to user 'john'@'1.2.3.4' for column 'idpembayaran' in table 'pembayaran'

mysql> select * from db.viewpembayaran;
ERROR 1143 (42000): SELECT command denied to user 'john'@'1.2.3.4' for column 'idpembayaran' in table 'viewpembayaran'

mysql> update db.pembayaran set statustagihan='lunas' where kodebilling="111222333";
ERROR 1142 (42000): UPDATE command denied to user 'john'@'1.2.3.4' for table 'pembayaran'

mysql> update db.viewpembayaran set statustagihan='lunas' where kodebilling="333222111";
ERROR 1142 (45000): An error occurred. Permission denied.

Uji menunjukkan bahwa pengguna john tidak dapat

  • menampilkan data dari db.pembayaran
  • menampilkan semua kolom dari db.viewpembayaran
  • memperbarui tabel db.pembayaran
  • memperbarui tabel db.viewpembayaran yang nomor rekeningnya tidak sesuai dengan dirinya (bukan giro1 atau giro2)

Uji menunjukkan bahwa pengguna john dapat menampilkan data dari db.informasi.

Uji Data Awal

Login sebagai admin_

mysql> select kodebilling, statustagihan, norekening, pengguna from db.pembayaran;
+-------------+---------------+-------------+----------+
| kodebilling | statustagihan | norekening  | pengguna |
+-------------+---------------+-------------+----------+
| 123456789   | tagihan       | giro1       | NULL     |
| 987654321   | tagihan       | giro1,giro3 | NULL     |
| 111222333   | tagihan       | giro1,giro2 | NULL     |
| 333222111   | tagihan       | giro2       | NULL     |
| 123123123   | tagihan       | giro3       | NULL     |
+-------------+---------------+-------------+----------+
5 rows in set (0.03 sec)

Hanya empat baris yang dapat dibaca oleh pengguna john, yaitu dengan rekening giro1 dan giro2, serta pengguna john atau null. Hanya empat baris yang dapat dibaca oleh pengguna paimo, yaitu dengan rekening giro1 dan giro3, serta pengguna paimo atau null.

Login sebagai john

mysql> select kodebilling, nama, statustagihan, norekening from db.viewpembayaran;
+-------------+----------------+---------------+-------------+
| kodebilling | nama           | statustagihan | norekening  |
+-------------+----------------+---------------+-------------+
| 123456789   | Fulan          | tagihan       | giro1       |
| 987654321   | Juan Dela Cruz | tagihan       | giro1,giro3 |
| 111222333   | Max Mustermann | tagihan       | giro1,giro2 |
| 333222111   | Jean Dupont    | tagihan       | giro2       |
+-------------+----------------+---------------+-------------+
4 rows in set (0.03 sec)

Dari data awal benar bahwa hanya empat baris yang dapat dibaca oleh pengguna john, yaitu dengan rekening giro1 dan giro2.

Login sebagai paimo

mysql> select kodebilling, nama, statustagihan, norekening from db.viewpembayaran;
+-------------+----------------+---------------+-------------+
| kodebilling | nama           | statustagihan | norekening  |
+-------------+----------------+---------------+-------------+
| 123456789   | Fulan          | tagihan       | giro1       |
| 987654321   | Juan Dela Cruz | tagihan       | giro1,giro3 |
| 111222333   | Max Mustermann | tagihan       | giro1,giro2 |
| 123123123   | Tan Ah Beng    | tagihan       | giro3       |
+-------------+----------------+---------------+-------------+
4 rows in set (0.03 sec)

Dari data awal benar bahwa hanya empat baris yang dapat dibaca oleh pengguna paimo, yaitu dengan rekening giro1 dan giro3.

Uji Update Data

Login sebagai john

mysql> update db.viewpembayaran set statustagihan='lunas' where kodebilling="111222333";
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select kodebilling, nama, statustagihan, norekening from db.viewpembayaran;
+-------------+----------------+---------------+-------------+
| kodebilling | nama           | statustagihan | norekening  |
+-------------+----------------+---------------+-------------+
| 123456789   | Fulan          | tagihan       | giro1       |
| 987654321   | Juan Dela Cruz | tagihan       | giro1,giro3 |
| 111222333   | Max Mustermann | lunas         | giro1,giro2 |
| 123123123   | Tan Ah Beng    | tagihan       | giro3       |
+-------------+----------------+---------------+-------------+
4 rows in set (0.03 sec)

Proses pembaruan data berhasil untuk salah satu data yang tampil untuk pengguna john dan statustagihan berubah menjadi lunas. Baris yang diubah adalah data yang dapat dilihat oleh pengguna john dan paimo dan seharusnya baris tersebut tidak dapat dilihat oleh pengguna paimo setelah diubah.

Login sebagai paimo

mysql> select kodebilling, nama, statustagihan, norekening from db.viewpembayaran;
+-------------+----------------+---------------+-------------+
| kodebilling | nama           | statustagihan | norekening  |
+-------------+----------------+---------------+-------------+
| 123456789   | Fulan          | tagihan       | giro1       |
| 987654321   | Juan Dela Cruz | tagihan       | giro1,giro3 |
| 333222111   | Jean Dupont    | tagihan       | giro2       |
+-------------+----------------+---------------+-------------+
3 rows in set (0.03 sec)

Benar bahwa baris yang diubah oleh pengguna john tidak dapat dilihat oleh paimo karena baris tersebut sudah menjadi milik john.

Login sebagai admin_

mysql> select kodebilling, statustagihan, norekening, pengguna from db.pembayaran;
+-------------+---------------+-------------+----------+
| kodebilling | statustagihan | norekening  | pengguna |
+-------------+---------------+-------------+----------+
| 123456789   | tagihan       | giro1       | NULL     |
| 987654321   | tagihan       | giro1,giro3 | NULL     |
| 111222333   | lunas         | giro1,giro2 | paimo    |
| 333222111   | tagihan       | giro2       | NULL     |
| 123123123   | tagihan       | giro3       | NULL     |
+-------------+---------------+-------------+----------+
5 rows in set (0.03 sec)

Empat baris yang dapat dibaca oleh pengguna john, yaitu dengan rekening giro1 dan giro2, serta pengguna john atau null. Tiga baris yang dapat dibaca oleh pengguna paimo, yaitu dengan rekening giro1 dan giro3, serta pengguna paimo atau null.

Demikian, semoga bermanfaat. [bst]

Sumber:

By basit

Biro Pengembangan Teknologi Dan Sistem Informasi

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.