MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

MySQL vs MariaDB vs Server Percona:Perbandingan Fitur Keamanan

Keamanan data sangat penting untuk organisasi mana pun. Ini adalah aspek penting yang dapat sangat memengaruhi desain lingkungan basis data. Saat memutuskan rasa MySQL mana yang akan digunakan, Anda perlu mempertimbangkan fitur keamanan yang tersedia dari vendor server yang berbeda. Dalam posting blog ini, kami akan memberikan perbandingan singkat dari versi terbaru MySQL Community Edition dari Oracle, Percona Server dan MariaDB:

mysqld  Ver 5.7.20-19 for Linux on x86_64 (Percona Server (GPL), Release 19, Revision 3c5d3e5d53c)
mysqld  Ver 5.7.21 for Linux on x86_64 (MySQL Community Server (GPL))
mysqld  Ver 10.2.12-MariaDB for Linux on x86_64 (MariaDB Server)

Kami akan menggunakan Centos 7 sebagai sistem operasi - harap diingat bahwa hasil yang kami sajikan di sini mungkin sedikit berbeda pada distribusi lain seperti Debian atau Ubuntu. Kami juga ingin fokus pada perbedaan dan tidak akan membahas kesamaan - Percona Server dan MariaDB adalah cita rasa MySQL, jadi beberapa fitur keamanan (misalnya, bagaimana hak akses file MySQL terlihat) dibagikan di antara mereka.

Keamanan Awal

Pengguna

Server Percona dan Server Komunitas MySQL hadir dengan kata sandi sementara yang dibuat secara acak untuk pengguna root. Anda perlu memeriksa isi log kesalahan MySQL untuk menemukannya:

2018-01-19T13:47:45.532148Z 1 [Note] A temporary password is generated for [email protected]: palwJu7uSL,g

Setelah Anda masuk, Anda harus mengubah kata sandi:

[[email protected] ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.21

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select * from mysql.user;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

Kata sandi harus cukup kuat, ini diterapkan oleh plugin validasi_kata sandi:

mysql> alter user [email protected] identified by 'password123.';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> alter user [email protected] identified by 'password123.A';
Query OK, 0 rows affected (0.00 sec)

MariaDB tidak membuat kata sandi root acak dan menyediakan akses tanpa kata sandi ke akun root dari (dan hanya dari) localhost.

[[email protected] ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 10.2.12-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| [email protected] |
+----------------+
1 row in set (0.00 sec)

Ini bukan masalah besar selama fase penerapan awal, karena DBA seharusnya mengonfigurasi dan mengamankan akses ke database nanti (misalnya dengan menjalankan mysql_secure_installation). Masalah yang lebih besar di sini adalah bahwa praktik yang baik tidak ditegakkan oleh MariaDB. Jika Anda tidak perlu menyiapkan kata sandi yang kuat untuk pengguna root, bisa jadi tidak ada yang mengubahnya nanti dan akses tanpa kata sandi akan tetap ada. Maka ini akan menjadi ancaman keamanan yang serius.

Aspek lain yang ingin kami lihat adalah akses anonim dan tanpa kata sandi. Pengguna anonim memungkinkan siapa saja untuk masuk, tidak harus pengguna yang telah ditentukan sebelumnya. Jika akses tersebut tanpa kata sandi, itu berarti siapa pun dapat terhubung ke MySQL. Biasanya akun tersebut hanya memiliki hak istimewa PENGGUNAAN tetapi meskipun demikian dimungkinkan untuk mencetak status ('\s') yang berisi informasi seperti versi MySQL, kumpulan karakter, dll. Selain itu, jika skema 'pengujian' tersedia, pengguna tersebut memiliki kemampuan untuk tulis ke skema itu.

Server Komunitas MySQL dan server Percona tidak memiliki pengguna anonim yang ditentukan di MySQL:

mysql> select user, host, authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost | *EB965412B594F67C8EB611810EF8D406F2CF42BD |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+---------------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)

Di sisi lain, MariaDB terbuka untuk akses anonim dan tanpa kata sandi.

MariaDB [(none)]> select user,host,password from mysql.user;
+------+-----------------------+----------+
| user | host                  | password |
+------+-----------------------+----------+
| root | localhost             |          |
| root | localhost.localdomain |          |
| root | 127.0.0.1             |          |
| root | ::1                   |          |
|      | localhost             |          |
|      | localhost.localdomain |          |
+------+-----------------------+----------+
6 rows in set (0.00 sec)

Selain itu, tersedia skema 'tes' - yang memungkinkan pengguna anonim untuk menulis ke database.

[[email protected] ~]# mysql -umyanonymoususer
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 14
Server version: 10.2.12-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use test;
Database changed
MariaDB [test]> CREATE TABLE mytab (a int);
Query OK, 0 rows affected (0.01 sec)

MariaDB [test]> INSERT INTO mytab VALUES (1), (2);
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [test]> SELECT * FROM mytab;
+------+
| a    |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

Ini merupakan ancaman serius, dan perlu diselesaikan. Jika tidak, ini dapat dengan mudah dieksploitasi untuk mencoba membebani server dengan penulisan.

Data dalam Keamanan Transit

Server Komunitas MySQL dan kedua cabangnya mendukung penggunaan SSL untuk mengenkripsi data saat transit. Ini sangat penting untuk Jaringan Area Luas, tetapi juga tidak boleh diabaikan di jaringan lokal. SSL dapat digunakan baik di sisi klien maupun sisi server. Mengenai konfigurasi sisi server (untuk mengenkripsi lalu lintas dari master ke slave, misalnya), terlihat identik di seluruh papan. Namun ada perbedaan dalam hal enkripsi SSL sisi klien, yang diperkenalkan di MySQL 5.7. Sebelum 5.7, seseorang harus membuat kunci SSL dan CA dan mendefinisikannya dalam konfigurasi server dan klien. Beginilah tampilan pengaturan SSL 10.2 MariaDB. Di MySQL Community Server 5.7 dan di Percona Server 5.7 (yang didasarkan pada MySQL 5.7), tidak perlu membuat kunci terlebih dahulu. Semuanya dilakukan secara otomatis, di latar belakang. Yang perlu Anda lakukan adalah mengaktifkan SSL di klien Anda dengan menyetel '--ssl-mode' yang benar. Untuk klien CLI MySQL, ini bahkan tidak diperlukan karena ini mengaktifkan SSL secara default:

[[email protected] ~]# mysql -p -h127.0.0.1
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.21 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.7.21, for Linux (x86_64) using  EditLine wrapper

Connection id:        6
Current database:
Current user:        [email protected]
SSL:            Cipher in use is DHE-RSA-AES256-SHA
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server version:        5.7.21 MySQL Community Server (GPL)
Protocol version:    10
Connection:        127.0.0.1 via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:        3306
Uptime:            2 days 21 hours 51 min 52 sec

Threads: 1  Questions: 15  Slow queries: 0  Opens: 106  Flush tables: 1  Open tables: 99  Queries per second avg: 0.000
--------------

Di sisi lain MariaDB akan memerlukan konfigurasi tambahan karena SSL dinonaktifkan secara default:

[[email protected] ~]# mysql -h127.0.0.1
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 18
Server version: 10.2.12-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> \s
--------------
mysql  Ver 15.1 Distrib 10.2.12-MariaDB, for Linux (x86_64) using readline 5.1

Connection id:        18
Current database:
Current user:        [email protected]
SSL:            Not in use
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server:            MariaDB
Server version:        10.2.12-MariaDB MariaDB Server
Protocol version:    10
Connection:        127.0.0.1 via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:        3306
Uptime:            2 days 22 hours 26 min 58 sec

Threads: 7  Questions: 45  Slow queries: 0  Opens: 18  Flush tables: 1  Open tables: 12  Queries per second avg: 0.000
--------------

Enkripsi Data saat Istirahat

Pertama-tama, backup - ada alat backup yang tersedia secara gratis seperti xtrabackup atau MariaDB Backup (yang merupakan fork dari xtrabackup). Ini memungkinkan untuk membuat cadangan terenkripsi dari ketiga rasa MySQL yang kita bahas di posting blog ini.

Ketiga varian tersebut mendukung enkripsi database yang sedang berjalan, tetapi ada perbedaan dalam bagian data yang dienkripsi.

Server Komunitas MySQL hanya mendukung enkripsi tablespace InnoDB. Kunci yang digunakan untuk enkripsi disimpan dalam file (yang tidak sesuai dengan peraturan - kunci harus disimpan di brankas - sesuatu yang didukung oleh MySQL Enterprise). Server Percona didasarkan pada Server Komunitas MySQL, sehingga juga mendukung enkripsi tablespace InnoDB. Baru-baru ini, di Percona Server 5.7.20, dukungan untuk enkripsi tablespace umum (dibandingkan dengan hanya individu di versi sebelumnya dan MySQL Community Edition) telah ditambahkan. Dukungan untuk enkripsi log biner juga ditambahkan. Server Percona dilengkapi dengan plugin keyring_vault, yang dapat digunakan untuk menyimpan kunci di server Hashicorp Vault, membuat Server Percona 5.7.20 mematuhi persyaratan peraturan terkait enkripsi data saat istirahat.

MariaDB 10.2 memiliki dukungan enkripsi data-at-rest yang lebih canggih. Selain tablespace dan enkripsi log biner/relay, ia memiliki dukungan untuk mengenkripsi log redo InnoDB. Saat ini, ini adalah solusi yang lebih lengkap terkait enkripsi data.

Pembukuan Audit

Ketiga rasa MySQL memiliki dukungan untuk audit logging. Cakupan mereka cukup sebanding:menghubungkan dan memutuskan acara, kueri dieksekusi, tabel diakses. Log berisi informasi tentang pengguna mana yang berpartisipasi dalam acara tersebut, dari host mana pengguna login, waktu terjadinya, dan info serupa. Peristiwa tersebut juga dapat dicatat melalui syslog dan disimpan di server log eksternal untuk mengaktifkan analisis dan penguraian log.

Penutupan Data, Firewall SQL

Semua rasa MySQL yang dibahas bekerja dengan beberapa jenis alat yang memungkinkan penerapan penyembunyian data, dan akan dapat memblokir lalu lintas SQL berdasarkan beberapa aturan. Penyembunyian data adalah metode mengaburkan beberapa data di luar database, tetapi sebelum mencapai klien. Contohnya adalah data kartu kredit yang disimpan dalam teks biasa di database, tetapi ketika pengembang ingin menanyakan data tersebut, dia akan melihat 'xxxxxxxx...' alih-alih angka. Alat yang kita bicarakan di sini adalah ProxySQL dan MaxScale. MaxScale adalah produk MariaDB Corporation, dan berbasis langganan. ProxySQL adalah proxy database yang gratis untuk digunakan. Kedua proxy dapat digunakan dengan semua rasa MySQL.

Itu saja untuk hari ini teman-teman. Untuk bacaan lebih lanjut, lihat 10 tips berikut untuk mengamankan database MySQL dan MariaDB 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. Pemantauan Replikasi MySQL yang Efektif Dengan Dasbor SCUMM:Bagian 2

  2. Otomasi Basis Data dengan Wayang:Menyebarkan Replikasi MySQL &MariaDB

  3. Analisis dengan MariaDB AX - tThe Open Source Columnar Datastore

  4. Apa itu MariaDB ColumnStore?

  5. Bagaimana MICROSECOND() Bekerja di MariaDB