Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana memastikan database MySQL Anda aman

Beberapa informasi dasar sebelum kita mulai:

Sumber:Pusat Keamanan Internet (CIS) Oracle MySQL Community Server 5.7

Sistem operasi: Windows 10

Di mana harus mengeksekusi: baris perintah

mysql -u USERNAME -p

Aplikasi target: Oracle MySQL Community Server 5.7

Mengaudit dan mencatat sistem informasi

Log memainkan peran penting untuk keamanan ketika ada dugaan serangan siber. Peninjauan log manual sangat melelahkan bagi personel keamanan, dan mereka harus menggunakan alat tinjauan log untuk mengekstrak informasi dan menganalisisnya. Log harus menggunakan teknologi penyimpanan dan enkripsi WORM (tulis sekali baca banyak) untuk menghindari kerusakan dan kehilangan data log. Selain itu, log harus memiliki format standar untuk kemudahan pemeliharaan, akses, dan perbandingan.

Pastikan “log_error” tidak kosong

perintah:

SHOW variables LIKE ‘log_error’;

Log kesalahan berisi data tentang peristiwa ketika mysqld mulai atau berhenti. Ini juga menunjukkan kapan sebuah meja perlu dinilai atau diperbaiki. Itu harus menghasilkan "nilai". Alasan mengaktifkan error logging adalah membantu meningkatkan kemampuan untuk mendeteksi upaya jahat terhadap MySQL dan pesan penting lainnya.

Pastikan file log disimpan di partisi non-sistem

perintah:

SELECT @@global.log_bin_basename;

File log MySQL dapat disimpan di mana saja di sistem file dan diatur menggunakan konfigurasi MySQL. Selain itu, praktik terbaiknya adalah memastikan bahwa log di sistem file tidak berantakan dengan log lain seperti log aplikasi. Anda harus memastikan bahwa nilai yang dikembalikan tidak menunjukkan bahwa itu ada di root “(‘/’)”, “/var”, atau “/usr”. Alasannya adalah bahwa partisi akan mengurangi kemungkinan penolakan layanan jika ruang disk yang tersedia untuk sistem operasi habis.

Pastikan “log_error_verbosity” tidak disetel ke “1”

perintah:

SHOW GLOBAL VARIABLES LIKE ‘log_error_verbosity’;

Pemeriksaan ini memberikan informasi tambahan tentang fungsionalitas apa yang dimiliki atau telah diaktifkan oleh log MySQL pada pesan kesalahan. Nilai 1 memungkinkan pencatatan pesan kesalahan. Nilai 2 memungkinkan pencatatan kesalahan dan pesan peringatan. Nilai 3 memungkinkan pencatatan pesan kesalahan, peringatan, dan catatan. Ini membantu mendeteksi perilaku berbahaya dengan mencatat kesalahan komunikasi dan koneksi yang dibatalkan.

Pastikan logging audit diaktifkan

Mengaktifkan logging audit sangat penting untuk lingkungan produksi untuk sesi pengguna interaktif dan sesi aplikasi. Dengan logging audit, ini membantu mengidentifikasi siapa yang mengubah apa dan kapan. Ini juga dapat membantu mengidentifikasi apa yang telah dilakukan penyerang dan bahkan dapat digunakan sebagai bukti dalam investigasi.

perintah:

SELECT NAME FROM performance_schema.setup_instruments WHERE NAME LIKE ‘%/alog/%’;

perintah:

SET GLOBAL general_log = ‘ON’ ;

perintah: BUAT PENGGUNA 'user1'@'localhost' DIIDENTIFIKASI DENGAN PASSWORD 'tidak terlalu rahasia';

Jalur log di Windows 10 dapat ditemukan dengan menggunakan aplikasi Layanan, melihat apakah MySQL berjalan, dan klik kanan properti.

Log di sistem penulis terletak di:C:\ProgramData\MySQL\MySQL Server 5.7\Data\DJ-JASON-CLARK.log

Otentikasi untuk sistem informasi

Otentikasi memastikan kredensial yang diberikan oleh pengguna atau mesin cocok dengan database pengguna yang berwenang di sistem operasi lokal atau di server otentikasi. Otentikasi kemudian diikuti oleh otorisasi, yang diberikan oleh administrator kepada pengguna atau mesin. Otentikasi yang umum digunakan di jaringan pribadi dan publik adalah otentikasi berbasis kata sandi.

