Skip to content

Commit

Permalink
feat: Menambahkan materi Data control language (#52)
Browse files Browse the repository at this point in the history
* feat: Menambah Query Grant

* feat:Menambah query grant dan revoke

* fix: memperbaiki typo pada penulisan

* fix: Codacy Production rules

* fix: Codacy Production rules

Co-authored-by: Aditya Fitriana NS <[email protected]>
  • Loading branch information
fairusatoir and AdityaFitrianaNS authored Jan 5, 2022
1 parent 44788bd commit 59bd9f3
Show file tree
Hide file tree
Showing 2 changed files with 214 additions and 0 deletions.
106 changes: 106 additions & 0 deletions Basic/04_Data_Control_Language/1_Menerima_Akses/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# Memberi Privileges

> GRANT merupakan perintah untuk memberikan Hak Istimewa (Privileges) kepada User yang ada di MySQL agar dapat mengakses objek yang ada di database.
Secara default yang dapat memberi Hak Istimewa (_Privileges_) kepada user lain adalah user `root` (Super User) karena secara default user `root` memiliki semua _Privileges_.

_Privileges_ yang bisa diberikan adalah :

| _Privileges_ | Diskripsi |
| ------------ | ------------------------------------------------------ |
| SELECT | Hak untuk Menampilkan data yang sudah ada |
| INSERT | Hak untuk memasukan data |
| UPDATE | Hak untuk mengubah data yang sudah ada |
| DELETE | Hak untuk menghapus data yang sudah ada |
| INDEX | Hak untuk membuat atau menghapus Index |
| CREATE | Hak untuk membuat tabel baru |
| ALTER | Hak untuk mengubah tabel yang sudah ada |
| DROP | Hak untuk menghapus tabel yang sudah ada |
| GRANT OPTION | Hak untuk memberi atau mencabut akses kepada User lain |
| ALL | Semua Hak _Privileges_ |

## Sintak

```sql
GRANT hak_akses ON nama_objek TO user;
```

Selalu simpan perubahan yang dilakukan dengan sintak :

```sql
FLUSH Privileges;
```

## Query

Untuk contoh di materi ini, saya menggunakan :

User : `bell_user`

Database : `Sekolah`

tabel : `Siswa`

### Membuat User Baru

```sql
CREATE USER 'bell_user'@'localhost' IDENTIFIED BY 'password';
```

**User** baru yang baru dibuat tidak memiliki _Privileges_ sama sekali.

Sehingga jika menjalankan `SELECT * FROM Siswa` akan mengeluarkan error

> SELECT command denied to user 'bell_user'@'localhost' for table 'Siswa'
### Memberi satu Privileges saja

Memberikan satu _Privileges_ (`SELECT` dan `INSERT`) ke User `bell_user` terhadap semua objek didalam database `Sekolah`

```sql
GRANT SELECT ON Sekolah.* TO 'bell_user'@'localhost';

GRANT INSERT ON Sekolah.* TO 'bell_user'@'localhost';
```

### Memberi dua atau lebih Privileges

Memberikan 2 atau lebih _Privileges_ ke User `bell_user` terhadap semua objek didalam database `Sekolah`.

```sql
GRANT SELECT,INSERT,CREATE ON Sekolah.* TO 'bell_user'@'localhost';
```

### Memberi Privileges terhadap 1 Kolom

_Privileges_ juga bisa diatur untuk hanya bisa mengakses beberapa kolom (`id`,`name`) dari tabel `Siswa` yang ada didalam database `Sekolah`

Untuk Query nya, nama kolom ditulis di sebelah _Privileges_ dan didalam kurung `()`

```sql
GRANT SELECT(id,name) ON Sekolah.Siswa TO 'bell_user'@'localhost';
```

### Memberikan Semua Privileges terhadap 1 Tabel

Memberikan semua _Privileges_ ke tabel `Siswa` di dalam database `Sekolah`

```sql
GRANT ALL ON Sekolah.Siswa TO 'bell_user'@'localhost';
```

### Memberikan Semua Privileges terhadap 1 database

Memberikan semua _Privileges_ ke database `Sekolah`

```sql
GRANT ALL ON Sekolah TO 'bell_user'@'localhost';
```

### Membuat Super User

Membuat user baru yang memiliki semua _Privileges_ seperti user `root`.

```sql
GRANT ALL ON * . * TO 'bell_user'@'localhost';
```
108 changes: 108 additions & 0 deletions Basic/04_Data_Control_Language/2_Menolak_Akses/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Mencabut Privileges

> REVOKE merupakan perintah untuk mencabut Hak Istimewa (Privileges) dari User yang ada di MySQL agar tidak dapat mengakses objek yang ada di database.
Secara default yang dapat mencabut Hak Istimewa (_Privileges_) dari user lain adalah user `root` (Super User) karena secara default user `root` memiliki semua _Privileges_.

**Sebisa mungkin jangan mencabut _Privileges_ dari user** `root`

_Privileges_ yang bisa dicabut adalah :

| _Privileges_ | Deskripsi |
| ------------ | ------------------------------------------------------ |
| SELECT | Hak untuk Menampilkan data yang sudah ada |
| INSERT | Hak untuk memasukan data |
| UPDATE | Hak untuk mengubah data yang sudah ada |
| DELETE | Hak untuk menghapus data yang sudah ada |
| INDEX | Hak untuk membuat atau menghapus Index |
| CREATE | Hak untuk membuat tabel baru |
| ALTER | Hak untuk mengubah tabel yang sudah ada |
| DROP | Hak untuk menghapus tabel yang sudah ada |
| GRANT OPTION | Hak untuk memberi atau mencabut akses kepada User lain |
| ALL | Semua Hak _Privileges_ |

## Syntax

```sql
REVOKE hak_akses ON nama_objek FROM user;
```

Selalu simpan perubahan yang dilakukan dengan sintak :

```sql
FLUSH Privileges;
```

## Syntak Query

Untuk contoh di materi ini, saya menggunakan :

User : `bell_user`

Database : `Sekolah`

Tabel : `Siswa`

### Mencabut satu Privileges saja

Mencabut satu _Privileges_ (`SELECT` dan `INSERT`) dari User `bell_user` terhadap semua objek didalam database `Sekolah`

```sql
REVOKE SELECT ON Sekolah.* FROM 'bell_user'@'localhost';

REVOKE INSERT ON Sekolah.* FROM 'bell_user'@'localhost';
```

Setelah mencabut _Privileges_, jika menjalankan `SELECT * FROM Siswa` akan mengeluarkan error

> SELECT command denied to user 'bell_user'@'localhost' for table 'Siswa'
> INSERT command denied to user 'bell_user'@'localhost' for table 'Siswa'
### Mencabut dua atau lebih Privileges

Mencabut 2 atau lebih _Privileges_ (`SELECT` dan `INSERT`) dari User `bell_user` ke terhadap semua objek didalam database `Sekolah`.

```sql
REVOKE SELECT,INSERT ON Sekolah.* FROM 'bell_user'@'localhost';
```

### Mencabut Privileges terhadap 1 Kolom

Pencabutan _Privileges_ juga bisa diatur hanya untuk beberapa kolom (`id`) di tabel `siswa` yang ada didalam database `Sekolah`

Untuk Query nya, nama kolom ditulis di sebelah _Privileges_ dan didalam kurung `()`

```sql
REVOKE SELECT(id) ON Sekolah.Siswa FROM 'bell_user'@'localhost';
```

Sehingga saat menjalankan `SELECT * FROM Siswa` akan mengeluarkan error karena tidak memiliki _Privileges_ untuk melihat kolom `id` di kolom `Siswa`

> SELECT command denied to user 'bell_user'@'localhost' for column 'id' in table 'Siswa'
### Mencabut Semua Privileges terhadap 1 Tabel

Mencabut semua _Privileges_ dari tabel `Siswa` di dalam database `Sekolah`

```sql
REVOKE ALL ON Sekolah.Siswa FROM 'bell_user'@'localhost';
```

### Mencabut Semua Privileges terhadap 1 database

Mencabut semua _Privileges_ dari database `Sekolah`

```sql
REVOKE ALL ON Sekolah FROM 'bell_user'@'localhost';
```

### Mencabut Semua Hak Akses

Mencabut semua _Privileges_ yang dimiliki user `bell_user`.

Sebisa mungkin **jangan** melakukan **Pencabutan Semua Hak Akses** dari user `root`

```sql
REVOKE ALL ON * . * FROM 'bell_user'@'localhost';
```

0 comments on commit 59bd9f3

Please sign in to comment.