Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Apakah Basis Data Anda Terjamin? Pikirkan lagi

1. Amankan server Anda

Banyak serangan yang diketahui hanya mungkin sekali mengakses mesin secara fisik. Untuk alasan ini, yang terbaik adalah memiliki server aplikasi dan server database pada mesin yang berbeda. Jika ini tidak memungkinkan, perhatian yang lebih besar harus diberikan. Jika tidak, dengan menjalankan perintah jarak jauh melalui server aplikasi, penyerang mungkin dapat merusak database Anda bahkan tanpa izin. Karena alasan ini, layanan apa pun yang berjalan pada mesin yang sama dengan database harus diberikan izin serendah mungkin yang masih memungkinkan layanan untuk beroperasi.


Jangan lupa untuk menginstal seluruh paket keamanan:Antivirus dan Anti-spam, Firewall, dan semua paket keamanan yang direkomendasikan oleh vendor sistem operasi Anda. Juga, jangan lupa untuk menghabiskan 10 menit memikirkan lokasi fisik server Anda - di lokasi yang salah, server Anda dapat dicuri, dibanjiri, dilukai oleh hewan liar atau gelandangan.

2. Keamanan Localhost atau Nonaktifkan atau batasi akses jarak jauh

Pertimbangkan apakah MySQL akan diambil dari sistem atau langsung diakses dari servernya sendiri. Jika akses jarak jauh digunakan, pastikan host yang hanya berkarakteristik dapat mengakses server. Ini biasanya dilakukan melalui pembungkus TCP, tabel IP, atau beberapa pemrograman firewall atau alat aksesibilitas perangkat keras lainnya.
Untuk membatasi MySQL dari membuka soket jaringan, parameter yang menyertainya harus disertakan di area [mysqld] dari my.cnf atau my.ini:

lewati jaringan

Dokumen terletak di "C:\Program Files\MySQL\MySQL Server 5.1" katalog pada sistem operasi Windows atau "/etc/my.cnf" atau "/etc/mysql/my.cnf" di Linux.
Baris ini melumpuhkan awal administrasi sistem di tengah startup MySQL. Akan sangat ideal jika Anda mengingat bahwa koneksi lokal dapat digunakan untuk mengatur koneksi ke server MySQL.

Solusi lain yang mungkin adalah memaksa MySQL untuk hanya mendengarkan localhost dengan menambahkan baris berikut di [mysqld] bagian my.cnf bind-address =127.0.0.1
Anda mungkin tidak ingin menonaktifkan akses sistem ke server database Anda jika klien di organisasi Anda berinteraksi dengan server dari mesin mereka atau server web yang diperkenalkan pada mesin alternatif. Dalam hal ini, sintaks hibah restriktif berikut harus dipertimbangkan:

mysql> GRANT SELECT, INSERT ON mydb.\* TO 'someuser'@'somehost';  

3. Nonaktifkan penggunaan INFILE LOKAL

Perubahan selanjutnya adalah menonaktifkan penggunaan "LOAD DATA LOCAL INFILE" perintah, yang akan membantu untuk menjaga membaca yang tidak disetujui dari catatan lingkungan. Ini sangat penting ketika kerentanan SQL Injection baru dalam aplikasi PHP ditemukan.
Selain itu, dalam kasus tertentu, "INFILE LOKAL" perintah dapat digunakan untuk mendapatkan akses ke file lain di sistem operasi, misalnya "/etc/passwd" , menggunakan perintah berikut:

mysql> LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE table1

Atau bahkan jauh lebih sulit:

mysql> SELECT load\_file("/etc/passwd")

Untuk menonaktifkan penggunaan "LOCAL INFILE" perintah, parameter berikut harus ditambahkan di [mysqld] bagian dari file konfigurasi MySQL.

set-variable=local-infile=0

4. Ubah nama pengguna dan kata sandi root, jaga agar tetap kuat.

Nama pengguna administrator default di server MySQL adalah "root" . Peretas sering berusaha mendapatkan akses ke izinnya. Untuk membuat tugas ini lebih sulit, ganti nama "root" ke sesuatu yang lain dan berikan kata sandi alfanumerik yang panjang dan rumit.

Untuk mengganti nama nama pengguna administrator, gunakan perintah rename di konsol MySQL:

mysql> RENAME USER root TO new\_user;

MySQL "GANTI NAMA PENGGUNA" perintah pertama kali muncul di MySQL versi 5.0.2. Jika Anda menggunakan versi MySQL yang lebih lama, Anda dapat menggunakan perintah lain untuk mengganti nama pengguna:

mysql> use mysql;

mysql> update user set user="new\_user" where user="root";

mysql> flush privileges;