Pastikan sandi tidak disimpan dalam konfigurasi global

Bagian [klien] dari file konfigurasi MySQL memungkinkan pembuatan pengguna dan kata sandi ditetapkan. Pemeriksaan ini penting karena mengizinkan pengguna dan sandi dalam file konfigurasi berdampak negatif pada kerahasiaan sandi pengguna.

Untuk mengaudit, buka file konfigurasi MySQL dan periksa bagian [klien] — tidak boleh ada kata sandi yang disimpan. Tidak ada kata sandi yang ditetapkan dalam sistem penulis (lihat gambar di bawah). Jika kata sandi ditetapkan dalam file konfigurasi, gunakan mysql_config_editor untuk menyimpan kata sandi dalam bentuk terenkripsi di .mylogin.cnf.

Pastikan 'sql_mode' berisi 'NO_AUTO_CREATE_USER'

“no_auto_create_user” adalah opsi untuk mencegah pembuatan otomatis pengguna saat informasi autentikasi tidak diberikan.

perintah:

SELECT @@global.sql_mode;

perintah:

SELECT @@session.sql_mode;

Pastikan sandi disetel untuk semua akun MySQL

Seorang pengguna dapat membuat kata sandi kosong. Memiliki kata sandi kosong berisiko karena siapa pun dapat mengasumsikan identitas pengguna, memasukkan ID login pengguna dan terhubung ke server. Ini mengabaikan otentikasi, yang buruk.

perintah:

SELECT User,host FROM mysql.user WHERE authentication_string=’’;

Pastikan 'default_password_lifetime' kurang dari atau sama dengan '90'

Mengubah masa pakai sandi menjadi 90 hari akan mengurangi waktu yang tersedia bagi penyerang untuk mengkompromikan sandi, dan dengan demikian mengurangi kemungkinan diserang.

perintah:

SHOW VARIABLES LIKE ‘default_password_lifetime’;

perintah:

SET GLOBAL default_password_lifetime=90;

Pastikan kerumitan sandi ada

Kompleksitas kata sandi menambah kekuatan keamanan pada autentikasi dan mencakup penambahan atau penambahan panjang, huruf besar, angka, dan karakter khusus. Semakin kompleks kata sandi, semakin sulit bagi penyerang untuk menggunakan kekerasan untuk mendapatkan kata sandi. Kata sandi yang lemah mudah diperoleh di kamus kata sandi.

perintah:

SHOW VARIABLES LIKE ‘validate_password%’;

Pastikan tidak ada pengguna yang memiliki nama host karakter pengganti

Pengguna dengan nama host wildcard (%) diberikan izin ke lokasi mana pun. Yang terbaik adalah menghindari pembuatan nama host wildcard. Sebagai gantinya, buat pengguna dan beri mereka lokasi spesifik dari mana pengguna tertentu dapat terhubung dan berinteraksi dengan database.

perintah:

SELECT user, host FROM mysql.user WHERE host = ‘%’;

Pastikan tidak ada akun anonim

Pengguna dapat memiliki nama pengguna anonim (kosong atau kosong). Nama pengguna anonim ini tidak memiliki kata sandi dan pengguna lain dapat menggunakan nama pengguna anonim tersebut untuk terhubung ke server MySQL. Penghapusan akun anonim ini memastikan hanya pengguna yang teridentifikasi dan tepercaya yang dapat mengakses server MySQL.

perintah:

SELECT user,host FROM mysql.user WHERE user = ‘’;

Koneksi jaringan ke server MySQL

Koneksi jaringan memainkan peran penting untuk komunikasi antara pengguna dan server MySQL. Koneksi jaringan yang tidak aman sangat rentan terhadap serangan. Berikut ini adalah pemeriksaan keamanan koneksi jaringan.

Pastikan 'have_ssl' disetel ke 'YA'

Untuk menghindari penyerang jahat mengintip ke dalam sistem Anda, sebaiknya gunakan SLL/TLS untuk semua lalu lintas jaringan saat menggunakan jaringan yang tidak tepercaya.

perintah:

WHERE variable_name = ‘have_ssl’;

Pastikan 'ssl_type' disetel ke 'APAPUN', 'X509', atau 'DIKHUSUSKAN' untuk semua pengguna jarak jauh

SSL/TLS harus dikonfigurasi per pengguna. Ini lebih lanjut mencegah penyadapan penyerang jahat.

perintah:

SELECT user, host, ssl_type FROM mysql.user WHERE NOT HOST IN (‘::1’, ‘127.0.0.1’, ‘localhost’);

Replikasi

Memeriksa status replikasi memungkinkan Anda memantau kinerja dan kerentanan keamanan. Microsoft SQL Server Management Studio memiliki alat berikut untuk memantau replikasi:

  1. melihat status agen snapshot,
  2. melihat status agen pembaca log, dan
  3. melihat status sinkronisasi.

Pastikan lalu lintas replikasi diamankan

Replikasi lalu lintas antar server harus diamankan. Selama transfer replikasi, sandi bisa bocor.

Untuk mengaudit, periksa apakah mereka menggunakan:jaringan pribadi, VPN, SSL/TLS, atau Terowongan SSH. Semoga sistem penulis menggunakan jaringan pribadi. Perbaiki jika sebaliknya, dan amankan dengan menggunakan jaringan pribadi, VPN, SSL/TLS, atau SSH Tunnel.

Pastikan 'MASTER_SSL_VERIFY_SERVER_CERT' Disetel ke 'YA' atau '1'

'MASTER_SSL_VERIFY_SERVER_CERT' memeriksa apakah replika harus memverifikasi sertifikat utama atau tidak. Replika harus memverifikasi sertifikat utama untuk mengautentikasi yang utama sebelum melanjutkan koneksi.

perintah:

SELECT ssl_verify_server_cert FROM mysql.slave_master_info;

Pastikan 'master_info_repository' disetel ke 'TABLE'

'master_info_repository' menentukan di mana replika mencatat status primer dan informasi koneksi. Kata sandi disimpan dalam repositori info utama yang merupakan file teks biasa. Menyimpan sandi di master_info TABLE lebih aman.

perintah:

SHOW GLOBAL VARIABLES LIKE ‘master_info_repository’;

Pastikan 'super_priv' tidak disetel ke 'Y' untuk pengguna replikasi

Hak istimewa "SUPER" ('super_priv') yang terletak di tabel "mysql.user" memiliki fungsi seperti "CHANGE", "MASTER TO", "KILL", "mysqladmin kill", "PURGE BINARY LOGS", "SET GLOBAL", "mysqladmin debug", dan kontrol logging lainnya. Memberi pengguna hak istimewa "SUPER" memungkinkan pengguna untuk melihat dan menghentikan pernyataan SQL yang sedang dijalankan, bahkan untuk manajemen kata sandi. Jika penyerang mengeksploitasi dan memperoleh hak istimewa “SUPER”, mereka dapat menonaktifkan, mengubah, atau menghancurkan data logging.

perintah:

SELECT user, host FROM mysql.user WHERE user=’repl’ and Super_priv = ‘Y’;

Pastikan tidak ada pengguna replikasi yang memiliki nama host karakter pengganti

MySQL memungkinkan Anda untuk memberikan izin ke nama host wildcard. Nama host karakter pengganti harus dihindari, dan Anda harus membuat atau memodifikasi pengguna dan memberi mereka lokasi tertentu dari mana pengguna tertentu dapat terhubung dan berinteraksi dengan database.

Kesimpulan

Pemeriksaan berikut dilakukan untuk satu lingkungan kerja menggunakan MySQL sebagai sistem informasi di sisi aplikasi dan sisi pengguna.

Penilaian sangat penting untuk memeriksa pencatatan standar MySQL dan mengaktifkan fungsi pencatatan tambahan (juga memungkinkan pemeriksaan kerentanan otentikasi). Pemeriksaan jaringan penting untuk mencegah pengguna lain dengan niat jahat mengintip ke dalam jaringan Anda. Selalu terapkan SSL/TLS untuk mengenkripsi. Mengamankan transfer satu arah diperlukan. Mengamankan lalu lintas replikasi menambahkan lapisan pertahanan.

Hasil penilaian dapat memberi tahu Anda apakah sistem dapat beroperasi pada tingkat kepercayaan.

Terima kasih telah membaca blog saya! Anda sekarang telah memulai jalur untuk mengamankan database MySQL Anda.=)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. QUARTER() Contoh – MySQL

  2. Bagaimana saya bisa mengulang semua baris tabel? (MySQL)

  3. Menghasilkan serangkaian tanggal

  4. Replikasi MySQL dan Failover Berbasis GTID - Menyelami Transaksi yang Salah

  5. Cara Memeriksa Versi MySQL