Skip to main content

Command Palette

Search for a command to run...

Cara Membuat User dan Memberikan Hak Akses di MySQL

Updated
7 min read
Cara Membuat User dan Memberikan Hak Akses di MySQL
F

Web Artisan

mengapa kita perlu membuat user baru setelah kita menginstall mysql? padahal sudah terdapat user root.

Meskipun sudah terdapat user root yang memiliki akses penuh ke MySQL, tetapi sangat tidak direkomendasikan untuk menggunakannya secara rutin. Hal ini disebabkan karena user root memiliki hak akses yang lebih luas serta dan kontrol penuh pada server mysql. dan hal ini bisa menyebabkan kerusakan jika tidak di gunakan dengan benar atau berbahaya jika di salahgunakan oleh pihak lain.

maka dari itu sangat di rekomendasikan untuk membuat user baru dengan hak akses yang sesuai dengan tugas atau pengguna.

Menampilkan daftar user

didalam mysql terdapat sebuah table bernama user. table ini ada di dalam database mysql.

jika anda tidak percaya coba jalankan query berikut untuk menampilkan daftar database.

SHOW DATABASES;

Database          |
------------------+
information_schema|
mysql             |
performance_schema|
sys               |

terlihat terdapat beberapa database termasuk database dengan nama mysql. seluruh pengaturan mysql tersimpan dalam database ini termasuk pengaturan user.

di dalam database mysql terdapat beberapa table termasuk table user yang menyimpan informasi seputar user.

coba jalankan query berikut ini untuk melihat daftar table di dalam database mysql.

USE mysql;
SHOW TABLES;

Tables_in_mysql          |
-------------------------+           |
time_zone                |
time_zone_leap_second    |
time_zone_name           |
time_zone_transition     |
time_zone_transition_type|
transaction_registry     |
user                     |

terlihat terdapat beberapa table di antaranya adalah terdapat table user. seluruh informasi user ada di sini.

karena seluruh informasi user tersimpan di dalam table user, maka untuk menampilkan user tertentu atau daftar user kita dapat menggunakan query SELECT seperti biasa.

USE mysql;
SELECT User, Host, Password FROM user;

User       |Host     |Password                                 |
-----------+---------+-----------------------------------------+
root       |localhost|*56FA942D5F62AA00A8D47EADC2DA8997B6FFB428|

terlihat terdapat satu user yaitu root dengan host localhost.

Membuat user baru

untuk membuat user baru pastikan sudah login ke mysql server sebagai user root. silahkan buka terminal, dan masukan perintah berikut ini di terminal

mysql -u root -p

untuk membuat user baru anda dapat menggunakan Query berikut.

CREATE USER 'budi'@'localhost' IDENTIFIED BY 'mypassword';

perintah harus di awali dengan CREATE USER dan di teruskan dengan informasi seperti nama user dan host yang pisahkan dengan karakter at '@' di mana pada contoh di atas adalah 'budi'@'localhost' , yaitu user dengan nama budi dan host localhost. dan di teruskan dengan informasi password yaitu perintah IDENTIFIED BY 'mypassword' passwordnya adalah mypassword.

jika perintah di atas di terjemahkan adalah: 'buat user dengan nama budi dan host localhost di sertai password mypassword.

silahkan anda jalankan query di atas. dan jika sudah, anda dapat memastikan user tersebut berhasil di buat atau tidak dengan Query SELECT berikut ini.

USE mysql;
SELECT User, Host, Password FROM user;

User       |Host     |Password                                 |
-----------+---------+-----------------------------------------+
mariadb.sys|localhost|                                         |
root       |localhost|*56FA942D5F62AA00A8D47EADC2DA8997B6FFB428|
budi       |localhost|*FABE5482D5AADF36D028AC443D117BE1180B9725|

terlihat ada user baru bernama budi dengan host localhost dan password yang terlihat seperti karakter acak '*FABE5482D5AADF36D028AC443D117BE1180B9725'.

Pembuatan Hak Akses

user yang baru saja kita buat tadi memiliki akses terbatas. artinya jika kita login mysql sebagai user budi maka kita tidak dapat menjalankan semua query pada mysql.

sebagai contoh kita tidak dapat menjalankan query untuk pembuatan database berikut.

CREATE DATABASE user COLLATE latin1_swedish_ci;

jika kita menjalankan query di atas akan menampilkan pesan error berikut:

SQL Error [1044] [42000]: (conn=50) Access denied for user 'budi'@'localhost' to database 'user

artinya user budi tidak memiliki hak akses untuk menjalankan perintah query untuk pembuatan database.

Perintah GRANT dan REVOKE

arti dari kata GRANT adalah memberikan atau mengizinkan, sedangkan REVOKE artinya mencabut atau membatalkan.

jadi perintah GRANT berfungsi untuk memberikan hak akses kepada user, sedangkan REVOKE berfungsi kebalikannya yaitu menghapus atau membatalkan hak akses kepada user.

seperti yang kita ketahui. bahwa user budi belum memiliki hak akses apapun. untuk memeriksa hak akses apa saja yang di miliki user kita dapat menjalankan perintah SHOW GRANTS.

Perhatikan ! Untuk menampilkan daftar hak akses user, anda harus login ke mysql server sebagai user yang akan di tampilkan hak aksesnya. sebagai contoh jika anda ingin menampilkan hak user budi, maka anda perlu login terlebih dahulu sebagai budi.

-- LOGIN SEBAGAI USER BUDI
SHOW GRANTS;
+-------------------------------------------------------------------------------------------------------------+
| Grants for budi@localhost                                                                                   |
+-------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `budi`@`localhost` IDENTIFIED BY PASSWORD '*FABE5482D5AADF36D028AC443D117BE1180B9725' |
+-------------------------------------------------------------------------------------------------------------+

output di atas menandakan bahwa user budi belum memiliki hak akses apapun.

oke kita lanjutkan ke inti artikel ini yaitu pembuatan hak akses (privilege) user.

perintah dasar pembuatan hak akses seperti di bawah ini.

GRANT hak_akses (kolom)
ON nama_database.nama_table
TO 'namauser@host' IDENTIFIED BY 'password'
WITH GRANT OPTION

penulis akan jelaskan perintah di atas satu persatu.

  • perintah harus di awali dengan keyword GRANT.

  • setelah itu di lanjutkan dengan kriteria hak aksesnya misalnya SELECT, UPDATE, DELETE atau ALL untuk memberikan akses ke semua perintah query.

  • selanjutnya kita juga dapat memberi hak akses pada level kolom. maksudnya user dapat di berikan batasan dalam mengakses kolom. namun perintah ini adalah opsional jika tidak didefinisikan maka tidak ada batasan dalam mengakses kolom.

  • perintah ON nama_database.nama_table mendeskripsikan batasan pada database serta table. sebagai contoh jika anda ingin membatasi user hanya dapat mengakses database universitas dan table mahasiswa saja. maka anda dapat menggunakan perintah ON universitas.mahasiswa. jika anda tidak ingin ada batasan dalam mengakses database dan table, anda dapat menggunakan tanda bintang (*) sebagai berikut ON *.*

  • perintah TO 'namauser@host' artinya untuk siapa hak akses ini berikan. misalnya jika hak akses ini ingin di berikan ke user budi maka TO budi@localhost

  • perintah IDENTIFIED BY 'password' artinya kita bisa memberikan password kepada user yang ingin di berikan hak akses. namun anda tidak perlu memberikan password jika pada saat pembuatan user dengan perintah CREATE USER sudah menentukan password kecuali jika anda ingin mengganti password dengan yang baru.

  • WITH GRANT OPTION adalah sebuah hak akses khusus dalam MySQL yang memungkinkan pengguna untuk memberikan hak akses kepada pengguna lain. Jika suatu pengguna diberikan hak akses dengan WITH GRANT OPTION, pengguna tersebut dapat memberikan hak akses yang sama atau lebih rendah kepada pengguna lain.

setelah kita memahami aturan dalam pembuatan hak akses user atau biasa di sebut user privilege, maka kita bisa coba pratekan langsung.

kita kembali user budi, kita tahu bahwa user budi belum memiliki hak akses apapun. terbukti gagalnya user budi dalam menjalankan perintah CREATE DATABASE dan perintah SQL lainnya.

maka dari itu, kita akan coba menambahkan hak akses ke user budi agar dapat menjalankan semuah perintah SQL, seperti CREATE DATABASE, CREATE TABLE dan sebagainya. dan saya ingin user budi juga dapat mengakses seluruh database dan juga seluruh table.

silahkan anda login terlebih dahulu sebagai user root. dan jalankan perintah berikut.

GRANT ALL ON *.* TO budi@localhost;

setelah anda menjalankan perintah di atas, seperti biasa anda dapat menggunakan perintah SHOW GRANTS untuk melihat hak akses user budi.

-- login sebagai user budi
SHOW GRANTS;

+----------------------------------------------------------------------------------------------------------------------+
| Grants for budi@localhost                                                                                            |
+----------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO `budi`@`localhost` IDENTIFIED BY PASSWORD '*FABE5482D5AADF36D028AC443D117BE1180B9725' |
+----------------------------------------------------------------------------------------------------------------------+

di atas adalah hasil keluaran dari perintah SHOW GRANTS dimana GRANT ALL PRIVILEGES ON *.* TO `budi`@`localhost` menandakan bahwa kita berhasil menambahkan hak akses ke user budi sesuai dengan kriteria yang kita inginkan.

Setelah berhasil menambahkan hak akses ke user, mungkin kita perlu menghapus hak akses tersebut. untuk menghapus atau mencabut hak akses kita menggunakan perintah REVOKE seperti di bawah ini.

REVOKE hak_akses (kolom)
ON nama_database.nama_table
FROM 'namauser@host' IDENTIFIED BY 'password'
WITH GRANT OPTION;

Jika pada saat pembuatan hak akses kita menulis GRANT...TO, maka untuk menghapus hak akses perintahnya adalah REVOKE...FROM. Kita akan praktek menghapus beberapa privilege dari user budi. Tapi sebelum itu mari lihat apa saja hak akses yang bisa dilakukan oleh budi saat ini:

SHOW GRANTS;

+----------------------------------------------------------------------------------------------------------------------+
| Grants for budi@localhost                                                                                            |
+----------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO `budi`@`localhost` IDENTIFIED BY PASSWORD '*FABE5482D5AADF36D028AC443D117BE1180B9725' |
+------------------------------------------------------------------

perhatikan terdapat hak satu hak akses GRANT ALL PRIVILEGES. kita coba hapus saja hak akses tersebut dengan perintah berikut.

--- LOGIN SEBAGAI USER ROOT
REVOKE ALL ON *.* FROM budi@localhost;

sekarang kita coba SHOW GRANTS apakah hak akses tersebut masih tersedia atau tidak.

-- LOGIN SEBAGAI USER BUDI
SHOW GRANTS;
+-------------------------------------------------------------------------------------------------------------+
| Grants for budi@localhost                                                                                   |
+-------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `budi`@`localhost` IDENTIFIED BY PASSWORD '*FABE5482D5AADF36D028AC443D117BE1180B9725' |
+-------------------------------------------------------------------------------------------------------------+

ternyata sekarang hak akses dari user budi tidak ada sama sekali. berarti perintah REVOKE berhasil.

Menampilkan Daftar Privileges

kita baru hanya memakai hak akses (Privileges) ALL saja. padahal terdapat beberapa yang dapat kita manfaatkan.

seperti SELECT, CREATE, UPDATE, DELETE , ALTER dan masih banyak lainnya. perkiraan saya terdapat 41 privileges.

jika anda ingin mengetahui apa saja privileges yang tersedia anda dapat menjalankan perintah SHOW PRIVELEGES