Perintah DCL mysql
Database

Belajar MySQL Dasar : Memahami perintah DCL

Data Control Language (DCL) adalah perintah SQL untuk kontrol dan permission database

Perintah DCL antara lain

GRANT  -> Memberikan hak akses / hak istemewa pengguna
REVOKE -> Menarik hak akses pengguna yang diberikan lewat perintah GRANT

#1 Perintah GRANT

Perintah GRANT memungkinkan pemberikan hak akses kepada pengguna

Tidak harus setiap pengguna database dapat mengakses seluruh data di database. Ada pengguna yang hanya dapat melakukan operasi di satu table saja. Bisa juga pengguna hanya dapat melakukan operasi SELECT saja tanpa bisa melakukan manipulasi data

Maka itulah diperlukan manajemen hak akses dengan GRANT

Sebelum kita menggunakan perintah GRANT terlebih dulu kita akan buat user di database dengan perintah

CREATE USER 'nama_user'@'localhost' IDENTIFIED BY 'password';

Note : untuk membuat user baru anda harus masuk sebagai root. Pahami cara masuk MySQL/MariaDB melalui terminal / command prompt menggunakan user root di Tutorial MySQL untuk pemula

Misal kita akan bikin user ngodingdata dengan password 12345

> CREATE USER 'ngodingdata'@'localhost' IDENTIFIED BY '12345';
Query OK, 0 rows affected (0.00 sec)

Login ke MySQL dengan username ngodingdata

$ ./mysql -u ngodingdata -p
 Enter password: 
 Welcome to the MariaDB monitor.  Commands end with ; or \g.
 Your MariaDB connection id is 209
 Server version: 10.1.38-MariaDB Source distribution
 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 MariaDB [(none)]>

Saat akan melihat list database, user ngodingdata tidak dapat melihat keseluruhan data (berbeda jika melihat database dengan akses root)

> show databases;
 +----------------------------+
 | Database                   |
 +----------------------------+
 | information_schema         |
 | test                       |
 | test_db_login              |
 | test_ecommerce_codeigniter |
 +----------------------------+

Saat akan membuat database akan ditolak juga

> CREATE DATABASE universitas;
ERROR 1044 (42000): Access denied for user 'ngodingdata'@'localhost' to database 'universitas'

Hal ini dikarenakan user ngodingdata tidak punya privilege terhadap database.

Mari kita beri akses dengan perintah GRANT melalui akses root dengan perintah

GRANT ALL PRIVILEGES ON * . * TO 'ngodingdata'@'localhost';

Tanda “ALL PRIVILEGES” dan asterik (*) artinya user ngodingdata diberi akses untuk melakukan semua operasi seperti menambah, mengubah atau menghapus data di semua table / database

Coba masuk kembali dengan user ngodingdata dan buatlah database / table baru maka tidak akan bermasalah lagi

Beberapa opsi perintah GRANT antara lain
TIPE IZINKETERANGAN
ALL PRIVILEGESMemberikan akses full
CREATEMemberikan akses membuat table / database
DROPMemberikan akses menghapus table / database
SELECTMemberikan akses menambah record di table
INSERTMemberikan akses merubah record di table
UPDATEMemberikan akses menghapus record di table
DELETEMemberikan akses menggunakan perintah SELECT

Cara menggunakannya adalah

GRANT tipe_izin ON nama_database.nama_table TO ‘nama_user’@'localhost’; 

Contoh GRANT SELECT

Masuk ke user root dan berikan hak akses SELECT saja untuk user ngodingdata

GRANT SELECT ON *.* TO 'ngodingdata'@'localhost';

Masuk ke user ngodingdata dan coba lakukan operasi SELECT dan INSERT

> SELECT * FROM mahasiswa;
+----------+-------+----------+
| nim      | nama  | alamat   |
+----------+-------+----------+
| 21400100 | faqih | bandung  |
| 21400201 | ina   | jakarta  |
| 21400202 | anto  | semarang |
| 21400203 | dani  | padang   |
+----------+-------+----------+
6 rows in set (0.00 sec)



> INSERT INTO mahasiswa values (222,"Jaka","Yogyakarta");
ERROR 1142 (42000): INSERT command denied to user 'ngodingdata'@'localhost' for table 'mahasiswa'

Operasi SELECT dibolehkan sedangkan operasi INSERT tidak bisa dilakukan

Contoh GRANT SELECT, INSERT, UPDATE, DELETE

Jika misalkan user hanya dibolehkan untuk melakukan perintah DML dan DQL tanpa akses merubah struktur table / database maka

GRANT SELECT,INSERT, UPDATE, DELETE ON *.* TO 'ngodingdata'@'localhost';

#2 Perintah REVOKE

Perintah REVOKE digunakan untuk mencabut kembali hak akses yang diberikan melalui perintah GRANT

Cara menggunakannya

REVOKE tipe_izin ON nama_database.nama_table FROM 'username'@'localhost';

Jika kita ingin menghapus akses INSERT di user ngodingdata untuk semua database dan table melalui root

 REVOKE INSERT ON *.* FROM 'ngodingdata'@'localhost';

Masuk menggunkan user ngodingdata dan coba masukkan record baru

> use universitas;
  Database changed
  
> INSERT INTO mahasiswa values (223,"Dika","Semarang");
  ERROR 1142 (42000): INSERT command denied to user 'ngodingdata'@'localhost' for table 'mahasiswa' 

Untuk mencabut seluruh hak akses user dapat menggunakan REVOKE ALL

REVOKE ALL ON nama_database.nama_table FROM 'username'@'localhost';

Materi MySQL dibagi menjadi beberapa artikel:

Cara Install XAMPP di Windows dan Linux
Belajar MySQL Dasar : Tutorial MySQL untuk Pemula
Belajar MySQL Dasar : Memahami perintah DDL
Belajar MySQL Dasar : Memahami perintah DML
Belajar MySQL Dasar : Memahami perintah DQL
Belajar MySQL Dasar : Memahami perintah DCL
Belajar MySQL Dasar : Memahami perintah TCL

Belajar MySQL Lanjut : Cara Menggunakan JOIN
Belajar MySQL Lanjut : Cara Membuat Stored Procedure
Belajar MySQL Lanjut : Cara Membuat VIEW
Belajar MySQL Lanjut : Cara Membuat TRIGGER
Belajar MySQL Lanjut : DDL MySQL dengan Python
Belajar MySQL Lanjut : DML MySQL dengan Python
Belajar MySQL Lanjut : DQL MySQL dengan Python

3 Comments

  1. Pembelajaran Basis data

  2. Tutorialnya bagus, sangat bermanfaat

  3. Terima kasih penjelasannya, sangat jelas

Leave a Reply

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