Untuk mengubah kata sandi pengguna, gunakan perintah baris perintah berikut:

mysql> SET PASSWORD FOR 'username'@'%hostname' = PASSWORD('newpass');

Dimungkinkan juga untuk mengubah kata sandi menggunakan "mysqladmin" utilitas:

shell> mysqladmin -u username -p password newpass

5. Hapus database "Uji"

MySQL hadir dengan database "test" yang dimaksudkan sebagai ruang uji. Itu dapat diakses oleh pengguna anonim, dan karena itu digunakan oleh banyak serangan.
Untuk menghapus database ini, gunakan perintah drop sebagai berikut:

mysql> drop database test;  

Atau gunakan "mysqladmin" perintah:

shell> mysqladmin -u username -p drop test  

6. Hapus akun Anonim dan kedaluwarsa

Database MySQL dilengkapi dengan beberapa pengguna anonim dengan kata sandi kosong. Akibatnya, siapa pun dapat terhubung ke database untuk memeriksa apakah ini masalahnya, lakukan hal berikut:

mysql> select \* from mysql.user where user="";  

Dalam sistem yang aman, tidak ada garis yang harus digaungkan kembali. Cara lain untuk melakukan hal yang sama:

mysql> SHOW GRANTS FOR ''@'localhost';

mysql> SHOW GRANTS FOR ''@'myhost';

Jika hibah ada, maka siapa pun dapat mengakses database dan setidaknya menggunakan database default"test" . Periksa ini dengan:

shell> mysql -u blablabla

Untuk menghapus akun, jalankan perintah berikut:

mysql> DROP USER "";

MySQL "DROP USER" perintah didukung dimulai dengan MySQL versi 5.0. Jika Anda menggunakan versi MySQL yang lebih lama, Anda dapat menghapus akun sebagai berikut:

mysql> use mysql;

mysql> DELETE FROM user WHERE user="";

mysql> flush privileges;  

7. Tingkatkan keamanan dengan Kontrol Akses Berbasis Peran

Rekomendasi keamanan database yang sangat umum adalah dengan menurunkan izin yang diberikan kepada berbagai pihak. MySQL tidak berbeda. Biasanya, ketika pengembang bekerja, mereka menggunakan izin maksimum sistem dan kurang mempertimbangkan prinsip izin daripada yang mungkin kita harapkan. Praktik ini dapat mengekspos database ke risiko yang signifikan.
* Setiap instalasi MySQL 5.x baru sudah diinstal menggunakan langkah-langkah keamanan yang benar.
Untuk melindungi database Anda, pastikan bahwa direktori file di mana database MySQL sebenarnya disimpan adalah milik pengguna "mysql" dan grup "mysql".

shell>ls -l /var/lib/mysql

Selain itu, pastikan bahwa hanya pengguna "mysql" dan "root" yang memiliki akses ke direktori /var/lib/mysql .
Binari mysql, yang berada di bawah direktori /usr/bin/, harus dimiliki oleh "root" atau pengguna "mysql" sistem tertentu. Pengguna lain tidak boleh memiliki akses tulis ke file ini.

shell>ls -l /usr/bin/my\*  

8. Tetap periksa hak istimewa basis data

Izin sistem operasi telah diperbaiki di bagian sebelumnya. Sekarang mari kita bicara tentang izin basis data. Dalam kebanyakan kasus, ada pengguna administrator (diganti namanya menjadi "root") dan satu atau lebih pengguna sebenarnya yang hidup berdampingan dalam database. Biasanya, "root" tidak ada hubungannya dengan data dalam database; sebagai gantinya, ini digunakan untuk memelihara server dan tabelnya, untuk memberi dan mencabut izin, dll.
Di sisi lain, beberapa id pengguna digunakan untuk mengakses data, seperti id pengguna yang ditetapkan ke server web untuk menjalankan kueri "select\update\insert\delete" dan untuk menjalankan prosedur tersimpan. Dalam kebanyakan kasus, tidak ada pengguna lain yang diperlukan; namun, hanya Anda, sebagai administrator sistem yang benar-benar dapat mengetahui kebutuhan aplikasi Anda.

Hanya akun administrator yang perlu diberikan hak SUPER / PROSES / FILE dan akses ke database mysql. Biasanya, ada baiknya untuk menurunkan izin administrator untuk mengakses data.

Tinjau hak istimewa pengguna lainnya dan pastikan bahwa ini diatur dengan tepat. Ini dapat dilakukan dengan menggunakan langkah-langkah berikut.

mysql> use mysql;  

[Identifikasi pengguna]

mysql> select \* from users;  

[Daftar hibah dari semua pengguna]

mysql> show grants for ‘root’@’localhost’;

Pernyataan di atas harus dijalankan untuk setiap pengguna ! Perhatikan bahwa hanya pengguna yang benar-benar membutuhkan hak akses root yang harus diberikan.

Hak istimewa lain yang menarik adalah "TAMPILKAN DATABASES". Secara default, perintah tersebut dapat digunakan oleh semua orang yang memiliki akses ke prompt MySQL. Mereka dapat menggunakannya untuk mengumpulkan informasi (misalnya, mendapatkan nama database) sebelum menyerang database dengan, misalnya, mencuri data. Untuk mencegahnya, Anda disarankan untuk mengikuti prosedur yang dijelaskan di bawah ini.

  • Tambahkan " --skip-show-database" ke skrip startup MySQL atau tambahkan ke file konfigurasi MySQL
  • Berikan hak istimewa SHOW DATABASES hanya kepada pengguna yang ingin Anda gunakan perintah ini

Untuk menonaktifkan penggunaan perintah "SHOW DATABASES", parameter berikut harus ditambahkan di bagian [mysqld] dari /etc/my.cnf :

[mysqld]

skip-show-database  

9. Aktifkan Pencatatan

Jika server database Anda tidak menjalankan banyak kueri, Anda disarankan untuk mengaktifkan pencatatan transaksi, dengan menambahkan baris berikut ke bagian [mysqld] dari /etc/my.cnf berkas:

[mysqld]

log =/var/log/mylogfile  

Ini tidak disarankan untuk server MySQL produksi berat karena menyebabkan overhead yang tinggi pada server.
Selain itu, verifikasi bahwa hanya id "root" dan "mysql" yang memiliki akses ke file log ini (setidaknya akses tulis).

Log galat Pastikan hanya "root" dan "mysql" yang memiliki akses ke file log "hostname.err". File disimpan di direktori data mysql. File ini berisi informasi yang sangat sensitif seperti kata sandi, alamat, nama tabel, nama prosedur tersimpan, dan bagian kode. Ini dapat digunakan untuk pengumpulan informasi, dan dalam beberapa kasus, dapat memberikan informasi yang dibutuhkan penyerang untuk mengeksploitasi database, mesin tempat database diinstal, atau data di dalamnya.

Log MySQL Pastikan hanya "root" dan "mysql" yang memiliki akses ke file log "logfile XY". File disimpan di direktori data mysql.

10. Ubah direktori root

Sebuah chroot pada sistem operasi UNIX {operating system} adalah operasi yang mengubah direktori root disk yang tampak untuk metode yang berjalan saat ini dan turunannya. Program yang di-root ulang ke direktori lain tidak dapat mengakses atau memberi nama file di luar direktori tersebut, dan oleh karena itu direktori tersebut dinamai "chroot jail" atau (lebih jarang) "chroot jail".

Dengan menggunakan lingkungan chroot, akses tulis proses mySQL (dan proses anak) dapat dibatasi, sehingga meningkatkan keamanan server.

Pastikan bahwa direktori khusus ada untuk lingkungan chroot. Ini harus seperti:/chroot/mysql Selain itu, untuk membuat penggunaan alat administrasi database nyaman, parameter berikut harus diubah di bagian [klien] file konfigurasi MySQL:

[klien]

socket = /chroot/mysql/tmp/mysql.sock

Berkat baris kode tersebut, tidak perlu lagi memberikan perintah mysql, mysqladmin, mysqldump dll. dengan --socket=/chroot/mysql/tmp/mysql.sock parameter setiap kali alat ini dijalankan.

11. Hapus log lama secara rutin

Selama prosedur instalasi, ada banyak data sensitif yang akan membantu pengguna yang tidak diinginkan untuk menyerang database. Data ini disimpan di dalam riwayat server dan mungkin sangat berguna jika terjadi kesalahan selama penginstalan. Dengan menganalisis file riwayat, administrator dapat mengetahui apa yang salah dan mungkin memperbaikinya. Namun, file-file ini tidak diperlukan setelah instalasi selesai.
Kita harus menghapus konten file riwayat MySQL (~/.mysql_history), di mana pun semua perintah SQL yang mati disimpan (terutama kata sandi, yang disimpan sebagai teks biasa):

cat /dev/null > ~/.mysql\_history

Kesimpulannya, kita harus menekankan pada keamanan database. Namun itu harus menjadi hal pertama bagi setiap individu atau perusahaan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Desain Basis Data

  2. Pola Desain UI yang Tidak Berskala

  3. Kasus Penggunaan Sederhana untuk Indeks pada Kunci Utama

  4. Perbedaan Kunci Utama dan Kunci Unik

  5. Jumlah Baris yang Dibaca / Baris Sebenarnya Baca peringatan di Plan Explorer