MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

MySQL vs MariaDB vs Percona Server:So sánh các tính năng bảo mật

Bảo mật dữ liệu là rất quan trọng đối với bất kỳ tổ chức nào. Đó là một khía cạnh quan trọng có thể ảnh hưởng lớn đến thiết kế của môi trường cơ sở dữ liệu. Khi quyết định sử dụng hương vị MySQL nào, bạn cần xem xét các tính năng bảo mật có sẵn từ các nhà cung cấp máy chủ khác nhau. Trong bài đăng blog này, chúng tôi sẽ đưa ra một so sánh ngắn về các phiên bản mới nhất của MySQL Community Edition từ Oracle, Percona Server và 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)

Chúng tôi sẽ sử dụng Centos 7 làm hệ điều hành - xin lưu ý rằng kết quả chúng tôi trình bày ở đây có thể hơi khác trên các bản phân phối khác như Debian hoặc Ubuntu. Chúng tôi cũng muốn tập trung vào những điểm khác biệt và sẽ không đề cập đến những điểm chung - Máy chủ Percona và MariaDB là hương vị của MySQL, vì vậy một số tính năng bảo mật (ví dụ:đặc quyền truy cập của tệp MySQL trông như thế nào) được chia sẻ giữa chúng.

Bảo mật ban đầu

Người dùng

Cả Percona Server và MySQL Community Server đều đi kèm với một mật khẩu tạm thời được tạo ngẫu nhiên cho người dùng root. Bạn cần kiểm tra nội dung của nhật ký lỗi của MySQL để tìm nó:

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

Khi bạn đăng nhập, bạn buộc phải thay đổi mật khẩu:

[[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.

Mật khẩu phải đủ mạnh, điều này được thực thi bởi plugin validate_password:

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 không tạo mật khẩu gốc ngẫu nhiên và nó cung cấp quyền truy cập không cần mật khẩu vào tài khoản gốc từ (và chỉ từ) 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)

Đây không phải là vấn đề lớn trong giai đoạn triển khai ban đầu, vì DBA được cho là phải cấu hình và bảo mật quyền truy cập vào cơ sở dữ liệu sau này (bằng cách chạy mysql_secure_installation chẳng hạn). Vấn đề lớn hơn ở đây là một thực hành tốt không được thực thi bởi MariaDB. Nếu bạn không phải thiết lập mật khẩu mạnh cho người dùng root, có thể không ai thay đổi mật khẩu sau đó và quyền truy cập không mật khẩu sẽ vẫn còn. Sau đó, điều này sẽ trở thành một mối đe dọa an ninh nghiêm trọng.

Một khía cạnh khác mà chúng tôi muốn xem xét là truy cập ẩn danh, không cần mật khẩu. Người dùng ẩn danh cho phép bất kỳ ai truy cập, không nhất thiết phải là người dùng được xác định trước. Nếu quyền truy cập như vậy không có mật khẩu, điều đó có nghĩa là bất kỳ ai cũng có thể kết nối với MySQL. Thông thường, tài khoản như vậy chỉ có đặc quyền USAGE nhưng ngay cả khi đó vẫn có thể in trạng thái ('\ s') chứa thông tin như phiên bản MySQL, bộ ký tự, v.v. Ngoài ra, nếu có sẵn lược đồ 'kiểm tra', người dùng đó có khả năng ghi vào lược đồ đó.

Cả Máy chủ cộng đồng MySQL và máy chủ Percona không có bất kỳ người dùng ẩn danh nào được xác định trong 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)

Mặt khác, MariaDB mở để truy cập ẩn danh, không cần mật khẩu.

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)

Ngoài ra, lược đồ 'kiểm tra' cũng có sẵn - cho phép người dùng ẩn danh thực hiện ghi vào cơ sở dữ liệu.

