¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ĐỒ ÁN TỐT NGHIỆP “NGHIÊN CỨU TRIỂN KHAI GIẢI PHÁP BẢO MẬT DỮ LIỆU TRONG HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MONGODB” Hà Nội, 2022 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ĐỒ ÁN TỐT NGHIỆP “NGHIÊN CỨU TRIỂN KHAI GIẢI PHÁP BẢO MẬT DỮ LIỆU TRONG HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MONGODB” Hà Nội, 2022 MỤC LỤC LỜI CẢM ƠN i LỜI CAM ĐOAN ii MỤC LỤC iii DANH MỤC HÌNH ẢNH vi DANH MỤC TỪ VIẾT TẮT vii CHƯƠNG 1 TỔNG QUAN VỀ HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU VÀ CƠ SỞ DỮ LIỆU PHI QUAN HỆ NOSQL 1 1 1 Định nghĩa hệ quản trị CSDL 1 1 1 1 Dữ liệ.
TỔNG QUAN VỀ HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU VÀ CƠ SỞ DỮ LIỆU PHI QUAN HỆ NOSQL
Định nghĩa hệ quản trị CSDL
1.1.1 Dữ liệu và cơ sở dữ liệu
CHƯƠNG 3 Dữ liệu (data) có thể hiểu là các thông tin của đối tượng (người, vật, một khái niệm, sự việc…) Dữ liệu thường được mô tả dưới nhiều dạng khác nhau (các ký tự, ký số, hình ảnh, ký hiệu, âm thanh…) Mỗi cách mô tả gắn với một ngữ nghĩa nào đó.
Dữ liệu là những sự kiện có thể ghi lại và mang ý nghĩa quan trọng Đây là tài nguyên biến động cần được kiểm soát và quản lý, đặc biệt là dữ liệu từ các cơ quan quan trọng của Đảng và Nhà nước.
CHƯƠNG 4 Cơ sở dữ liệu (CSDL-Database) là tập hợp dữ liệu được tổ chức có cấu trúc liên quan với nhau CSDL được thiết kế, xây dựng cho phép người dùng lưu trữ dữ liệu, truy xuất thông tin hoặc cập nhật dữ liệu Một cơ sở dữ liệu là một tập hợp các dữ liệu có liên quan với nhau, được lưu trữ trên máy tính, có nhiều người sử dụng và được tổ chức theo một mô hình Có thể nói rằng cơ sở dữ liệu đóng vai trò quan trọng trong mọi lĩnh vực có sử dụng máy tính như giáo dục, thương mại, kỹ nghệ, khoa học, thư viện,… Thuật ngữ cơ sở dữ liệu trở thành một thuật ngữ phổ dụng
CHƯƠNG 5 Ví dụ, để quản lý việc học tập trong một trường đại học, các dữ liệu là các thông tin về sinh viên, về các môn học, điểm thi….Chúng ta tổ chức các dữ liệu đó thành các bảng và lưu giữ chúng vào sổ sách hoặc sử dụng một phần mềm máy tính để lưu giữ chúng trên máy tính Ta có một tập các dữ liệu có liên quan đến nhau và mang nhiều ý nghĩa, đó là một cơ sở dữ liệu.
CHƯƠNG 6 Cơ sở dữ liệu có một vai trò vô cùng quan trọng, nó được ví như trái tim của một ứng dụng Khi cơ sở dữ liệu gặp sự cố có thể làm cho ứng dụng cơ sở dữ liệu bị ngừng trệ, ảnh hưởng rất nhiều đến uy tín, chất lượng và tiền bạc Như vậy, có thể nói cơ sở dữ liệu là trung tâm của mọi vấn đề, là một trọng tâm mà các công ty, doanh nghiệp, tổ chức, cá nhân cần dành nhiều thời gian, công sức, nhân lực để bảo vệ Từ đó nhất thiết phải có các biện pháp, cơ chế, chính sách để bảo vệ cơ sở dữ liệu cho mọi tình huống.
1.1.2 Hệ quản trị cơ sở dữ liệu
CHƯƠNG 7 Một hệ quản trị cơ sở dữ liệu (DBMS) là một tập hợp chương trình giúp cho người sử dụng tạo ra, duy trì và khai thác một cơ sở dữ liệu Nhiều phương pháp luận thiết kế cơ sở dữ liệu đã được phát triển nhằm hỗ trợ các yêu cầu thông tin khác nhau gắn với môi trường làm việc của ứng dụng Các mô hình dữ liệu khái niệm và logic, cùng với những ngôn ngữ thích hợp, các công cụ định nghĩa dữ liệu, thao tác và hỏi đáp dữ liệu cũng đã được nghiên cứu Mục tiêu là đưa ra các DBMS có khả năng quản trị và khai thác dữ liệu tốt.
CHƯƠNG 8 Một đặc điểm cơ bản của DBMSlà khả năng quản lý đồng thời nhiều giao diện ứng dụng Mỗi ứng dụng có một cái nhìn thuần nhất về cơ sở dữ liệu, có nghĩa là có cảm giác chỉ mình nó đang khai thác cơ sở dữ liệu Đây là một yêu cầu hết sức quan trọng đối với các DBMS, ví dụ cơ sở dữ liệu của ngân hàng với các khách hàng trực tuyến của nó; hoặc cơ sở dữ liệu của các hãng hàng không với việc đặt vé trước.
CHƯƠNG 9 Xử lý phân tán đã góp phần phát triển và tự động hoá các hệ thống thông tin Ngày nay, đơn vị xử lý thông tin của các tổ chức và các chi nhánh ở xa của nó có thể giao tiếp với nhau một cách nhanh chóng thông qua các mạng máy tính, vì vậy cho phép truyền tải rất nhanh các khối dữ liệu lớn Việc sử dụng rộng rãi các cơ sở dữ liệu phân tán và tập trung đã đặt ra nhiều yêu cầu nhằm đảm bảo các chức năng thương mại và an toàn dữ liệu
CHƯƠNG 10 Trong thực tế, các sự cố trong môi trường cơ sở dữ liệu không chỉ ảnh hưởng đến từng người sử dụng hoặc ứng dụng, mà còn ảnh hưởng tới toàn bộ hệ thống thông tin Thực tế cho thấy, sự cố về an ninh xảy ra với cơ sở dữ liệu có thể ảnh hưởng nghiêm trọng đến danh tiếng của công ty và quan hệ với khách hàng Trong khi đó, đa số các công ty hiện nay tập trung nguồn lực vào bảo vệ dữ liệu trên đường truyền, mà vấn đề bảo vệ dữ liệu nằm trong cơ sở dữ liệu chưa được quan tâm đúng mức.
CHƯƠNG 11 Thông tin luôn là một tài sản vô giá của các tổ chức, doanh nghiệp hay cá nhân và họ thường sử dụng các DBMS để lưu trữ, quản lý tập trung tất cả các thông tin quý giá của mình Hiển nhiên hệ thống này sẽ là tiêu điểm tấn công của những người có mục đích xấu Ở mức độ nhẹ, các tấn công sẽ làm hệ thống cơ sở dữ liệu bị hỏng hóc Nghiêm trọng hơn, các thông tin sống còn của tổ chức, doanh nghiệp có thể bị tiết lộ (như chiến lược kinh doanh, các thông tin về khách hàng, nhà cung cấp, tài chính, mức lương nhân viên,…) và được đem bán cho các doanh nghiệp đối thủ. Ngoài ra các thông tin nhạy cảm, riêng tư của một cá nhân nào đó có thể bị phơi bày Tất cả những điều đó có thể làm ảnh hưởng đến danh tiếng, uy tín, thậm chí làm các tổ chức, doanh nghiệp trở nên điêu đứng Ngoài ra còn rất nhiều các hậu quả khôn lường ảnh hưởng đến các tổ chức, doanh nghiệp hay cá nhân, những người sở hữu cơ sở dữ liệu.
Kiến trúc hệ quản trị CSDL
CHƯƠNG 13. a Hình 1.1: Kiến trúc hệ quản trị CSDL
CHƯƠNG 14 Hệ quản trị cơ sở dữ liệu có thể được chia thành các module phần mềm thực hiện các thao tác cụ thể:
Bộ xử lý truy vấn là một thành phần quan trọng trong hệ quản trị cơ sở dữ liệu, có nhiệm vụ chuyển đổi các truy vấn thành một chuỗi chỉ thị mức thấp cho Bộ quản lý cơ sở dữ liệu.
Bộ quản lý cơ sở dữ liệu (DM) đóng vai trò quan trọng trong việc giao tiếp với các chương trình ứng dụng của người dùng và xử lý các truy vấn Nó tiếp nhận các truy vấn, phân tích sơ đồ ngoài và hình thức để xác định các bản ghi phù hợp với yêu cầu Sau khi xác định, Bộ quản lý cơ sở dữ liệu sẽ gọi Bộ quản lý file để thực hiện các yêu cầu đó.
Bộ quản lý file chịu trách nhiệm xử lý và quản lý các file lưu trữ cũng như cấp phát không gian bộ nhớ trên đĩa Nó thiết lập và duy trì danh sách các cấu trúc và chỉ số theo sơ đồ đã định Tuy nhiên, bộ quản lý file không can thiệp trực tiếp vào việc vào/ra vật lý của dữ liệu; thay vào đó, nó gửi yêu cầu đến các phương pháp truy cập tương ứng để module thực hiện việc đọc hoặc ghi dữ liệu vào các bộ đệm hệ thống.
Bộ tiền xử lý DML chuyển đổi các câu lệnh DML trong ứng dụng thành các lời gọi chuẩn của ngôn ngữ chủ, đồng thời cần liên kết với Bộ xử lý truy vấn để tạo ra mã thích hợp.
Bộ biên dịch DDL chuyển đổi các câu lệnh DDL thành các bảng chứa dữ liệu meta, tức là dữ liệu về dữ liệu Những bảng này được lưu trữ trong hồ sơ hệ thống, trong khi thông tin điều khiển được lưu vào phần đầu của file dữ liệu.
Bộ quản lý catalog đóng vai trò quan trọng trong việc quản lý và duy trì quyền truy cập vào hồ sơ hệ thống Hầu hết các thành phần của hệ quản trị cơ sở dữ liệu đều cần truy cập vào những hồ sơ này để hoạt động hiệu quả.
Phân loại hệ quản trị cơ sở dữ liệu
CHƯƠNG 15 Hệ QTCDSL có thể được phân loại dựa theo nhiều tiêu chí khác nhau, và mỗi cách phân loại có thể có nhiều kiểu hệ QTCSDL Trong phần này mô tả 2 kiểu hệ QTCSDL khác nhau:
Hệ quản trị cơ sở dữ liệu quan hệ và hệ quản trị cơ sở dữ liệu phi quan hệ.
1.3.1 Hệ quản trị cơ sở dữ liệu quan hệ
CHƯƠNG 16 Hệ quản trị cơ sở dữ liệu quan hệ RDBMS (Relational Database Management System) là một hệ quản trị cơ sở dữ liệu dựa trên mô hình quan hệ để làm việc với dữ liệu, khi đó dữ liệu được lưu trữ trong các đối tượng cơ sở dữ liệu được gọi là các bảng Với mỗi bảng, các cột tương ứng với các thuộc tính giữ một kiểu dữ liệu khác của bản ghi Mỗi bản ghi(record) trong cơ sở dữ được định nghĩa duy nhất với các key và tương ứng với một hàng trong một bảng Với thuộc tính của các hàng được thể hiện như một cột trong một bảng.
CHƯƠNG 17 Các quan hệ có thể được coi như là một tập hợp có chứa một loạt các thuộc tính mà đại diện cho cơ sở dữ liệu và thông tin được lưu trữ Khi đang định nghĩa một bảng để thêm các bản ghi thì mỗi phần tử trong một bản ghi phải tương ứng với kiểu dữ liệu được định nghĩa (như kiểu integer, date, ).
- Cấu trúc dạng bảng đơn giản và dễ dàng cho người sử dụng.
- Cho phép người dùng sử dụng CRUD (create, read, update và delete) với các bản ghi một cách dễ dàng bởi các câu lệnh.
RDBMS cho phép nhiều người dùng truy cập cơ sở dữ liệu đồng thời, nhờ vào chức năng quản lý giao dịch và khóa tích hợp Điều này giúp đảm bảo rằng dữ liệu được truy cập một cách an toàn ngay cả khi đang được thay đổi, từ đó ngăn chặn các sự cố có thể xảy ra khi nhiều người cùng làm việc trên dữ liệu và tránh việc người dùng truy cập vào dữ liệu chưa được cập nhật hoàn toàn.
RDBMS cho phép quản lý cơ sở dữ liệu một cách hiệu quả bằng cách hạn chế quyền truy cập chỉ cho những người dùng được uỷ quyền Hệ thống này còn cấp đặc quyền cho từng người dùng dựa trên loại nhiệm vụ mà họ cần thực hiện, đảm bảo an toàn và bảo mật cho dữ liệu.
- Tính ACID (Atomicity, Consistency, Isolation, Durability) của một transaction được đảm bảo.
Hệ thống quản lý cơ sở dữ liệu với tính toàn vẹn dữ liệu cao bao gồm các ràng buộc như khóa chính, khóa ngoại, và các mối quan hệ một-nhiều, nhiều-nhiều Điều này rất phù hợp cho các ứng dụng yêu cầu bảo mật cao, chẳng hạn như trong lĩnh vực ngân hàng và thương mại điện tử.
- Với database chuẩn 3, dữ liệu được đảm bảo tính đồng nhất và toàn vẹn(consistency).
- Việc mapping giữa các bảng trong database với các object trong code khá rắc rối và phức tạp.
- Performance sẽ bị chậm khi phải join nhiều bảng để lấy dữ liệu
- Việc thay đổi cấu trúc dữ liệu (Thêm/xóa bảng hoặc thêm/xóa một field) rất mệt mỏi, kéo theo vô số thay đổi trên code).
- Không làm việc được với dữ liệu không có cấu trúc (un-structure).
- RDBMS được thiết kế để chạy trên một máy chủ Khi muốn mở rộng, nó khó chạy trên nhiều máy (clustering).
- Vì dữ liệu mở rộng theo chiều dọc, nên khả năng lưu trữ cũng như xử lý sẽ khó khăn và chi phí tốn kém.
- Khi dữ liệu tăng lên cao, thì chi phí query cũng như độ phức tạp tăng theo Đặc biệt là với các query về sắp xếp, so sánh,…
1.3.2 Hệ quản trị cơ sở dữ liệu phi quan hệ
CHƯƠNG 20 Các RDBMS hiện tại đã bộc lộ những yếu kém như việc đánh chỉ mục một lượng lớn dữ liệu, phân trang, hoặc phân phối luồng dữ liệu media (phim, ảnh, nhạc ) Cơ sở dữ liệu quan hệ được thiết kế cho những mô hình dữ liệu nhỏ thường xuyên đọc viết trong khi các Social Network Services (dịch vụ mạng xã hội) lại có một lượng dữ liệu cực lớn và cập nhật liên tục do số lượng người dùng quá nhiều ở một thời điểm Thiết kế trên DistributedNoSQL giảm thiểu tối đa các phép tính toán, I/O liên quan kết hợp với batch processing đủ đảm bảo được yêu cầu xử lý dữ liệu của các mạng dịch vụ dữ liệu cộng đồng này Facebook, Amazon là những ví dụ điển hình Hệ quản trị cơ sở dữ liệu phi quan hệ sẽ được giới thiệu cụ thể hơn trong mục 1.4.
Giới thiệu về NoSQL
CHƯƠNG 21 Cơ sở dữ liệu NoSQL (viết tắt của “Not SQL” hoặc
NoSQL, viết tắt của "Not Only SQL", là một loại cơ sở dữ liệu không quan hệ, không sử dụng các bảng như MySQL hay SQL Server Thay vì áp dụng mô hình cơ sở dữ liệu quan hệ (RDBMS), NoSQL sử dụng mô hình lưu trữ key-value để lưu trữ và truy cập dữ liệu, mang lại sự linh hoạt và hiệu suất cao hơn cho các ứng dụng hiện đại.
NoSQL lưu trữ dữ liệu theo từng hạng mục với khóa duy nhất, cho phép quản lý thông tin một cách linh hoạt Hệ thống NoSQL sử dụng dữ liệu phân tán, nghĩa là nó không chỉ lưu trữ dữ liệu nhập vào mà còn có thể bao gồm dữ liệu từ các tệp tin, video và nhiều nguồn khác Dữ liệu này được phân bổ trên nhiều máy chủ khác nhau, mang lại một phương pháp lưu trữ đa dạng và hiệu quả hơn so với cơ sở dữ liệu quan hệ truyền thống.
CHƯƠNG 22 Với việc lưu trữ dữ liệu phân tán, NoSQL hỗ trợ rất tốt trong việc xử lý một khối lượng lớn dữ liệu lên đến hàng petabytes mà không cần phải có tài nguyên phần cứng cao Nó chia dữ liệu của mình ra để lưu trữ trên nhiều Server khác nhau tạo điều kiện cho việc mở rộng theo chiều ngang một cách thuận lợi với chi phí không quá cao Bên cạnh đó, việc lưu trữ trên nhiều Server cũng làm cho NoSQL có độ chịu tải và độ chịu lỗi cao.
CHƯƠNG 23 Hệ quản trị cơ sở dữ liệu NoSQL sử dụng định lý
Hệ quản trị cơ sở dữ liệu NoSQL sử dụng mô hình BASE để đảm bảo tính nhất quán của dữ liệu, trong khi hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) tuân theo định lý ACID Một lợi thế đáng kể của NoSQL so với RDBMS là khả năng mở rộng linh hoạt, cho phép mở rộng cả theo chiều ngang lẫn chiều dọc, trong khi RDBMS chỉ có thể mở rộng theo chiều dọc.
CHƯƠNG 24 Hệ quản trị cơ sở dữ liệu quan hệ hiển thị cơ chế chạy và hoạt động trên một máy duy nhất, do đó cần một máy mạnh và lớn để mở rộng quy mô Trong trường hợp này vì toàn bộ hệ quản trị cơ sở dữ liệu phụ thuộc vào một máy duy nhất và nếu máy đó gặp sự cố, thì toàn bộ hệ quản trị cơ sở dữ liệu sẽ đi xuống.
Giải pháp hiệu quả cho việc lưu trữ dữ liệu là sử dụng nhiều máy nhỏ thay vì một máy đơn lẻ, tạo thành một cụm máy Phương pháp này không chỉ tiết kiệm chi phí mà còn cho phép mở rộng dễ dàng Trong trường hợp một máy gặp sự cố, các máy khác vẫn duy trì độ tin cậy cao cho cụm Điều này phản ánh cơ chế hoạt động của cơ sở dữ liệu NoSQL, lý do khiến hệ quản trị cơ sở dữ liệu NoSQL ngày càng trở nên phổ biến.
1.4.2 Một số tính năng của NoSQL
CHƯƠNG 27 Hiệu suất và khả năng mở rộng tốt hơn trong NoSQL đạt được bằng cách hy sinh khả năng tương thích ACID ACID là viết tắt của tính nguyên tử, nhất quán, độc lập và bền vững Về cơ bản, khái niệm ACID xuất phát từ môi trường
SQL nhưng do yếu tố nhất quán, các giải pháp NoSQL tránh sử dụng khái niệm
ACID là một khái niệm quan trọng trong hệ quản trị cơ sở dữ liệu NoSQL, đặc biệt là trong các hệ thống phân tán, nơi dữ liệu được phân phối trên nhiều máy khác nhau trong cụm Để duy trì tính nhất quán, mọi thay đổi trong một bảng cần phải được cập nhật đồng thời trên tất cả các máy chứa dữ liệu Sự nhất quán chỉ đạt được khi thông tin về quá trình cập nhật được lan truyền ngay lập tức qua toàn bộ hệ thống Nếu không, sẽ dẫn đến tình trạng không nhất quán, và điều này tạo ra thách thức cho các giải pháp NoSQL trong việc áp dụng khái niệm ACID.
CHƯƠNG 29 BASE là đảo ngược của ACID và thuật ngữ này là viết tắt của trạng thái
Hệ thống cần đảm bảo tính sẵn sàng, mềm mỏng và nhất quán bằng cách sử dụng sao chép và phân bổ dữ liệu, đồng thời áp dụng sharding để giảm thiểu khả năng dữ liệu không khả dụng Nhờ đó, hệ thống vẫn duy trì tính khả dụng ngay cả khi một số mạng con dữ liệu bị hỏng trong thời gian ngắn.
BASE được hình thành thông qua việc hỗ trợ sự cố từng phần mà không làm gián đoạn toàn bộ hệ thống Chẳng hạn, trong hệ quản trị cơ sở dữ liệu ngân hàng, khi hai người cùng cố gắng truy cập vào một tài khoản từ hai địa điểm khác nhau, việc cập nhật dữ liệu kịp thời là cần thiết Điều này đòi hỏi sự hỗ trợ từ các hệ quản trị cơ sở dữ liệu thời gian thực để đảm bảo tính chính xác và đồng bộ của thông tin.
Một số ví dụ khác về tình huống tương tự có thể là đặt vé trực tuyến và các nền tảng mua sắm trực tuyến.
CHƯƠNG 31 CAP là viết tắt của Tính nhất quán, Tính khả dụng và Dung sai phân vùng.
CHƯƠNG 32 Định lý CAP dựa trên ba nguyên tắc này.
CHƯƠNG 33 C viết tắt “Consistency”: Tính nhất quán có nghĩa dữ liệu phải nhất quán và có sẵn trên tất cả các máy phải giống nhau về mọi mặt và quá trình cập nhật phải chạy trên tất cả các máy thường xuyên.
CHƯƠNG 34 A viết tắt “Availability”: Tính khả dụng nghĩa là dữ liệu phải luôn sẵn sàng cho khách hàng và phải có thể truy cập bất cứ lúc nào.
CHƯƠNG 35 P viết tắt “Partition tolerance”: Dung sai phân vùng nếu do lỗi hệ thống và lỗi trong các nút, các hệ quản trị cơ sở dữ liệu phải hoạt động tốt bất chấp các phân vùng mạng vật lý, tức là dung sai phân vùng.
CHƯƠNG 36 Có nhiều loại cơ sở dữ liệu NoSQL khác nhau và mỗi loại có một bộ tính năng và đặc điểm riêng, và những điều này dẫn đến sự khác biệt về hiệu suất.
Các loại cơ sở dữ liệu NoSQL khác nhau:
CHƯƠNG 41 Các hệ quản trị cơ sở dữ liệu NoSQL cung cấp hiệu suất tăng nhưng một số nhà nghiên cứu nghi ngờ về tính nhất quán của dữ liệu. a Bảng 1.1: Phân loại hệ quản trị CSDL NoSQL
Hệ quản trị NoS QL
CHƯƠNG 49.CHƯƠNG 50.CHƯƠNG 51 CHƯƠNG 52 CHƯƠNG 53 CHƯƠNG 54.CHƯƠNG 55.
Cao Cao Cao Vừa phải
Cơ sở dữ liệ u cột
Hư ớn g đối tượ ng
Lý thu yết đồ thị
1.4.3 So sánh CSDL NoSQL và CSDL SQL a Bảng 1.2: So sánh CSDL SQL và CSDL NoSQL
Mỗi cơ sở dữ liệu được tạo thành từ các bảng có mối quan hệ với nhau, trong đó mỗi hàng đại diện cho một bản ghi và mỗi cột tương ứng với một trường dữ liệu, được xây dựng dựa trên các tài liệu.
CHƯƠNG 85. Không có ngôn ngữ Query.
Kém hơn NoSQL vì mỗi khi truy vấn nó phải tính toán, kiểm tra và xử lý các
Một số hệ quản trị cơ sở dữ liệu NoSQL phổ biến
1.5.1 Hệ quản trị cơ sở dữ liệu Cassandra
Apache Cassandra là một hệ quản trị cơ sở dữ liệu NoSQL phân tán, được phát triển bởi Facebook và trở thành mã nguồn mở vào năm 2008 Từ năm 2009, Cassandra đã được chuyển giao cho Apache Hệ thống này lưu trữ dữ liệu bằng cách phân tán chúng trên nhiều nút khác nhau trong một cụm, giúp đảm bảo khả năng xử lý dữ liệu nhanh chóng và an toàn ngay cả khi có một hoặc nhiều nút gặp sự cố.
Apache Cassandra là hệ quản trị cơ sở dữ liệu NoSQL, lưu trữ dữ liệu theo dạng cột rộng, kết hợp giữa khóa-giá trị và bảng Thành phần chính của Cassandra là Keyspace, có ba thuộc tính quan trọng.
- Yếu tố nhân bản: quy định số lượng nút trong cụm sẽ nhận bản copy của cùng một dữ liệu.
- Chiến lựơc nhân bản: quy định cách lưu trữ các bản sao, ví dụ như simple strategy, old network topology strategy, network topology strategy
Họ cột là một cấu trúc dữ liệu đặc biệt, trong đó mỗi họ cột bao gồm nhiều dòng và mỗi dòng chứa nhiều cột theo thứ tự nhất định Khác với cơ sở dữ liệu quan hệ, người dùng có thể linh hoạt thêm cột bất kỳ lúc nào, và các dòng không cần phải có cùng một số cột Thông thường, mỗi Keyspace sẽ có ít nhất một hoặc nhiều họ cột để tổ chức dữ liệu hiệu quả.
CHƯƠNG 110 Các đặc điểm nổi bật:
Chấp nhận sai sót là điều cần thiết trong quản lý dữ liệu, vì thông tin thường được sao chép thành nhiều bản trên các máy chủ khác nhau Điều này đảm bảo rằng nếu một máy chủ gặp sự cố, người dùng vẫn có thể truy xuất dữ liệu từ các máy chủ còn lại, giúp bảo vệ và duy trì tính toàn vẹn của thông tin.
Tính co giãn của hệ thống cho phép khả năng đọc và ghi tăng lên một cách tuyến tính khi số lượng máy trong cụm được mở rộng, đồng thời đảm bảo không có thời gian chết hay gián đoạn cho các ứng dụng đang hoạt động.
Trong các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS), người dùng phải định nghĩa trước các cột trong bảng Tuy nhiên, với Cassandra, người dùng không cần phải thực hiện điều này, mà có thể dễ dàng thêm vào số lượng cột tùy theo nhu cầu của bài toán.
Cassandra cung cấp tính sẵn sàng cao trong các tác vụ đọc/ghi, cho phép thực hiện trên bản sao gần nhất hoặc tất cả các bản sao Quyết định này phụ thuộc vào thông số mức độ nhất quán được thiết lập ban đầu.
- Tính điều hướng nhất quán: Đọc và ghi đưa ra một yêu cầu về tính nhất quán với việc "việc ghi không bao giờ bị lỗi".
- Hỗ trợ Map/Reduce: Cassandra có tích hợp thêm cả Hadoop đồng nghĩa với việc hỗ trợ map/reduce.
- Có truy vấn theo ngôn ngữ riêng: CQL (viết tắt của Cassandra Query Language) là một thay thể của SQL – giống với các giao thức RPC truyền thống.
Nó được điều khiển bởi Java và Python
1.5.2 Hệ quản trị cơ sở dữ liệu Redis
Redis là một hệ quản trị cơ sở dữ liệu NoSQL nổi bật, chuyên lưu trữ dữ liệu theo dạng Khóa-Giá trị và được ứng dụng rộng rãi Hệ thống này hỗ trợ đa dạng các kiểu dữ liệu như strings, hashes, lists, sets và sorted sets Ngoài ra, Redis còn cho phép viết kịch bản bằng ngôn ngữ Lua, mang lại sự linh hoạt cho người dùng.
Redis không chỉ hỗ trợ lưu trữ dữ liệu dưới dạng Khóa-Giá trị trên RAM mà còn cho phép lưu trữ trên đĩa cứng, giúp phục hồi dữ liệu khi hệ thống gặp sự cố Tính năng sao chép của Redis cho phép đồng bộ hóa giữa hai cơ sở dữ liệu Redis, nâng cao tính khả dụng Bên cạnh đó, Redis cũng đang phát triển tính năng cụm để cải thiện khả năng cân bằng tải.
CHƯƠNG 113 Redis có những ưu điểm:
- Redis hỗ trợ thêm mới, cập nhật, xoá dữ liệu một cách nhanh chóng.
- Lưu trữ dữ liệu dạng KHÓA-GIÁ TRỊ.
Dữ liệu được lưu trữ trên RAM cho phép truy xuất nhanh chóng, trong khi Redis cũng hỗ trợ cấu hình để lưu trữ dữ liệu trên ổ cứng.
- Tụ cấu hình cho key tự động xoá trong khoảng thời gian nhất định.
- Hỗ trợ nhiều loại kiểu dữ liệu khác nhau.
Hệ thống hàng đợi (Queue) có thể được hỗ trợ thông qua cơ chế PUB/SUB, và Redis là một giải pháp lý tưởng để triển khai hệ thống này Sử dụng Redis, chúng ta có thể xử lý tuần tự từng yêu cầu trên website một cách hiệu quả.
CHƯƠNG 114 Các kiểu dữ liệu trong Redis:
CHƯƠNG 115 STRING: string, integer hoặc float Redis có thể làm việc với cả string, từng phần của string, cũng như tăng/giảm giá trị của integer, float.
CHƯƠNG 116 LIST: danh sách liên kết của các strings.
Redis hỗ trợ các thao tác push, pop từ cả 2 phía của list, trim dựa theo offset, đọc 1 hoặc nhiều items của list, tìm kiếm và xóa giá trị.
Chapter 117 discusses sets in Redis, which are collections of unordered strings Redis enables operations such as adding, reading, deleting individual elements, and checking for the presence of elements within a set Additionally, Redis supports set operations, including intersection, union, and difference.
Chương 118 của Redis giới thiệu về hash, một cấu trúc lưu trữ cho các cặp khóa-giá trị với key được sắp xếp ngẫu nhiên Redis cho phép thực hiện các thao tác như thêm, đọc và xóa từng phần tử, đồng thời hỗ trợ đọc tất cả các giá trị trong hash table.
CHƯƠNG 119 ZSET là một cấu trúc dữ liệu trong Redis, bao gồm danh sách các phần tử được lưu trữ dưới dạng bản đồ giữa một chuỗi và một giá trị kiểu thập phân, với các phần tử được sắp xếp theo giá trị này Redis cho phép người dùng thực hiện các thao tác như thêm, đọc và xóa từng phần tử, cũng như truy xuất các phần tử dựa trên khoảng giá trị hoặc chuỗi.
1.5.3 Hệ quản trị cơ sở dữ liệu OrientDB
OrientDB là một hệ quản trị cơ sở dữ liệu NoSQL mã nguồn mở được phát triển bằng Java, cho phép xử lý các mối quan hệ thông qua hệ thống cơ sở dữ liệu đồ thị kết nối trực tiếp giữa các bản ghi Hệ thống này hỗ trợ nhiều loại lược đồ, bao gồm lược đồ đầy đủ, lược đồ ít hơn và mô hình lược đồ hỗn hợp Đặc biệt, OrientDB sử dụng thuật toán lập chỉ mục MVRB-Tree, một cải tiến từ Cây Đỏ-Đen và Cây B+, mang lại hiệu suất cao trong cả việc chèn và tra cứu dữ liệu.
CHƯƠNG 121 Các tính năng của nó là:
- Giao dịch: hỗ trợ Giao dịch ACID Khi gặp sự cố, nó phục hồi các tài liệu đang chờ xử lý.
- GraphDB: quản lý riêng các biểu đồ Tuân thủ 100% với tiêu chuẩn TinkerPop Blueprints cho hệ quản trị cơ sở dữ liệu đồ thị.
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MONGODB VÀ GIẢI PHÁP BẢO MẬT TRONG MONGODB
Tổng quan về hệ quản trị CSDL MongoDB
MongoDB là một hệ quản trị cơ sở dữ liệu mã nguồn mở, thuộc loại NoSQL, được sử dụng rộng rãi bởi hàng triệu người Được viết bằng C++, MongoDB hoạt động như một cơ sở dữ liệu hướng tài liệu, lưu trữ dữ liệu dưới dạng document kiểu JSON thay vì dạng bảng như các cơ sở dữ liệu quan hệ Điều này giúp tăng tốc độ truy vấn, mang lại hiệu suất cao, tính khả dụng tốt và khả năng mở rộng dễ dàng.
CHƯƠNG 136. a Hình 2.3: MongoDB là một hệ quản trị cơ sở dữ liệu NoSQL
Trong cơ sở dữ liệu quan hệ như MySQL hay SQL Server, dữ liệu được lưu trữ trong các bảng Tuy nhiên, MongoDB sử dụng khái niệm collection thay vì bảng để tổ chức và lưu trữ dữ liệu.
Trong MongoDB, collection tương đương với bảng trong RDBMS, trong khi document tương ứng với hàng MongoDB sử dụng các document thay vì hàng như trong RDBMS Các collection trong MongoDB có cấu trúc linh động, cho phép lưu trữ dữ liệu mà không cần tuân theo một cấu trúc cứng nhắc.
CHƯƠNG 140 MongoDB được thiết kế để đáp ứng nhu cầu của các ứng dụng hiện đại với nền tảng công nghệ cho phép:
- Mô hình hóa dữ liệu tài liệu: MongoDB đưa ra cho chúng ta cách tốt nhất để làm việc với dữ liệu.
- Thiết kế hệ thống phân tán: cho phép chúng ta đưa dữ liệu vào nơi mình muốn một cách thông minh.
Một trải nghiệm thống nhất mang đến cho người dùng sự tự do khám phá mọi nơi, đồng thời giúp họ chứng minh năng lực của bản thân cho tương lai Điều này cũng giúp loại bỏ sự phụ thuộc vào nhà cung cấp, tạo điều kiện cho sự phát triển bền vững.
CHƯƠNG 141 Hiện nay, MongoDB được sử dụng khá nhiều trong các ứng dụng như Google, Facebook, Ebay, Adobe, Năm
Vào năm 2020, MongoDB đã được công nhận là cơ sở dữ liệu NoSQL phổ biến và được ưa chuộng nhất Nhiều người dùng trên các diễn đàn công nghệ đã đánh giá cao dịch vụ của MongoDB nhờ vào giao diện nhất quán, giúp đơn giản hóa quy trình làm việc với dữ liệu và hỗ trợ phát triển sản phẩm hiệu quả.
Kể từ năm 2013, MongoDB đã trở thành một trong những cơ sở dữ liệu phổ biến nhất, vượt qua các đối thủ như IBM DB2, Microsoft Access và SQLite Với sự phát triển mạnh mẽ của dữ liệu phi cấu trúc, MongoDB hiện đứng thứ 5 trong bảng xếp hạng và là cơ sở dữ liệu đa mô hình hướng tài liệu duy nhất nằm trong top này.
25 của bảng xếp hạng này Biểu đồ dưới đây đã cho thấy sự gia tăng và phát triển không ngừng của MongoDB trong suốt giai đoạn đó:
CHƯƠNG 143. a Hình 2.4: Sự phát triển của MongoDB từ năm 2013 đến năm 2021
CHƯƠNG 144 Một số khái niệm trong MongoDB:
Chương 145 đề cập đến cơ sở dữ liệu (database) trong MongoDB, được coi là một container chứa các collection tương tự như các bảng trong hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) Mỗi database bao gồm một tập hợp các file trên hệ thống file, và một server MongoDB có khả năng lưu trữ nhiều database khác nhau.
Chương 146 Collection là một nhóm dữ liệu cùng loại do người dùng xác định Khác với table trong RDBMS, collection không có ràng buộc hay quan hệ với các collection khác Mỗi dữ liệu trong collection không bị giới hạn về số trường như các row trong table.
CHƯƠNG 147. a Hình 2.5: Dữ liệu trong Collection
CHƯƠNG 148 Document là một loại tài liệu lưu trữ dưới dạng JSON, tương đương với một hàng (row) trong bảng của hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) Tuy nhiên, dữ liệu trong document có tính linh hoạt cao, không bị giới hạn về số lượng trường và mỗi trường có thể chứa dữ liệu không cố định.
CHƯƠNG 149. a Hình 2.6: Dữ liệu trong Document
Chương 150 Trường _id là một trường bắt buộc trong mỗi tài liệu của MongoDB, đại diện cho các giá trị duy nhất cho từng tài liệu Nếu không được thiết lập giá trị, MongoDB sẽ tự động tạo ra trường này.
Trong Chương 151, trường (field) được định nghĩa là một cặp key-value, cho phép một document có thể không chứa trường nào hoặc có thể chứa nhiều trường Các trường này tương tự như các cột trong hệ quản trị cơ sở dữ liệu quan hệ (RDBMS).
Chapter 152 discusses embedded documents in MongoDB, highlighting that unlike traditional RDBMS where tables are joined (for instance, linking a person table with an address table to identify associated addresses), MongoDB allows a person document to contain an array of embedded address documents.
2.1.2 Các thành phần trong MongoDB
CHƯƠNG 153. a Hình 2.7: Thành phần trong MongoDB
CHƯƠNG 154 Về mặt kiến trúc , MongoDB gồm có 4 thành phần:
CHƯƠNG 155 - Mongod: đây là một node để lưu trữ và truy xuất dữ liệu
CHƯƠNG 156 - Shard: đây là một tập hợp gồm nhiều Mongod tạo thành một cụm dữ liệu , mỗi mongod là một bản sao dữ liệu.
Kiến trúc Master-Slave trong mỗi Shard bao gồm một bản sao Master và nhiều bản sao Slave Chỉ có bản sao Master có quyền đọc và ghi dữ liệu, trong khi các bản sao Slave chỉ cho phép thực hiện thao tác đọc dữ liệu.
Config server trong MongoDB đóng vai trò quan trọng như một bộ chứa siêu dữ liệu cho các đối tượng được lưu trữ trong mongod Nó sẽ được sử dụng khi các mongod gặp sự cố Thông thường, một hệ cơ sở dữ liệu MongoDB sẽ có từ 1 đến 3 Config Server để đảm bảo tính ổn định và khả năng phục hồi.
Mongos là thành phần duy nhất trong MongoDB có khả năng giao tiếp với các thành phần bên ngoài, tiếp nhận và chuyển tiếp yêu cầu từ máy khách đến vùng thích hợp Hệ thống giao tiếp giữa các thành phần tạo ra cơ chế sharding, cho phép MongoDB chia nhỏ khối dữ liệu lớn thành nhiều phần để lưu trữ phân tán, từ đó nâng cao khả năng mở rộng và xử lý Sau khi chia nhỏ, các bản dữ liệu sẽ được nhân bản thành nhiều mongos, tạo thành một shard Mỗi mongos có thể là một collection hoặc một phần của collection, và một collection có thể trải dài trên nhiều shard khác nhau Địa chỉ và cấu hình của các shard được lưu trữ trên config server, giúp mongod tìm kiếm vị trí dữ liệu khi nhận yêu cầu từ máy khách, lấy dữ liệu từ các shard và trả về cho máy khách.
2.1.3 Các tính năng nổi bật của MongoDB
CHƯƠNG 160 2.1.3.1 Truy vấn Ad hoc
Quản trị CSDL MongoDB
CHƯƠNG 190 Để tạo một database trong MongoDB sử dụng cú pháp:
CHƯƠNG 191 Trong đó: databaseName là tên của database muốn tạo.
Lệnh USE được dùng để xác định cơ sở dữ liệu mà bạn muốn kết nối Nếu cơ sở dữ liệu được chỉ định chưa tồn tại, hệ thống sẽ tự động tạo một cơ sở dữ liệu mới với tên mà bạn đã cung cấp.
CHƯƠNG 193 Để xem tất cả các database đã được tạo trên MongoDB sử dụng cú pháp:
CHƯƠNG 194 Lệnh trên sẽ chỉ hiện ra các database đã có ít nhất một collection, còn nếu database nào chưa có thì nó sẽ không hiện.
CHƯƠNG 195 Để xóa database trong MongoDB sử dụng cú pháp:
Lệnh này được sử dụng để xóa cơ sở dữ liệu đang hoạt động Để thực hiện thành công, bạn cần phải kết nối với cơ sở dữ liệu mà bạn muốn xóa.
Trong MongoDB, khái niệm lưu trữ dữ liệu được đổi mới so với các hệ quản trị cơ sở dữ liệu RDBMS truyền thống, nơi sử dụng các bảng (table) Thay vào đó, MongoDB sử dụng các Collection để tổ chức và lưu trữ dữ liệu một cách linh hoạt và hiệu quả hơn.
CHƯƠNG 198 Để tạo collection trong MongoDB ta sử dụng cú pháp:
• collectionName là tên của collection muốn tạo.
An option is an object that contains specific settings for a collection These settings include commands such as "use databaseName" to select a database, "show dbs" or "show databases" to display existing databases, "db.dropDatabase()" to delete a database, and "db.createCollection(collectionName, option)" to create a new collection with the specified options.
Capped là một thông số cấu hình quan trọng, xác định hành động sẽ diễn ra khi collection vượt quá dung lượng tối đa cho phép (size) Khi capped: true, hệ thống sẽ tự động ghi đè lên các dữ liệu cũ nhất khi dung lượng vượt quá giới hạn.
autoIndexId là một tham số cấu hình xác định việc có nên đánh chỉ mục cho trường _id hay không Nếu giá trị của autoIndexId là true, trường _id sẽ được đánh chỉ mục Tuy nhiên, cần lưu ý rằng tùy chọn này sẽ bị xóa trong phiên bản 3.4.
• size - Xác định kích cỡ tối ta collection có thể chứa (đơn vị byte).
• max - Xác định số tài liệu tối ta mà một capped collection có thể chứa.
• storageEngine - Cấu hình storageEngine cho collection
• validator - cấu hình định dạng cho dữ liệu của các trường
• validationLevel - xác định độ nghiêm ngặt của validator ở trên Giá trị có thể là:
CHƯƠNG 200 "off" - không validator khi insert hoặc update.
CHƯƠNG 201 "strict" - Đây là giá trị mặc định Thiết lập validator với mọi câu lệnh insert và update.
CHƯƠNG 202 "moderate" - thiết lập validator cho các rule được liệt kê ở validator, nhếu trường nào không có thì nó sẽ không áp dụng.
• validationAction - thiết lập trạng thái khi dữ liệu không khớp với validator Giá trị có thể điền vào là "error" hoặc "warn".
Để thực hiện lệnh createCollection trong MongoDB, cần khai báo sử dụng database Để xóa một collection, sử dụng cú pháp db.collectionName.drop().
CHƯƠNG 205 Để xem danh sách các collection đang có trong database sử dụng cú pháp:
CHƯƠNG 206 MongoDB cung cấp 3 phương thức để thực hiện việc thêm mới dữ liệu vào trong collection Bao gồm các phương thức sau:
CHƯƠNG 208 Phương thức insert trong MongoDB dùng để thêm mới một hoặc nhiều dữ liệu vào trong MongoDB, cú pháp sử dụng:
- collectionName là tên của collection chúng ta cần thêm dữ liệu vào.
Dữ liệu có thể được biểu diễn dưới dạng một đối tượng, bao gồm các trường và giá trị của nó, hoặc dưới dạng một mảng đối tượng, cho phép bạn thêm nhiều bản ghi trong một lần khai báo.
CHƯƠNG 212 Phương thức insertOne trong MongoDB có tác dụng cho phép chúng ta insert một dữ liệu vào trong MongoDB trên một lần khai báo, cú pháp sử dụng:
- collectionName là tên của collection chúng ta cần thêm dữ liệu vào.
- data là một obejct chứa dữ liệu chúng ta cần thêm vào. show collections db.collectionName.insert(data) db.collectionName.insertOne(data)
CHƯƠNG 216 Phương thức insertMany cho phép chúng ta thêm mới nhiều dữ liệu vào trong MongoDB, cú pháp sử dụng: CHƯƠNG 217.
- collectionName là tên của collection chúng ta cần thêm dữ liệu vào.
- data là một mảng obejct chứa dữ liệu chúng ta cần thêm vào.
Khi sử dụng ba phương thức trên, nếu collectionName chưa tồn tại trong hệ thống, MongoDB sẽ tự động tạo mới collection và chèn dữ liệu vào ngay lập tức.
CHƯƠNG 220 Để xóa dữ liệu trong MongoDB thì ta sử dụng phương thức remove() với cú pháp:
- collectionName là tên của collection mà bạn muốn thực thi lệnh xóa document.
- query là object (hay còn gọi là document) chứa các câu truy vấn để lọc dữ liệu.
- justOne là tham số cấu hình số lượng bản ghi có thể xóa khi query thực thi khớp.
- Nếu justOne: true thì nó sẽ chỉ xóa 1 bản ghi duy nhất.
- Nếu justOne: false thì nó sẽ xóa tất cả các bản ghi khớp với điều kiện query.
- writeConcern là một document chứa write concern và không bắt buộc.
- collation là một document chứa các quy tắc và không bắt buộc.
Chapter 223 highlights that, in addition to the remove() method, MongoDB also offers deleteOne() and deleteMany() methods for deleting single or multiple documents based on specified filters The syntax for inserting multiple documents is db.collectionName.insertMany(data), while the removal of documents can be executed using db.collectionName.remove().
, { justOne: , writeConcern: , collation:
CHƯƠNG 224 2.2.5.1 Lấy tất cả dữ liệu trong collection
CHƯƠNG 225 Để lấy tất cả dữ liệu ở trong collection sử dụng phương thức find() với cú pháp:
CHƯƠNG 227 Trong đó: collectionName là tên của collection muốn truy vấn.
CHƯƠNG 228 Tuy nhiên, khi chỉ sử dụng mỗi phương thức find thì dữ liệu trả về sẽ dưới dạng object nhưng không theo một cấu trúc nào cả.
CHƯƠNG 229 Để dữ liệu trả về được hiển thị theo cấu trúc đã được định sẵn thì ta sử dụng phương thức pretty() với cú pháp:
CHƯƠNG 231 2.2.5.2 Truy vấn có điều kiện
CHƯƠNG 232 Để thực hiện truy vấn có điều kiện trong MongoDB, chúng ta sử dụng cú pháp tương tự như khi lấy tất cả dữ liệu Tuy nhiên, lần này, chúng ta sẽ thêm điều kiện vào trong hàm find() với cú pháp thích hợp.
- collectionName là tên của collection mà bạn muốn truy vấn.
- condition là object chứa mệnh đề điều kiện.
CHƯƠNG 240 {key: value} CHƯƠNG 241 db. admin.find({name:
CHƯƠNG 242 "Tr an Huong" }).pretty() db.collectionName.find() db.collectionName.find().pretty() db.collectionName.find(condition)
CHƯƠNG 243 Nh ỏ hơn (Less Than )
CHƯƠNG 245. db.admin.find({age: {
CHƯƠNG 247 Nh ỏ hơn bằng (Less
CHƯƠNG 250. db.admin.find({age: {
CHƯƠNG 255. db.admin.find({age: {
CHƯƠNG 258 (Gr eater Than Equals)
CHƯƠNG 260. db.admin.find({age: {
CHƯƠNG 262 Kh ác (Not Equals)
CHƯƠNG 264. db.admin.find({age: {
CHƯƠNG 268. db.admin.find({age: {
CHƯƠNG 270 Kh ông Thuộc (Not In)
CHƯƠNG 272. db.admin.find({age: {
CHƯƠNG 274 Chú ý: Ngoài phương thức find(), trong
MongoDB còn có phương thức findOne() chỉ trả về một
CHƯƠNG 275 2.2.5.3 Truy vấn nhiều điều kiện
Trong phương thức find() của MongoDB, khi bạn truyền nhiều khóa (key) được phân tách bằng dấu phẩy (,), hệ thống sẽ hiểu đó là điều kiện AND Cú pháp cơ bản cho điều kiện AND trong MongoDB cho phép bạn lọc dữ liệu theo nhiều tiêu chí đồng thời.
Để sử dụng mệnh đề $or trong MongoDB, bạn cần truyền một key scope có tên là $or, chứa mảng các điều kiện hoặc.
Kết hợp cả AND và OR
Để kết hợp cả AND và OR trong truy vấn, bạn chỉ cần áp dụng phương pháp tương tự như khi thực hiện truy vấn AND Đối với các truy vấn có điều kiện OR, bạn cũng làm theo cách tương tự như với truy vấn OR.
Trong MongoDB, việc sử dụng index giúp tối ưu hóa hiệu suất truy vấn Nếu không có index, MongoDB sẽ phải quét toàn bộ các document trong một collection để tìm kiếm những document phù hợp với điều kiện truy vấn Tuy nhiên, khi có index, MongoDB có khả năng hạn chế số lượng document cần kiểm tra, từ đó cải thiện tốc độ truy vấn đáng kể.
Các cơ chế bảo mật của MongoDB
2.3.1 Cơ chế xác thực trong MongoDB
Xác thực là quá trình xác minh danh tính của người dùng, yêu cầu tất cả các máy khách trong MongoDB phải xác thực khi kiểm soát truy cập được kích hoạt Mặc dù xác thực và ủy quyền có mối liên hệ chặt chẽ, nhưng chúng khác nhau: xác thực xác minh danh tính người dùng, trong khi ủy quyền xác định quyền truy cập và tương tác của người dùng trong phạm vi tài nguyên giới hạn.
CHƯƠNG 320 2.3.1.1 Phương thức xác thực
CHƯƠNG 321 Gồm 2 phương thức xác thực:
Chương 322 đề cập đến việc xác thực người dùng, bao gồm việc cung cấp tên người dùng, mật khẩu đăng nhập và cơ sở dữ liệu xác thực liên quan đến người dùng đó.
CHƯƠNG 323 Xác thực bằng cách sử dụng mongoshell:
CHƯƠNG 324 Sử dụng các tùy chọn câu lệnh mongo xác thực ( username, password và authenticationDatabase) khi kết nối với mongob hoặc mongos.
CHƯƠNG 325 Kết nối với mongod hoặc mongos, sau đó chạy lệnh authenticate hoặc phương thức db.auth() dựa trên cơ sở dữ liệu xác thực.
Việc xác thực nhiều lần với các vai trò khác nhau không làm mất thông tin đăng nhập của người dùng đã được xác thực trước đó Tuy nhiên, điều này có thể dẫn đến việc kết nối với nhiều quyền hạn hơn so với mong muốn của người dùng, gây ra lỗi trong các hoạt động của một phiên logic.
CHƯƠNG 327 2.3.1.2 Cơ chế xác thực
Trước khi người dùng có quyền truy cập vào hệ thống MongoDB, họ cần xác thực danh tính của mình Quy trình này đảm bảo rằng chỉ những ứng dụng được phép mới có thể truy cập vào dữ liệu được lưu trữ, ngăn chặn việc truy cập trái phép từ các nguồn không có quyền hạn.
CHƯƠNG 329 MongoDB hỗ trợ hai cơ chế xác thực để người dùng xác minh danh tính của họ:
CHƯƠNG 330 Ngoài ra, MongoDB Enterprise cũng cung cấp hỗ trợ xác thực LDAP proxy và xác thực Kerberos.
CHƯƠNG 332 Cơ chế xác thực thách thức – phản hồi có Salt (Salted Challenge Response Authentication Mechanism - SCRAM) là cơ chế xác thực mặc định cho MongoDB.
SCRAM, theo tiêu chuẩn IETF RFC 5802, xác định các phương pháp tốt nhất để triển khai cơ chế xác thực người dùng bằng mật khẩu.
MongoDB sử dụng SCRAM để xác thực thông tin người dùng thông qua tên đăng nhập, mật khẩu và cơ sở dữ liệu xác thực Cơ sở dữ liệu xác thực là nơi người dùng được tạo ra cùng với tên đăng nhập, nhằm mục đích xác minh danh tính người dùng.
CHƯƠNG 335 Việc triển khai SCRAM của MongoDB cung cấp:
- Khả năng hiệu chỉnh luồng dữ liệu
- Thêm ngẫu nhiên hàm Salt vào mỗi người dùng
- Xác thực máy chủ đối với máy client và ngược lại MongoDB hỗ trợ 2 cơ chế SCRAM: a Bảng 2.3: Cơ chế SCRAM trông MongoDB
CHƯƠNG 338 SHA-1 Sử dụng hàm băm SHA-1
Thay đổi số lần lặp của mã SHA -1
Sử dụng hàm băm SHA – 256 ký tự và yêu cầu featureCompatibilityVersion set tới phiên bản 4.0 Thay đổi số lần lặp của mã SHA 256
Để triển khai MongoDB trong phát triển phần mềm và sản xuất, cần có chứng chỉ hợp lệ được tạo và ký bởi tổ chức phát hành chứng thực số Người dùng hoặc tổ chức có thể tự tạo và duy trì tổ chức phát hành chứng thực độc lập hoặc sử dụng chứng thực số từ các nhà cung cấp dịch vụ TLS/SSL bên thứ ba.
Trong chương 342, máy Client có thể sử dụng chứng thực x.509 để xác thực với máy chủ thay vì sử dụng tên người dùng và mật khẩu Chứng thực số từ phía client cần phải đảm bảo các thuộc tính nhất định.
ƯƠ Tổ chức phát hành chứng thực số (CA) phải cấp chứng chỉ xác thực cho cả máy client và máy chủ.
ƯƠ Chứng thư số bên client phải chứa các trường sau:
ƯƠ keyUsage = digitalSignature; extendedKeyUsage = clientAuth;
CHƯƠNG 346 Ứng với mỗi người dùng chỉ tồn tại một chứng thư số duy nhất.
Chapter 347 discusses that the Client object of X.509 contains a distinguished name (DN) that differs from the Member object of X.509 It is essential that at least one of the attributes—Organization (O), Organizational Unit (OU), or Domain Component (DC)—in the client's digital certificate is distinct from the attributes in the net.tls.clusterFile and net.tls.certificateKeyFile on the server.
CHƯƠNG 348 Nếu việc triển khai MongoDB đã được tlsX509ClusterAuthDNOverride set, thì đối tượng của chứng chỉ X.509 bên client cũng phải khác với giá trị đó.
- Người dùng và cơ sở dữ liệu $external
Để xác thực chứng thư client trong MongoDB, trước tiên cần thêm giá trị subject của chứng chỉ máy khách như một người dùng MongoDB Mỗi chứng thư client X.509 phải tương ứng với một người dùng MongoDB duy nhất, vì không thể dùng một chứng thư client để xác thực cho nhiều người dùng khác nhau.
$external (Kerberos, LDAP, X.509), tên người dùng không được lớn hơn 10.000 bytes.
CHƯƠNG 351 Để kết nối và xác thực bằng chứng chỉ client X.509:
ƯƠ Đối với MongoDB 4.2 trở lên, bao gồm các tùy chọn sau cho ứng dụng khách:
CHƯƠNG 355 tlsCertificateKeyFilePassword nếu file khóa chứng thư được mã hóa
ƯƠ Đối với MongoDB 4.0 trở về trước, bao gồm các tùy chọn sau cho ứng dụng máy khách:
CHƯƠNG 361 sslPEMKeyPassword nếu sslPEMKeyFile được mã hóa
2.3.2 Cơ chế ủy quyền trong mongodb
MongoDB áp dụng cơ chế kiểm soát truy cập dựa trên vai trò (RBAC) để quản lý quyền truy cập vào hệ thống Người dùng được cấp một hoặc nhiều vai trò, xác định quyền truy cập vào các hoạt động và tài nguyên cơ sở dữ liệu Ngoài việc thực hiện nhiệm vụ của từng vai trò, người dùng sẽ không có quyền truy cập vào hệ thống.
Trong Chương 366, role có thể bao gồm một hoặc nhiều role đã được xác định trước, cho phép kế thừa tất cả các đặc quyền từ các role khác trong cơ sở dữ liệu Đặc biệt, role được tạo với quyền Admin có khả năng kế thừa đặc quyền từ các role khác trong bất kỳ cơ sở dữ liệu nào.
CHƯƠNG 367 2.3.2.2 Xem quyền của role
Người dùng có thể kiểm tra các đặc quyền của một vai trò bằng cách sử dụng rolesInfo với các trường showPrivileges và showBuiltinRoles được thiết lập thành true Điều này cho phép gán vai trò cần thiết cho người dùng trong quá trình tạo tài khoản mới hoặc cập nhật tài khoản hiện có để gán hoặc thu hồi vai trò.
Trong MongoDB, người dùng được gán với một role cụ thể sẽ nhận được tất cả các đặc quyền tương ứng với role đó Một người dùng có thể sở hữu nhiều role, cho phép thực thi quyền trên các cơ sở dữ liệu khác nhau khi được gán các role trong các cơ sở dữ liệu khác nhau.
CHƯƠNG 370 2.3.2.3 Tính năng kiểm soát truy cập
MongoDB không kích hoạt tính năng kiểm soát truy cập mặc định khi bắt đầu sử dụng Người dùng có thể bật ủy quyền bằng cách thiết lập cài đặt auth hoặc security authorization Khi kích hoạt xác thực nội bộ, cơ chế ủy quyền bên phía client cũng sẽ được kích hoạt Sau khi kiểm soát truy cập được bật, người dùng sẽ phải thực hiện xác thực để truy cập vào cơ sở dữ liệu.
Kết luận
Chương 2 của đồ án đã cung cấp cái nhìn tổng quan về hệ quản trị cơ sở dữ liệu MongoDB, bao gồm các thao tác quản trị cơ sở dữ liệu và giới thiệu các cơ chế bảo mật như xác thực, ủy quyền, mã hóa và kiểm toán trong MongoDB.
CHƯƠNG 476 TRIỂN KHAI THỬ NGHIỆM GIẢI PHÁP BẢO
Bài toán triển khai
Trong chương 477, một đơn vị đã triển khai máy chủ MongoDB để lưu trữ cơ sở dữ liệu của mình, đảm bảo rằng chỉ những người dùng được phép trong hệ thống mới có quyền truy cập và sử dụng cơ sở dữ liệu này.
Kẻ tấn công cố gắng chặn bắt gói tin trên đường truyền để thu thập thông tin, nhưng toàn bộ cơ sở dữ liệu đã được mã hóa, khiến cho việc truy cập vào thông tin trở nên vô nghĩa.
Các bước triển khai
CHƯƠNG 479. a Hình 3.8: Mô hình triển khai hệ thống Mongodb
CHƯƠNG 480 Mô hình triển khai gồm các máy:
- Máy chủ MongoDB triển khai trên hệ điều hành CentOS với địa chỉ IP 192.168.2.10 chứa cơ sở dữ liệu của đơn vị.
- Máy User là máy của người dùng trong hệ thống sử dụng hệ điều hành Ubuntu AWS EC2 có cài đặt MongoDB với địa chỉ IP 192.168.2.20.
- Máy Attacker là máy của kẻ tấn công thực hiện chặn bắt gói tin trên đường truyền để thu thập cơ sở dữ liệu của đơn vị.
3.2.2 Cài đặt MongoDB trên hệ điều hành CentOS
- Tạo MongoDB repository: Để thêm kho lưu trữ MongoDB vào hệ thống, cần tạo file mongodb-org.repo trong thư mục /etc/yum.repos.d/:
CHƯƠNG 481 # vi /etc/yum.repos.d/mongodb.repo
CHƯƠNG 482 Thêm nội dung sau vào file:
CHƯƠNG 483. a Hình 3.9: Thêm kho lưu trữ MongoDB vào hệ thống
- Cài đặt gói mongodb-org bằng lệnh sau:
CHƯƠNG 484 # yum -y install mongodb-org
CHƯƠNG 485 Các gói sau sẽ được cài đặt trên hệ thống như là một phần của gói mongodb-org:
mongodb-org-server – Trình nền mongod, và các tập lệnh và cấu hình init tương ứng.
mongodb-org-mongos – Daemon mongos.
mongodb-org-shell – Shell mongo, giao diện JavaScript tương tác với MongoDB, được sử dụng để thực hiện các tác vụ quản trị dòng lệnh.
mongodb-org-tools – Chứa một số công cụ MongoDB để nhập và xuất dữ liệu, số liệu thống kê, cũng như các tiện ích khác.
CHƯƠNG 486. a Hình 3.10: Cài đặt gói mongodb-org
- Sau khi hoàn tất cài đặt, khởi động dịch vụ MongoDB và thiết lập dịch vụ mongod 4 khởi động cùng hệ thống CentOS 7 bằng câu lệnh:
- Kiểm tra trạng thái dịch vụ MongoDB:
CHƯƠNG 490. a Hình 3.11: Kiểm tra trạng thái dịch vụ MongoDB
- Kiểm tra xem đã có tiến trình dịch vụ mongod đang chạy chưa:
CHƯƠNG 491 # ps axu | grep mongod
CHƯƠNG 492. a Hình 3.12: Kiểm tra tiến trình dịch vụ MongoDB 3.2.3 Tạo cơ sở dữ liệu
CHƯƠNG 493. a Hình 3.13: Tạo cơ sở dữ liệu trong MongoDB
- Tạo người dùng mới với vai trò userAdmin:
CHƯƠNG 494. a Hình 3.14: Tạo người dùng với vai trò Admin
3.2.4 Cấu hình TLS trên Mongodb Server
3.2.4.1 Tạo chứng thư số tự ký và chứng thư số cho client
CHƯƠNG 495 openssl genrsa -des3 -out root_self_CA.key 2048
- Tạo chứng thư số tự ký:
CHƯƠNG 496 openssl req -x509 -new -nodes -key root_self_CA.key -sha256 -days 1024 -out root_self_CA.pem
- Tạo private key cho client:
CHƯƠNG 497 openssl genrsa -des3 -out mongodb_client.key 2048
- Tạo yêu cầu chứng thư cho client:
CHƯƠNG 498 openssl req -new -key mongodb_client.key -out mongodb_client.csr
- Tạo chứng thư số cho client:
CHƯƠNG 499 openssl x509 -req -in mongodb_client.csr -CA root_self_CA.pem -CAkey root_self_CA.key -CAcreateserial -out mongodb_client.crt -days 1200 -sha256
- Chuyển đổi file crt sang file pem:
CHƯƠNG 500 cat mongodb_client.key mongodb.crt > mongodb_client.pem
3.2.4.2 Bật TLS trong Mongodb Server
- Bật TLS trong máy chủ MongoDB bằng cách thêm cấu hình trong file mongod.conf:
CHƯƠNG 501. a Hình 3.15: Cấu hình file mongodb.conf
Thực nghiệm đánh giá
Trong chương 502, chúng ta sẽ tiến hành kiểm tra kết nối từ máy User đến máy chủ MongoDB nhằm xác nhận khả năng kết nối với cơ sở dữ liệu mà không gặp sự cố Để thực hiện việc này, đồ án sẽ sử dụng ứng dụng khách Mongo và Robo3T để đảm bảo kết nối được thực hiện thành công.
Để kết nối từ xa với máy chủ MongoDB, bạn cần cấu hình cho phép kết nối TCP từ địa chỉ IP của máy chủ đến cổng 27017, cổng mặc định của MongoDB Việc này có thể được thực hiện dễ dàng thông qua bảng điều khiển web AWS.
3.3.1 Cấu hình kết nối tới máy chủ MongoDB
- Tạo một kết nối mới tới máy chủ MongoDB:
CHƯƠNG 504. a Hình 3.16: Tạo kết nối tới máy chủ MongoDB
- Cấu hình trong tab Authentication:
CHƯƠNG 505. a Hình 3.17: Cấu hình tab Authentication
- Cấu hình trong tab TLS:
CHƯƠNG 507. a Hình 3.18: Cấu hình tab TLS
Cuối cùng, hãy nhấn nút "test" ở góc dưới bên trái để kiểm tra khả năng kết nối Nếu mọi thứ đã được thiết lập đúng cách, màn hình sẽ hiển thị như hình 3.12.
CHƯƠNG 509. a Hình 3.19: Kết nối thành công tới máy chủ MongoDB
CHƯƠNG 510 Sau khi kết nối an toàn tới máy chủ MongoDB, người dùng có thể thao tác tùy ý trên hệ quản trị MongoDB với vai trò admin.
3.3.2 Máy Attacker thực hiện chặn bắt gói tin trên đường truyền
Trong chương 511, máy Attacker đã cài đặt phần mềm Wireshark để chặn bắt gói tin từ máy User với địa chỉ IP 192.168.2.20 tới máy MongoDB có địa chỉ IP 192.168.2.10 Tuy nhiên, do đường truyền được bảo vệ bởi giao thức TLS, nên không thu được thông tin nào.
CHƯƠNG 512. a Hình 3.20: Thông tin trao đổi giữa máy User và MongoDB server đã được mã hóa
Kết luận
CHƯƠNG 513 Chương 3 của đồ án đã triển khai thử nghiệm thành công giải pháp mã hóa đường truyền từ máy khách tới máy chủ cơ sở dữ liệu MongoDB.