Keamanan penginstalan MySQL adalah sesuatu yang harus diperhatikan oleh setiap DBA MySQL. Meskipun kami telah membahas bagaimana Anda harus menjaga keamanan MySQL Anda secara keseluruhan (lihat beberapa posting kami sebelumnya, khususnya seri keamanan MySQL Bagian Satu dan Bagian Dua), kami belum membahas masalah khusus terkait keamanan, termasuk masalah yang terkait dengan hak istimewa. Kami melakukannya di sini.
Apa itu Hak Istimewa di MySQL?
Hak istimewa di MySQL dapat diberikan ke akun. Jika Anda memberikan hak istimewa akun di MySQL, Anda menentukan operasi mana yang dapat dilakukan akun tersebut. Keistimewaan dapat diberikan ke database atau objek database (tabel, indeks, tampilan, dll.) Keistimewaan juga dapat bersifat dinamis atau statis. Hak istimewa statis dibangun ke dalam server sementara hak istimewa dinamis dapat ditentukan saat runtime.
Cara Memanfaatkan Hak Istimewa untuk Keamanan MySQL
Untuk menggunakan hak istimewa di MySQL, ini yang harus Anda ingat:
-
Untuk menetapkan atau mencabut hak istimewa, Anda harus memiliki pengguna MySQL. Pengguna dapat dibuat dengan menjalankan kueri CREATE USER:
CREATE USER ‘demouser’@’localhost’ IDENTIFIED BY ‘password’;
-
Untuk menetapkan atau mencabut hak istimewa, gunakan pernyataan GRANT dan REVOKE masing-masing:
GRANT ALL ON demo_db.* TO ‘demouser’@’localhost’; REVOKE INSERT ON *.* FROM ‘demouser’@’localhost’;
-
Anda dapat menyimpan hak istimewa dengan menjalankan FLUSH PRIVILEGES. Lihat mereka dengan menjalankan SHOW GRANTS.
-
Pernyataan GRANT tidak dapat digunakan untuk memberikan hak istimewa dan peran; pernyataan harus memberikan hak istimewa atau peran.
Agar instalasi MySQL Anda lebih aman, pertimbangkan hal berikut:
-
Hanya beri pengguna Anda hak istimewa yang diperlukan untuk menyelesaikan tugas mereka (mis., jangan gunakan GRANT ALL jika itu tidak perlu)
-
Secara umum, hindari menjalankan MySQL sebagai pengguna root Unix karena setiap pengguna dengan hak istimewa FILE dapat menyebabkan server untuk membuat file sebagai root.
-
Jangan berikan hak istimewa FILE kepada pengguna yang bukan administrator (lihat penjelasan di atas)
-
Pertimbangkan untuk menjalankan mysqld sebagai pengguna biasa yang tidak memiliki hak istimewa.
-
Jangan berikan hak PROCESS atau SUPER kepada pengguna yang bukan administrator. Hak PROCESS memungkinkan pengguna untuk melihat semua proses yang berjalan di MySQL. Hak istimewa SUPER, antara lain, memungkinkan perubahan konfigurasi server, memungkinkan penggunaan pernyataan CREATE SERVER, ALTER SERVER dan DROP SERVER, dan juga memungkinkan penggunaan pernyataan KILL yang memungkinkan pengguna mematikan pernyataan milik akun lain. Ingatlah bahwa MySQL menyediakan koneksi ekstra untuk pengguna yang memiliki hak istimewa SUPER. Hak istimewa SUPER juga memungkinkan pengguna mengontrol server replikasi.
Ikuti saran di atas dan Anda akan berada di jalur yang tepat menuju instalasi MySQL yang lebih aman. Namun, jika Anda menggunakan versi MySQL yang lebih baru, ada satu hal lagi yang perlu Anda ketahui - MySQL telah memperkenalkan peran di MySQL 8.0.16.
Peranan dalam Keamanan MySQL
Jika Anda belum pernah mendengar tentang role di MySQL, jangan khawatir. Peran sangat mirip dengan hak istimewa itulah sebabnya kami memasukkannya ke dalam posting blog ini. Faktanya, peran hanya itu - mereka adalah kumpulan hak istimewa, yaitu, ketika peran ditetapkan ke pengguna, pengguna diberikan semua hak istimewa yang terhubung ke peran itu. Peran dapat ditambahkan dan dihapus menggunakan pernyataan CREATE ROLE dan DROP ROLE. Untuk menggunakan peran di MySQL, buat nama peran, berikan hak istimewa untuk peran itu, lalu tetapkan ke pengguna seperti ini:
CREATE ROLE [IF NOT EXISTS] ‘role_1’;
GRANT SELECT ON db_name.* TO user_name;
GRANT role_1 TO [email protected];
Keistimewaan Apa yang Harus Anda Berikan?
Saat memberikan hak istimewa, ikuti prinsip hak istimewa terkecil:akun MySQL hanya boleh diberikan hak istimewa yang diperlukan untuk tujuannya. Hak istimewa yang paling umum digunakan adalah:
-
SEMUA HAK ISTIMEWA yang memberikan semua hak istimewa ke akun.
-
CREATE memberikan hak istimewa yang diperlukan untuk membuat database dan tabel.
-
DROP memberikan hak istimewa yang diperlukan untuk menghapus database dan tabel.
-
DELETE memberikan hak istimewa yang diperlukan untuk menghapus baris dari tabel.
-
INSERT memberikan hak istimewa yang diperlukan untuk menyisipkan baris ke dalam tabel.
-
SELECT memberikan hak istimewa yang diperlukan untuk menjalankan kueri SELECT.
-
UPDATE memberikan hak istimewa yang diperlukan untuk memperbarui baris dalam tabel (untuk menjalankan kueri UPDATE)
Secara umum, sebaiknya hindari memberikan semua hak istimewa ke akun; sebagai gantinya, pertimbangkan untuk mengikuti prinsip hak istimewa terkecil. Juga perlu diingat bahwa memberikan hak istimewa tambahan kepada pengguna tertentu tidak menghapus hak istimewa yang ada sebelumnya. Anda juga dapat melihat hak istimewa pengguna tertentu dengan menggunakan sintaks ini (ganti nama pengguna dengan nama pengguna pengguna Anda):
SHOW GRANTS FOR ‘username’;
Ringkasan
Saat berurusan dengan hak istimewa di MySQL, ingatlah bahwa Anda harus mengikuti prinsip hak istimewa terkecil (yaitu, hanya memberikan hak istimewa yang diperlukan). Mengikuti saran yang diuraikan di blog ini akan membantu membuat instalasi MySQL Anda lebih aman. Ingatlah bahwa hak istimewa Anda perlu disimpan agar berlaku (pernyataan FLUSH PRIVILEGES dapat membantu Anda melakukannya), selain itu, perlu diingat bahwa dari MySQL 8.0.16 Anda dapat menggunakan peran di MySQL untuk menetapkan set hak istimewa ke pengguna tertentu.
Kami berharap posting blog ini telah membantu Anda mengamankan instance MySQL Anda. Jika Anda memiliki pertanyaan atau pemikiran, jangan ragu untuk berkomentar, pertimbangkan juga untuk melihat seri keamanan MySQL kami (di sini dan di sini)