[[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)

Điều này đặt ra một mối đe dọa nghiêm trọng và cần phải được sắp xếp. Ngoài ra, nó có thể dễ dàng bị khai thác để cố gắng ghi quá tải máy chủ.

Dữ liệu trong Bảo mật quá cảnh

Máy chủ cộng đồng MySQL và cả hai nhánh của nó đều hỗ trợ việc sử dụng SSL để mã hóa dữ liệu khi chuyển tiếp. Điều này cực kỳ quan trọng đối với Mạng diện rộng, nhưng cũng không nên bỏ qua trong mạng cục bộ. SSL có thể được sử dụng cả phía máy khách và phía máy chủ. Về cấu hình phía máy chủ (ví dụ:để mã hóa lưu lượng truy cập từ chủ đến nô lệ), nó trông giống hệt nhau trên bảng. Tuy nhiên, có một sự khác biệt khi nói đến mã hóa SSL phía máy khách, được giới thiệu trong MySQL 5.7. Trước ngày 5.7, người ta phải tạo khóa SSL và CA và xác định chúng trong cấu hình của cả máy chủ và máy khách. Đây là cách thiết lập SSL 10.2 của MariaDB trông như thế nào. Trong cả MySQL Community Server 5.7 và Percona Server 5.7 (dựa trên MySQL 5.7), không cần tạo trước khóa. Tất cả đều được thực hiện tự động, trong nền. Tất cả những gì bạn cần làm là bật SSL trên ứng dụng khách của mình bằng cách đặt đúng ‘--ssl-mode’. Đối với ứng dụng khách CLI của MySQL, điều này thậm chí không cần thiết vì nó bật SSL theo mặc định:

[[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
--------------

Mặt khác, MariaDB sẽ yêu cầu cấu hình bổ sung vì SSL bị tắt theo mặc định:

[[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
--------------

Dữ liệu khi mã hóa phần còn lại

Trước hết, sao lưu - có các công cụ sao lưu có sẵn miễn phí như xtrabackup hoặc MariaDB Backup (là một nhánh của xtrabackup). Chúng cho phép tạo các bản sao lưu được mã hóa của cả ba phiên bản MySQL mà chúng ta thảo luận trong bài đăng trên blog này.

Cả ba phiên bản đều hỗ trợ mã hóa cơ sở dữ liệu đang chạy, nhưng có sự khác biệt về những phần dữ liệu được mã hóa.

Máy chủ cộng đồng MySQL chỉ hỗ trợ mã hóa không gian bảng InnoDB. Các khóa được sử dụng để mã hóa được lưu trữ trong các tệp (không tuân thủ các quy định - khóa phải được lưu trữ trong một kho - thứ mà MySQL Enterprise hỗ trợ). Percona Server dựa trên MySQL Community Server, vì vậy nó cũng hỗ trợ mã hóa không gian bảng InnoDB. Gần đây, trong Percona Server 5.7.20, hỗ trợ mã hóa các không gian bảng chung (so với chỉ những vùng riêng lẻ trong các phiên bản trước và MySQL Community Edition) đã được thêm vào. Hỗ trợ mã hóa các bản ghi nhị phân cũng được thêm vào. Máy chủ Percona đi kèm với một plugin keyring_vault, có thể được sử dụng để lưu trữ các khóa trong máy chủ Hashicorp Vault, làm cho Máy chủ Percona 5.7.20 tuân thủ các yêu cầu quy định về dữ liệu khi mã hóa ở trạng thái nghỉ.

MariaDB 10.2 có hỗ trợ mã hóa dữ liệu lúc nghỉ nâng cao hơn. Ngoài không gian bảng và mã hóa nhật ký nhị phân / chuyển tiếp, nó còn hỗ trợ mã hóa nhật ký làm lại InnoDB. Hiện tại, đây là giải pháp hoàn chỉnh hơn về mã hóa dữ liệu.

Ghi nhật ký kiểm tra

Cả ba phiên bản MySQL đều có hỗ trợ ghi nhật ký kiểm tra. Phạm vi của chúng có thể so sánh được khá nhiều:kết nối và ngắt kết nối các sự kiện, các truy vấn được thực thi, các bảng được truy cập. Các bản ghi chứa thông tin về người dùng nào đã tham gia vào sự kiện đó, từ máy chủ lưu trữ mà người dùng đã đăng nhập, thời gian nó xảy ra và thông tin tương tự. Các sự kiện như vậy cũng có thể được ghi lại qua nhật ký hệ thống và được lưu trữ trên máy chủ nhật ký bên ngoài để cho phép phân tích và phân tích cú pháp nhật ký.

Mặt nạ dữ liệu, Tường lửa SQL

Tất cả các hương vị MySQL đã thảo luận đều hoạt động với một số loại công cụ cho phép thực hiện việc tạo mặt nạ dữ liệu và có thể chặn lưu lượng truy cập SQL dựa trên một số quy tắc. Mặt nạ dữ liệu là một phương pháp làm xáo trộn một số dữ liệu bên ngoài cơ sở dữ liệu, nhưng trước khi nó đến được máy khách. Một ví dụ sẽ là dữ liệu thẻ tín dụng được lưu trữ dưới dạng văn bản thuần túy trong cơ sở dữ liệu, nhưng khi nhà phát triển muốn truy vấn dữ liệu đó, họ sẽ thấy ‘xxxxxxxx ...’ thay vì số. Các công cụ chúng ta đang nói ở đây là ProxySQL và MaxScale. MaxScale là một sản phẩm của MariaDB Corporation và dựa trên đăng ký. ProxySQL là một proxy cơ sở dữ liệu miễn phí để sử dụng. Cả hai proxy đều có thể được sử dụng với bất kỳ phiên bản MySQL nào.

Đó là tất cả cho những người ngày nay. Để đọc thêm, hãy xem 10 mẹo sau để bảo mật cơ sở dữ liệu MySQL và MariaDB của bạn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khám phá các tùy chọn công cụ lưu trữ cho MariaDB

  2. Mười lời khuyên về cách đạt được bảo mật MySQL và MariaDB

  3. Viết tối ưu hóa cho Qualcomm Centriq 2400 trong ứng viên phát hành MariaDB 10.3.5

  4. Cách EXPORT_SET () hoạt động trong MariaDB

  5. Cách ADDDATE () hoạt động trong MariaDB