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

Mengamankan Server MySQL

MySQL

MySQL adalah sistem manajemen basis data relasional sumber terbuka. Panduan ini akan menunjukkan cara mengamankan dan mengaudit server MySQL. Nama tersebut merupakan kombinasi dari “My”, nama putri salah satu pendiri Michael Widenius, dan “SQL”, singkatan dari Structured Query Language.

Sebelum Anda Mulai

  1. Pastikan Anda telah mengikuti panduan Memulai dan Mengamankan Server Anda. Pastikan bahwa nama host Linode telah disetel.

    Periksa nama host Linode Anda. Perintah pertama harus menunjukkan nama host pendek Anda dan perintah kedua harus menunjukkan nama domain yang sepenuhnya memenuhi syarat (FQDN).

    hostname
    hostname -f
    
    Catatan Jika Anda memiliki nama domain terdaftar untuk situs web Anda, tambahkan domain ke server Linode tempat Anda berencana memasang tumpukan LAMP. Jika Anda tidak memiliki nama domain terdaftar, maka ganti example.com dengan alamat IP server Linode dalam petunjuk berikut.
  2. Perbarui sistem Anda:

    sudo yum update
    
    Catatan Panduan ini ditulis untuk pengguna non-root. Perintah yang memerlukan hak istimewa yang lebih tinggi diawali dengan sudo . Jika Anda tidak terbiasa dengan sudo perintah, Anda dapat memeriksa panduan Pengguna dan Grup kami.
  3. Untuk mengamankan dan mengaudit MySQL, Anda harus memiliki server Linux dengan MySQL Server layanan berjalan. Untuk informasi tentang menginstal MySQL, silakan lihat Menginstal MySQL

    Catatan Instruksi dalam panduan ini didasarkan pada Ubuntu 18.04, meskipun semua langkah adalah distribusi agnostik dengan pengecualian nama paket dan manajer paket.

Menggunakan Penginstal MySQL yang Aman

Paket mysql-server sudah dikonfigurasi sebelumnya dengan utilitas yang disebut mysql_secure_installation yang digunakan untuk menyiapkan titik awal yang aman untuk server MySQL, dengan menghapus pengguna anonim dan memungkinkan Anda menentukan kebijakan kekuatan sandi yang diinginkan.

mysql_secure_installation adalah skrip shell yang tersedia di sistem Unix, dan memungkinkan Anda mengamankan instalasi MySQL dengan memungkinkan Anda untuk:

  • menetapkan kata sandi untuk akun root
  • hapus akun root yang dapat diakses dari luar host lokal
  • hapus akun pengguna anonim
  • hapus database pengujian, yang secara default dapat diakses oleh pengguna anonim

Mulailah proses keamanan dengan menjalankan utilitas ini segera setelah menginstal mysql-server.

  1. Aktifkan utilitas dengan menjalankan perintah berikut:

     sudo mysql_secure_installation
    
  2. Proses penyiapan dimulai dan utilitas meminta Anda menentukan apakah Anda ingin mengaktifkan plugin validasi kata sandi yang digunakan untuk menguji kata sandi dan meningkatkan keamanan. Disarankan untuk mengaktifkan fitur ini.

    Securing the MySQL server deployment.
    
    Connecting to MySQL using a blank password.
    
    VALIDATE PASSWORD PLUGIN can be used to test passwords
    and improve security. It checks the strength of password
    and allows the users to set only those passwords which are
    secure enough. Would you like to setup VALIDATE PASSWORD plugin?
    
    Press y|Y for Yes, any other key for No: y

  3. Setelah Anda mengaktifkan plugin kata sandi, tentukan kebijakan validasi kata sandi Anda berdasarkan tingkat kekuatan kata sandi yang diinginkan.

    There are three levels of password validation policy:
    
    LOW    Length >= 8
    MEDIUM Length >= 8, numeric, mixed case, and special characters
    STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
    
    Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
    Please set the password for root here.
    
    New password:
    
    Re-enter new password:
    
    Estimated strength of the password: 100
    Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

  4. Hapus pengguna anonim. Ini adalah opsi keamanan yang penting karena penyerang dapat memanfaatkan pengguna anonim untuk mendapatkan akses ke server database.

    By default, a MySQL installation has an anonymous user,
    allowing anyone to log into MySQL without having to have
    a user account created for them. This is intended only for
    testing, and to make the installation go a bit smoother.
    You should remove them before moving into a production
    environment.
    
    Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

  5. Nonaktifkan login root dari jarak jauh, ini adalah konfigurasi keamanan yang sangat penting karena mencegah penyerang mengautentikasi dari jarak jauh ke server MySQL sebagai root atau melakukan serangan brute force kata sandi. Otentikasi jarak jauh juga dapat dinonaktifkan sepenuhnya, kita akan melihat bagaimana melakukannya di bagian selanjutnya.

    Normally, root should only be allowed to connect from
    'localhost'. This ensures that someone cannot guess at
    the root password from the network.
    
    Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

  6. Hapus database pengujian yang dibuat selama proses instalasi server mysql, database ini dibuat untuk tujuan pengujian, sebagai praktik yang baik, disarankan untuk menghapus database ini.

    By default, MySQL comes with a database named 'test' that
    anyone can access. This is also intended only for testing,
    and should be removed before moving into a production
    environment.
    
    
    Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

  7. Muat ulang tabel hak istimewa untuk memastikan bahwa semua perubahan diterapkan dan berlaku.

    Reloading the privilege tables will ensure that all changes
    made so far will take effect immediately.
    
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
    Success.
    
    All done!
    Anda sekarang memiliki basis yang aman untuk digunakan, di bagian berikutnya, temukan petunjuk untuk mengubah root default nama pengguna dan kata sandi.

Memodifikasi Pengguna “root”

Secara default, server MySQL telah ditentukan sebelumnya dengan superuser/admin akun yang memiliki akses ke semua hak istimewa dan fungsionalitas basis data dan pengguna basis data. Dengan kontrol dan akses yang tak tertandingi ini, penting untuk mengunci dan mengamankan akun root karena penyerang biasanya menargetkan akun root di server MySQL karena berpotensi memberikan akses lengkap ke database dan pengguna database.

Langkah pertama dalam mengamankan pengguna “root” adalah mengubah nama pengguna dari root untuk sesuatu yang lebih pantang menyerah, tujuannya adalah untuk membuat nama pengguna root sulit ditebak atau untuk memaksa penyerang. Setelah itu, disarankan juga untuk mengubah root sandi akun secara teratur sebagai praktik yang baik.

  1. Login ke server MySQL dengan perintah berikut:

     sudo mysql -u root
    
  2. Ubah nama pengguna akun “root” dengan menjalankan kueri berikut:

     rename user 'root'@'localhost' to '<new-username>'@'localhost';
    
  3. Ubah root kata sandi akun untuk sesuatu yang kuat dan sulit ditebak, disarankan untuk menggunakan pembuat kata sandi. Jika Anda mengaktifkan plugin verifikasi kata sandi selama proses pemasangan yang aman, Anda harus memberikan kata sandi yang memenuhi persyaratan kebijakan dalam hal kekuatan.

     ALTER USER 'example_username'@'localhost' IDENTIFIED BY '<new-password>';
    
  4. Muat ulang tabel hak istimewa untuk memastikan bahwa semua perubahan disimpan dan diaktifkan dengan menjalankan perintah berikut:

     flush privileges;
    
  5. Untuk mengkonfirmasi apakah root username dan password diubah, jalankan query berikut:

     use mysql;
     select user,host,authentication_string from mysql.user;
    

Ini menampilkan tabel pengguna yang disimpan di bawah database mysql dan harus mencerminkan perubahan yang dibuat.

+------------------+-----------+-------------------------------------------+
| user             | host      | authentication_string                     |
+------------------+-----------+-------------------------------------------+
| example_user     | localhost | *A2550B00C6DF81DACE33551E8293462F6CAE33DA |
| mysql.session    | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys        | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | localhost | *241DC5A20F017D55EE82E46E7996784ED4A5CD8A |
+------------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

Membuat Pengguna Baru

Praktik keamanan yang baik adalah konsep pemisahan berdasarkan tugas atau peran. Ini berarti bahwa untuk setiap database atau aplikasi yang menggunakan database, buat pengguna baru yang memiliki izin CRUD untuk database tersebut. Ini memastikan bahwa setiap saat, hanya satu pengguna yang memiliki akses ke satu database pada satu waktu dan pengguna tidak dapat mengakses database lain.

  1. Buat Test database, dengan menjalankan kueri berikut dalam MYSQL:

     create database Test;
    
  2. Buat pengguna yang bertanggung jawab untuk mengelola database Tes ini:

     CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
    
  3. Tetapkan izin CRUD yang sesuai kepada pengguna untuk Test basis data:

     GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
    
  4. Penting untuk dicatat bahwa hak istimewa ini hanya berlaku untuk Test database, jika Anda membuat pengguna untuk aplikasi seperti phpMyAdmin , Anda harus memberi pengguna root izin.

  5. Jika Anda memutuskan untuk menghapus pengguna tertentu, jalankan kueri berikut:

     drop user '<username>'@'localhost';
    
  6. Muat ulang tabel hak istimewa untuk memastikan perubahan yang dibuat diterapkan dan diaktifkan dengan menjalankan kueri berikut:

     flush privileges;
    

Konfigurasi MySQL Kustom

Anda sekarang dapat menyiapkan konfigurasi khusus yang aman untuk MySQL yang menyediakan opsi konfigurasi keamanan tambahan.

  1. File konfigurasi MySQL global terletak di /etc/mysql/my.cnf , semua konfigurasi global khusus harus diatur dalam file konfigurasi.

  2. Konfigurasi khusus perlu ditentukan untuk mysqld (daemon MySQL), opsi yang ditampilkan pada gambar adalah konfigurasi keamanan khusus.

  3. Setelah menambahkan konfigurasi khusus, Anda perlu memulai ulang mysql layanan untuk memastikan semua perubahan diterapkan.

     systemctl restart mysql
    

Audit Keamanan MySQL

Anda sekarang dapat mengaudit keamanan server MySQL dengan menggunakan alat yang disebut MySAT. MySAT melakukan beberapa tes untuk menganalisis konfigurasi database dan kebijakan keamanan. MySAT membantu menilai dan karenanya meningkatkan keamanan database MySQL. MySAT adalah skrip SQL sederhana, mudah dimengerti dan mudah dipelihara. Hasil MySAT adalah output dalam format HTML.

  1. Kloning repositori MySAT Github, dengan menjalankan perintah berikut:

     git clone https://github.com/meob/MySAT.git
    
  2. Setelah mengkloning direktori, navigasikan ke direktori MySAT, di mana mysat.sql file berada dan digunakan bersama dengan server MySQL untuk menampilkan hasilnya ke dalam MySAT.htm berkas.

  3. Audit keamanan dengan menjalankan perintah berikut:

     mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
    
  4. Seperti yang ditunjukkan, MySAT memerlukan akses root ke MySQL untuk menjalankan tes yang diperlukan, setelah menjalankan perintah, file MySAT.htm dihasilkan, salin file MySAT.htm dan mysat.css file ke server Apache atau NGINX, atau unduh secara lokal dengan scp , sehingga Anda dapat menganalisis hasil audit.

  5. Hasilnya diformat dalam format yang mudah dibaca dan dipahami, di mana konfigurasi diperiksa dan hasilnya diberi kode warna berdasarkan konfigurasi saat ini dan bagaimana hal itu memengaruhi keamanan server mysql. Misalnya, pemeriksaan konfigurasi yang gagal diberi kode warna oranye dan pemeriksaan yang lulus diberi kode warna hijau.

  6. Laporan audit mengungkapkan konfigurasi apa yang perlu diubah atau dimodifikasi dan memberi Anda gambaran tingkat atas tentang keamanan keseluruhan server MySQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Salin data ke tabel baru di MySQL

  2. Cara Instal MySQL 8 Dengan Workbench Pada Windows 10

  3. Cara Mengembalikan Daftar Set Karakter yang Tersedia di MySQL

  4. Mencegah serangan injeksi SQL dalam program Java

  5. Ekstensi mysql tidak digunakan lagi dan akan dihapus di masa mendatang:gunakan mysqli atau PDO sebagai gantinya