Section Artikel
Data Control Language (DCL) adalah salah satu dari kelompok perintah SQL yang digunakan untuk melakukan kontrol terhadap privilege atau hak akses khusus untuk berinteraksi dengan database. Hak akses khusus ini diperlukan sebagai prasyarat bagi setiap user database untuk melakukan berbagai aksi di database, seperti: membuat object, menghapus object, mengubah object, menampilkan hasil query, dan seterusnya.
Sederhananya, setiap pengguna database hanya dapat melakukan aksi-aksi yang sudah diberikan oleh user dengan kontrol tertinggi di dalam database tersebut. Misalnya, pengguna A hanya diberikan akses untuk membuat dan menampilkan sesuatu di database. Maka, pengguna tersebut hanya dapat melakukan perintah tersebut saja, tidak bisa melakukan ubah data, hapus data, dan seterusnya. Hal ini menjadi penting untuk diketahui karena di dalam dunia kerja dengan banyak pengguna database, manajemen pembagian hak akses seperti ini sangat krusial dan berpengaruh terhadap integritas dan keamanan data.
Berikut ini adalah beberapa perintah DCL:
Perintah Grant digunakan untuk memberikan hak akses khusus kepada user untuk melakukan aksi tertentu pada object tertentu di database.
Sintaks:
GRANT tipe_privilege
ON nama_objek
TO nama_pengguna;
Keterangan:
Berikut ini adalah beberapa contoh tipe privilege:
Tipe Privilege | Keterangan |
---|---|
ALL PRIVILEGE | Memberikan seluruh akses secara penuh (full access) |
CREATE | Memberikan hak akses untuk membuat database atau objek database |
DROP | Memberikan hak akses untuk menghapus database atau objek database |
SELECT | Memberikan hak akses untuk melakukan query ke database |
INSERT | Memberikan hak akses untuk menambahkan record / data baru ke tabel |
UPDATE | Memberikan hak akses untuk mengubah record / data di tabel |
DELETE | Memberikan hak akses untuk menghapus record / data di tabel |
Sebelum menggunakan perintah Grant, pertama buat user baru terlebih dahulu di database menggunakan sintaks di bawah ini:
CREATE USER 'nama_user'@'localhost' IDENTIFIED BY 'password';
Sebagai catatan, sebelum membuat user baru, masuklah terlebih dahulu sebagai user root dengan menggunakan perintah:
mysql -u root
USE mysql
Setelah itu kita akan membuat user baru dengan nama ‘DosenIT‘ dengan password ‘dosenit.com‘. Gunakan perintah di bawah ini:
CREATE USER 'DosenIT'@'localhost' IDENTIFIED BY 'dosenit.com';
Asumsikan bahwa kita akan memberikan akses database kepada user tersebut. Misalnya kita akan membuat database bernama “db_kampus”.
CREATE DATABASE db_kampus;
Setelah database-nya berhasil dibuat, langkah selanjutnya adalah memberikan akses tersebut kepada user tersebut. Untuk keperluan tersebut, kita dapat menggunakan perintah GRANT mengikuti sintaks yang telah dijabarkan di atas. Misalnya saat ini kita hanya akan memberikan hak akses untuk membuat, menambahkan, dan melakukan query terhadap objek-objek di database “db_kampus”. Maka gunakanlah perintah di bawah ini:
GRANT CREATE, INSERT, SELECT ON db_kampus.* TO 'DosenIT'@'localhost'; FLUSH PRIVILEGES;
Sebagai catatan, perintah FLUSH PRIVILEGES digunakan setiap kali selesai memberikan atau menarik kembali hak akses user.
Setelah itu, mari kita login kembali ke mysql menggunakan akun baru tersebut. Lakukan dengan menggunakan perintah di bawah ini:
mysql -u DosenIT -p
-- masukkan password
USE db_kampus;
Setelah berhasil masuk dan menggunakan database db_kampus, cobalah perintah-perintah yang berhubungan dengan CREATE, INSERT, dan SELECT. Silakan kreasikan sebebas mungkin yang Anda inginkan. Anda juga boleh menggunakan perintah-perintah di bawah ini untuk bahan uji coba.
-- membuat tabel mahasiswa CREATE TABLE mahasiswa( id INT AUTO_INCREMENT PRIMARY KEY, nim VARCHAR(12) UNIQUE NOT NULL, nama VARCHAR(30) ); -- memasukkan data mahasiswa ke tabel INSERT INTO mahasiswa VALUES (NULL, '2000001', 'Satoshi'), (NULL, '2000002', 'Serena'); -- melakukan query semua data di tabel mahasiswa SELECT * FROM mahasiswa;
Perintah-perintah yang berhubungan dengan CREATE, INSERT, dan SELECT akan berhasil dieksekusi di user ini dikarenakan telah diberikan akses sebelumnya oleh user root menggunakan perintah GRANT. Tetapi bagaimana dengan UPDATE, DELETE, dan lainnya yang tidak didefinisikan sebelumnya? Silakan dicoba menggunakan kreasi perintah sendiri atau menggunakan contoh di bawah ini.
-- mengubah nama mahasiswa UPDATE mahasiswa SET nama = 'Serena Kalos Queen' WHERE nim = '2000002'; -- menghapus data mahasiswa DELETE FROM mahasiswa WHERE nim = '2000001';
Bagaimana hasilnya? Tentunya kita akan mendapatkan pesan error seperti gambar di bawah ini.
Perintah Revoke digunakan untuk menarik kembali / mencabut / membatalkan hak akses khusus yang sebelumnya telah diberikan melalui perintah Grant.
Sintaks:
REVOKE tipe_privilege
ON nama_objek
FROM nama_pengguna;
Untuk contoh penggunaannya, mari kita tarik kembali hak akses SELECT dari user DosenIT.
REVOKE SELECT ON db_kampus.* FROM 'DosenIT'@'localhost'; FLUSH PRIVILEGES;
Setelah mengeksekusi perintah di atas, seharusnya saat ini user DosenIT sudah tidak dapat menggunakan perintah SELECT. Perhatikan gambar di bawah ini.
Hal ini berlaku untuk semua perintah yang lain. Selamat mencoba dan mengkreasikan sendiri.
Pembahasan yang ada pada tulisan ini hanya mengakomodasi basic dari Data Control Language (DCL). Akan tetapi, walaupun dikategorikan sebagai basic, tulisan ini cukup baik untuk pijakan awal atau refresh untuk semua pihak dalam rangka mengetahui manajemen akun pengguna di MySQL database beserta perintah dasar DCL. Keep up the good work!