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: