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 IZIN | KETERANGAN |
ALL PRIVILEGES | Memberikan akses full |
CREATE | Memberikan akses membuat table / database |
DROP | Memberikan akses menghapus table / database |
SELECT | Memberikan akses menambah record di table |
INSERT | Memberikan akses merubah record di table |
UPDATE | Memberikan akses menghapus record di table |
DELETE | Memberikan 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
Pembelajaran Basis data
Tutorialnya bagus, sangat bermanfaat
Terima kasih penjelasannya, sangat jelas