ĐỒ Á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”Để đáp ứng nhu cầu lưu trữ, xử lý trên dữ liệu khổng lồ, cần có một cơ sở dữ liệu có thể lưu trữ dữ liệu với số lượng lớn và có thể truy xuất một cách nhanh chóng và hiệu quả. Và MongoDB phù hợp với các yêu cầu đó. MongoDB là một phần mềm mã nguồn mở miễn phí, có cộng đồng phát triển lớn mạnh, đặc biệt nó có hiệu suất truy vấn dữ liệu khá cao, tương thích với nhiều hệ điều hành như Windows, Ubuntu, CentOS,...
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
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 được và có ý nghĩa Dữ liệu là tài nguyên biến động mà cần phải được kiểm soát và quản lý, đặc biệt những dữ liệu của các cơ quan quan trọng của Đảng, Nhà nước
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
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
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
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
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
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
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
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
Các chương trình ứng dụng Các câu truy vấn Sơ đồ cơ sở dữ liệu
DML Bộ xử lý truy vấn Bộ biên dịch DDL
Mã đối tượng chương trình
Bộ quản lý cơ sở dữ liệu
Các phương pháp truy nhập Bộ quản lý file
Các bộ đệm hệ thống Cơ sở dữ liệu và catalog hệ thống DBMS
Hình 1.1: Kiến trúc hệ quản trị CSDL
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à thành phần của hệ quản trị cơ sở dữ liệu mà biến đổi các truy vấn thành một dãy các 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): Bộ quản lý cơ sở dữ liệu giao tiếp với các chương trình ứng dụng của người dùng và các truy vấn Bộ quản lý cơ sở dữ liệu tiếp nhận các truy vấn, xem xét các sơ đồ ngoài và hình thức để xác định các bản ghi hình thức nào thoả mãn yêu cầu của truy vấn Sau đó Bộ quản lý cơ sở dữ liệu gọi Bộ quản lý file để thực hiện các yêu cầu
− Bộ quản lý file: xử lý các file lưu trữ bên dưới và quản lý việc cấp phát không gian bộ nhớ trên đĩa Nó thực hiện việc thiết lập và duy trì danh sách các cấu trúc và chỉ số được định nghĩa trong sơ đồ trong Mặc dù vậy Bộ quản lý file không trực tiếp quản lý sự vào/ra vật lý của dữ liệu Nó gửi các yêu cầu cho Các phương pháp truy nhập tương ứng và module này sẽ đọc hoặc ghi dữ liệu vào các bộ đệm hệ thống
− Bộ tiền xử lý DML: Module này chuyển các câu lệnh DML được nhúng trong chương trình ứng dụng thành các lời gọi chuẩn trong ngôn ngữ chủ Bộ tiền xử lý DML cần phải liên kết với Bộ xử lý truy vấn để sinh ra các mã thích hợp
− Bộ biên dịch DDL: chuyển các câu lệnh DDL thành tập hợp các bảng chứa dữ liệu meta (dữ liệu về dữ liệu) Các bảng này sau đó được lưu trong hồ sơ hệ thống trong khi thông tin điều khiển được lưu vào các phần đầu của file dữ liệu
− Bộ quản lý catalog: quản lý và duy trì việc truy nhập tới 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 truy nhập tới hồ sơ hệ thống.
Phân loại hệ quản trị cơ sở dữ liệu
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ệ
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
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, ) Ưu điểm:
- 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 sử dụng cùng truy cập database cùng một lúc Người sử dụng có thể sử dụng chức năng quản lý giao dịch và khoá được tích hợp để truy cập dữ liệu khi nó đang được thay đổi Điều này giúp khắc phục sự cố có thể xảy ra giữa nhiều người cùng làm việc trên dữ liệu và ngăn ngừa người dùng truy cập hoặc sử dụng dữ liệu đã được cập nhật một phần
- RDBMS cho phép quản trị cơ sở dữ liệu hạn chế quyền truy cập tới người dùng được uỷ quyền và cấp đặc quyền cho người dùng cá nhân dựa trên loại nhiệm vụ mà họ cần thực hiện
- Tính ACID (Atomicity, Consistency, Isolation, Durability) của một transaction được đảm bảo
- Tính toàn vẹn dữ liệu cao, có các ràng buộc về dữ liệu như khóa chính, khóa ngoại, quan hệ một nhiều, nhiều nhiều Thích hợp với các hệ thống cần bảo mật cao như ngân hàng, 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ệ
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 Distributed NoSQL 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
Cơ sở dữ liệu NoSQL (viết tắt của “Not SQL” hoặc “Not Only SQL”) là một cơ sở dữ liệu không quan hệ (Non-Relational) NoSQL là tên gọi chung cho các cơ sở dữ liệu không sử dụng các bảng như MySQL hay SQL Server Nó không sử dụng mô hình cơ sở dữ liệu quan hệ (RDBMSs) để lưu trữ và truy cập dữ liệu mà sử dụng mô hình lưu trữ key- value Thay vì lưu trữ dữ liệu trong các bảng như một cơ sở dữ liệu truyền thống, một CSDL NoSQL lưu trữ từng hạng mục riêng với một khóa duy nhất Ngoài ra, NoSQL còn là một hệ thống sử dụng dữ liệu phân tán Tức là dữ liệu của hệ thống này không chỉ bao gồm những gì mà chúng ta nhập vào mà còn có thể là dữ liệu từ các file hoặc video, và chúng được lưu trữ ở nhiều server khác nhau Điều này cung cấp một cách tiếp cận nhiều linh hoạt hơn để lưu trữ dữ liệu hơn là một cơ sở dữ liệu quan hệ
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
Hệ quản trị cơ sở dữ liệu NoSQL sử dụng định lý BASE để nhất quán dữ liệu trong khi RDBMS sử dụng định lý ACID Một ưu điểm khác của hệ quản trị cơ sở dữ liệu NoSQL so với RDBMS là NoSQL có thể mở rộng theo cả chiều ngang và chiều dọc trong khi RDBMS chỉ có thể mở rộng theo chiều dọc
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 cho vấn đề này là mua một số máy nhỏ thay vì một máy đơn lẻ và tạo một cụm gồm nhiều máy để lưu trữ dữ liệu Quá trình này được coi là rẻ hơn và có thể mở rộng theo chiều ngang Trong trường hợp này nếu một máy gặp sự cố thì các máy khác duy trì độ tin cậy của cụm khá cao Đây là cơ chế được hiển thị bởi cơ sở dữ liệu NoSQL và đó là một lý do mà hệ quản trị cơ sở dữ liệu NoSQL ngày nay trở nên khá phổ biến
1.4.2 Một số tính năng của NoSQL
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 Hệ quản trị cơ sở dữ liệu NoSQL dựa trên các hệ thống phân tán và dữ liệu được lan truyền đến các máy khác nhau trong cụm và nó được yêu cầu để duy trì tính nhất quán Ví dụ, nếu có sự thay đổi trong một bảng, thì bắt buộc phải thực hiện thay đổi trong tất cả các máy có dữ liệu Có thể đạt được sự nhất quán nếu thông tin về quá trình cập nhật lan truyền ngay lập tức qua toàn bộ hệ thống, nếu không, sự không nhất quán được thực hiện và theo cách này, khái niệm ACID tạo ra rắc rối cho các giải pháp NoSQL
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
Cơ bản, Sẵn sàng, Mềm mỏng và tính nhất quán cuối cùng Sử dụng sao chép và phân bổ để giảm khả năng dữ liệu không có sẵn và sử dụng sharding Do đó, hệ thống luôn sẵn sàng ngay cả khi các mạng con của dữ liệu bị hỏng và không khả dụng trong một khoảng thời gian ngắn Do đó, nói chung tính khả dụng của BASE đạt được thông qua việc hỗ trợ sự cố từng phần mà không có sự cố toàn bộ hệ thống Ví dụ: nếu chúng ta thảo luận về hệ quản trị cơ sở dữ liệu ngân hàng trong các ngân hàng và hai người cố gắng truy cập vào cùng một tài khoản ngân hàng từ hai địa điểm khác nhau thì không chỉ cần cập nhật dữ liệu kịp thời mà còn yêu cầu một số hệ quản trị cơ sở dữ liệu thời gian thực 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
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 Định lý CAP dựa trên ba nguyên tắc này
• 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
• 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
• 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
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:
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
Bảng 1.1: Phân loại hệ quản trị CSDL NoSQL
Khóa/giá trị Cao Cao Cao Vừa phải
Cột Cao Cao Vừa phải Thấp Cơ sở dữ liệu cột
Tài liệu Cao Bất định
(Cao) Cao Thấp Hướng đối tượng
SimpleD B Đồ thị Bất định Bất định Cao Cao Lý thuyết đồ thị
1.4.3 So sánh CSDL NoSQL và CSDL SQL
Bảng 1.2: So sánh CSDL SQL và CSDL NoSQL
Mỗi database được xây dựng dựa trên các bảng có quan hệ với nhau, mỗi hàng ứng với một record, mỗi cột ứng với một field
Mỗi database được xây dựng dựa trên các tài liệu (document).
Ngôn ngữ dữ liệu Sử dụng Structured
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ối quan hệ giữa các bảng để đảm bảo tính nhất quán của dữ liệu
Tốt hơn SQL vì nó bỏ qua các ràng buộc của dữ liệu.
SQL có thể mở rộng theo chiều dọc và chiều ngang nhưng quá trình mở rộng theo chiều ngang sẽ rất phức tạp nếu đã tồn tại dữ liệu trong database Khi muốn bổ sung thêm một cột dữ liệu thì phải khai báo trước.
NoSQL có thể dễ dàng mở rộng theo chiều dọc và chiều ngang do các dữ liệu đưa vào không phải phụ thuộc vào cấu trúc bảng cho trước Dữ liệu có thể thêm vào bất kỳ lúc nào.
Kém hơn NoSQL vì nó phải đảm bảo tính ràng buộc dữ liệu giữa các bảng Nếu dữ liệu được lưu trữ trên nhiều server
Tốc độ nhanh vì NoSQL bỏ qua các ràng buộc về dữ liệu của các bảng. thì phải bảo đảm tính nhất quán về dữ liệu trên các Server với nhau
Phần cứng Đòi hỏi phần cứng cao Không đòi hỏi quá cao về phần cứng
Thay đổi số node trong hệ thống
Do yêu cầu về tính nhất quán dữ liệu nên khi ta thêm hoặc xóa một node bất kì thì cần phải shutdown hệ thống trong một khoảng thời gian
Do NoSQL có tính nhất quán cuối nên sẽ không cần phải Shutdown hệ thống như SQL
Truy vấn và báo cáo
Có thể dễ dàng sử dụng ngôn ngữ Query để truy vấn dữ liệu trực tiếp từ database hoặc sử dụng các công cụ hỗ trợ khác
NoSQL chưa hỗ trợ việc lấy báo cáo dữ liệu trực tiếp, việc lấy báo cáo thực hiện chủ yếu thông qua giao diện ứng dụng Ứng dụng Được sử dụng cho các hệ thống cần mối quan hệ chặt chẽ và tính đồng nhất về dữ liệu, số lượng dữ liệu không quá nhiều
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, ban đầu được phát triển bởi Facebook và trở thành công cụ nguồn mở năm 2008 Sau đó được chuyển giao cho Apache từ năm 2009.Cassandra lưu trữ dữ liệu bằng cách phân tán dữ liệu ra các nút khác nhau trong một cụn để đảm bảo việc xử lý dữ liệu nhanh chóng và an toàn dù có một hoặc một số nút xảy ra lỗi
Apache Cassandra là một hệ quản trị cơ sở dữ liệu NoSQL, lưu trữ dữ liệu dưới dạng cột rộng bằng cách kết hợp cả dạng khóa-giá trị và dạng bảng Thành phần chính của Cassandra là Keyspace với 3 thuộc tính sau:
- 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: dùng để mô tả cấu trúc của dữ liệu Mỗi một họ cột có nhiều dòng và mỗi dòng lại có nhiều cột theo thứ tự nhất định (khác với CSDL quan hệ, người dùng có thể tự do thêm cột vào bất kỳ lúc nào và các dòng không nhất thiết phải có cùng các cột) Thông thường mỗi Keyspace thường có ít nhất một hoặc nhiều họ cột
Các đặc điểm nổi bật:
- Chấp nhận sai sót: dữ liệu được sao chép thành nhiều bản trên các máy chủ Nếu chẳng may 1 máy chủ nào đó bị hỏng, thì vẫn có thể truy xuất dữ liệu trên các máy chủ khác
- Tính co giãn: khả năng đọc/ghi tăng tuyến tính theo số lượng máy được thêm vào cụm máy mà không có thời gian chết hay sự gián đoạn ứng dụng đang chạy
- Hướng cột: các RDBMS hướng dòng phải định nghĩa trước các cột trong các bảng Đối với Cassandra không phải làm điều đó, đơn giản là thêm vào bao nhiêu cột cũng được tùy theo nhu cầu của bài toán
- Tính sẵn sàng cao khi thực hiện tác vụ đọc/ghi, Cassandra có thể thực hiện trên bản sao gần nhất hoặc trên tất cả các bản sao Điều này phụ thuộc vào thông số về mức độ nhất quán do thiết lập từ 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à hệ quả trị cơ sở dữ liệu NoSQL, lưu trữ dữ liệu với dạng Khóa-Giá trị với nhiều tính năng được sử dụng rộng rãi Nó có thể hỗ trợ nhiều kiểu dữ liệu như: strings, hashes, lists, sets, sorted Đồng thời có thể cho phép viết kịch bản bằng ngôn ngữ Lua
Redis ngoài tính năng lưu trữ Khóa-Giá trị trên RAM thì Redis còn hỗ trợ tính năng lưu trữ dữ liệu trên đĩa cứng cho phép có thể phục hồi dữ liệu khi hệ thống gặp sự cố Redis hỗ trợ tính năng sao chép cho phép sao chép, đồng bộ giữa
2 CSDL Redis với nhau Ngoài ra còn có tính năng cụm cũng đang được phát triển cho phép cân bằng tải
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 giúp việc truy xuất dữ liệu một cách nhanh chóng Ngoài ra, có thể cấu hình để Redis có thể 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ỗ trợ Queue (hàng đợi) thông qua cơ chế PUB/SUB, chúng ta có thể dùng Redis để làm hệ thống hàng đợi cho website xử lý tuần tự từng yêu cầu
Các kiểu dữ liệu trong Redis:
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
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ị
SET: tập hợp các string (không được sắp xếp) Redis hỗ trợ các thao tác thêm, đọc, xóa từng phần tử, kiểm tra sự xuất hiện của phần tử trong tập hợp Ngoài ra Redis còn hỗ trợ các phép toán tập hợp, gồm intersect/union/difference
HASH: lưu trữ hash table của các cặp khóa-giá trị, trong đó key được sắp xếp ngẫu nhiên, không theo thứ tự nào cả Redis hỗ trợ các thao tác thêm, đọc, xóa từng phần tử, cũng như đọc tất cả giá trị
ZSET: là 1 danh sách, trong đó mỗi phần tử là map của 1 chuỗi và 1 kiểu thập phân, danh sách được sắp xếp theo điểm này Redis hỗ trợ thao tác thêm, đọc, xóa từng phần tử, lấy ra các phần tử dựa theo khoảng của điểm hoặc của chuỗi
1.5.3 Hệ quản trị cơ sở dữ liệu OrientDB
Kết luận
Chương 1 của đồ án đã trình bày được những kiến thức tổng quan về hệ quản trị cơ sở dữ liệu như: định nghĩa, kiến trúc, phân loại hệ quản trị dữ liệu Đồng thời nội dung chương 1 cũng giới thiệu về hệ quản trị cơ sở dữ liệu phi quan hệ và một số hệ quản trị cơ sở dữ liệu phi quan hệ phổ biến.
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
Như đã trình bày ở mục 1.5.4 của chương 1, MongoDB là một hệ quản trị cơ sở dữ liệu mã nguồn mở, là cơ sở dữ liệu NoSQL và được hàng triệu người sử dụng MongoDB được viết bằng C++ MongoDB là một cơ sở dữ liệu hướng tài liệu (document database), các dữ liệu được lưu giữ trong document kiểu JSON thay vì dạng bảng như cơ sở dữ liệu quan hệ nên truy vấn sẽ rất nhanh, cung cấp hiệu suất cao, tính khả dụng cao và khả năng mở rộng dễ dàng
Hình 2.1: MongoDB là một hệ quản trị cơ sở dữ liệu NoSQL
- Với CSDL quan hệ có khái niệm bảng, các cơ sở dữ liệu quan hệ (như MySQL hay SQL Server…) dùng các bảng để lưu dữ liệu thì với MongoDB sẽ sử dụng định nghĩa là collection thay vì bảng
- So với RDBMS thì trong MongoDB collection ứng với table, còn document sẽ ứng với row, MongoDB sẽ sử dụng các document thay cho row trong RDBMS
- Các collection trong MongoDB được cấu trúc rất linh động, cho phép các dữ liệu lưu giữ không cần tuân theo một cấu trúc chắc chắn
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 cho phép chúng ta tự do chạy ở bất cứ đâu - cho phép người dùng chứng minh công việc của mình trong tương lai và loại bỏ sự khóa chặt của nhà cung cấp
Hiện nay, MongoDB được sử dụng khá nhiều trong các ứng dụng như Google, Facebook, Ebay, Adobe, Năm 2020, Phần mềm này được đánh giá là
Cơ sở dữ liệu NoSQL phổ biến và được yêu thích nhất Trong một số diễn đàn về công nghệ, nhiều người đánh giá rất cao các dịch vụ của MongoDB, phần mềm này có một giao diện nhất quán giúp đơn giản hóa quá trình làm việc với dữ liệu và phát triển sản phẩm của họ
Kể từ năm 2013, khi mà sự phát triển của dữ liệu phi cấu trúc ra đời, MongoDB đã phát triển mạnh mẽ và vượt qua cả IBM DB2, Microsoft Access và SQLite để chiếm vị trí thứ 5 về mức độ phổ biến và là cơ sở dữ liệu đa mô hình hướng tài liệu ( documentoriented, multi-model database) duy nhất nằm trong top
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 đó:
Hình 2.2: Sự phát triển của MongoDB từ năm 2013 đến năm 2021
Một số khái niệm trong MongoDB:
Database: là một container của các collection giống như là một cơ sở dữ liệu chứa các bảng trong RDBMS Mỗi database có một bộ các file trên hệ thống file Server của MongoDB có thể lưu trữ được nhiều database
Collection: là một nhóm các dữ liệu thuộc cùng loại do người dùng quy định, sự khác nhau giữa collection với table trong RDBMS đó là collection không có ràng buộc, quan hệ với collection khác Mỗi dữ liệu trong collection không cố định về số trường như row trong table
Hình 2.3: Dữ liệu trong Collection
Document: là một tài liệu lưu trữ dưới dạng json Nó tương đương với row trong table của RDBMS nhưng dữ liệu trong document khá linh hoạt, nó không cố định có bao nhiêu trường, dữ liệu trong mỗi trường phải là cố định
Hình 2.4: Dữ liệu trong Document
_id: là trường bắt buộc phải có trong mỗi document Trường này biểu diễn các giá trị duy nhất cho từng document Vì nó là bắt buộc nên nếu không thiết lập giá trị cho nó MongoDB sẽ tự động sinh ra trường này
Field: là một cặp key-value Một document có thể không có trường nào hoặc có thể có nhiều trường Các trường này tương tự như các cột trong RDBMS
Embedded Documents: Nếu trong RDBMS, chúng ta có kiểu join các bảng, ví dụ bảng person join với bảng address để biết một person có những address nào thì trong MongoDB, document của person sẽ chứa một array các document address
2.1.2 Các thành phần trong MongoDB
Hình 2.5: Thành phần trong MongoDB
Về mặt kiến trúc , MongoDB gồm có 4 thành phần:
- Mongod: đây là một node để lưu trữ và truy xuất dữ liệu
- 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 Nó có kiến trúc Master- Slave Do đó trong mỗi Shard sẽ có một bản sao là Master và các bản sao còn lại là Slave Trong đó, chỉ có Master là có thể đọc và ghi dữ liệu, các slave còn lại chỉ cho phép đọc dữ liệu
- Config server: nó hoạt động như một bộ chứa siêu dữ liệu trong MongoDB về các đối tượng được lưu trữ trong các mongod Config server sẽ được sử dụng trong trường hợp các mongod bị lỗi Thường trong một hệ cơ sở dữ liệu MongoDB sẽ có từ 1 đến 3 Config Server
- Mongos: Đây là thành phần duy nhất có thể giao tiếp với các thành phần bên ngoài Nó sẽ tiếp nhận yêu cầu từ máy khách và chuyển tiếp các yêu cầu này đến vùng thích hợp
Các thành phần này giao tiếp với nhau, trao đổi qua lại trong hệ thống và tạo cho MongoDB một cơ chế hoạt động đặc biệt đó là sharding Với cơ chế này,
Quản trị CSDL MongoDB
2.2.1 Tạo, xóa database Để tạo một database trong MongoDB sử dụng cú pháp:
Trong đó: databaseName là tên của database muốn tạo
Lệnh use được sử dụng để chỉ rõ database mà bạn muốn kết nối tới Nếu database được gọi tới chưa tồn tại thì nó sẽ tự động tạo một database mới với tên là databaseName bạn truyền vào use databaseName Để xem tất cả các database đã được tạo trên MongoDB sử dụng cú pháp:
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 Để xóa database trong MongoDB sử dụng cú pháp:
Lệnh này dùng để xóa database hiện đang sử dụng, nên khi sử dụng lệnh trên thì bắt buộc bạn phải kết nối tới database cần xóa thì mới thành công
Nếu như trong các hệ quản trị cơ sở RDBMS trước đây có các table để lưu trữ dữ liệu, thì trong MongoDB chúng được thay thế với một khái niệm hoàn toàn mới là các Collection Để tạo collection trong MongoDB ta sử dụng cú pháp:
• collectionName là tên của collection muốn tạo
• option là một đối tượng chứa các tùy chọn riêng cho collection Các tùy chọn bao gồm:
• capped - là thông số cấu hình hành động sẽ xảy ra khi collection vượt quá dung lượng cho phép (thông số size) Nếu capped: true thì khi dung lượng quá hạn mức cho phép nó sẽ ghi đè các dữ liệu cũ nhất
• autoIndexId - là thông số cấu hình xem có đánh chỉ mục cho trường _id không Nếu autoIndexId: true thì sẽ đánh chỉ mục cho trường _id (Phiên bản 3.4 tùy chọn này sẽ bị xóa)
• 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à: show dbs hoặc show databases db.dropDatabase() db.createCollection(collectionName, option)
"off" - không validator khi insert hoặc update
"strict" - Đây là giá trị mặc định Thiết lập validator với mọi câu lệnh insert và update
"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"
Lưu ý: Để có thể thực hiện được lệnh createCollection này thì ta cần phải khai báo sử dụng database Để xóa một collection trong MongoDB sử dụng cú pháp: Để xem danh sách các collection đang có trong database sử dụng cú pháp:
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:
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
- data có thể là 1 object chứa các trường và giá trị của nó hoặc cũng có thẻ là một mảng đối tượng (nếu như bạn muốn thêm nhiều bản ghi trên một show collections db.collectionName.insert(data) db.collectionName.drop() lần khai báo).
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
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:
- 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
Chú ý: Với cả ba phương thức trên nếu như collectionName của chúng ta chưa tồn tại trong hệ thống thì mặc định MongoDB sẽ tự động thêm mới collection và đồng thời insert dữ liệu luôn
2.2.4 Xóa document Để xóa dữ liệu trong MongoDB thì ta sử dụng phương thức remove() với cú pháp:
Trong đó: db.collectionName.insertOne(data) db.collectionName.insertMany(data) db.collectionName.remove(
, { justOne: , writeConcern: , collation:
- 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.
Chú ý: Ngoài phương thức remove(), trong MongoDB còn có phương thức deleteOne() và deleteMany() để xóa một và xóa nhiều document theo bộ lọc
2.2.5.1 Lấy tất cả dữ liệu trong collection Để lấy tất cả dữ liệu ở trong collection sử dụng phương thức find() với cú pháp:
Trong đó: collectionName là tên của collection muốn truy vấn
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ả Để 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:
2.2.5.2 Truy vấn có điều kiện Để truy vấn có điều kiện trong MongoDB thì ta cũng sử dụng cú pháp tương tự như lấy tất cả dữ liệu, nhưng lúc này chúng ta sẽ chèn thêm điều kiện vào trong hàm find() với cú pháp sau:
- 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.
Phép toán Cú pháp Ví dụ db.collectionName.find() db.collectionName.find().pretty() db.collectionName.find(condition)
Bằng (Equality) {key: value} db.admin.find({name:
"Tran Huong" }).pretty() Nhỏ hơn (Less Than ) {key: {$lt: value}} db.admin.find({age:
$lt: 18}).pretty() Nhỏ hơn bằng (Less
{key: {$lte: value}} db.admin.find({age:
$lte: 18}).pretty() Lớn hơn (Greater
{key: {$gt: value}} db.admin.find({age:
$gt: 12}).pretty() Lớn hơn bằng
{key: {$gte: value}} db.admin.find({age:
$gte: 12}).pretty() Khác (Not Equals) {key: {$ne: value}} db.admin.find({age:
$ne: 12}).pretty() Trong (In) {key: {$in: [value1, value2, ]}} db.admin.find({age:
$in: [12, 18]}).pretty() Không Thuộc (Not In) {key: {$nin: [value1, value2, ]}} db.admin.find({age:
Chú ý: Ngoài phương thức find(), trong MongoDB còn có phương thức findOne() chỉ trả về một Document
2.2.5.3 Truy vấn nhiều điều kiện
Trong phương thức find(), nếu bạn truyền nhiều key bằng cách phân biệt chúng bởi dấu phẩy (,) thì MongoDB xem nó như là điều kiện AND Cú pháp cơ bản của AND trong MongoDB như sau:
❖ OR Để sử dụng mệnh đề or (hoặc) trong MongoDB thì chúng ta cần phải truyền một key scope có tên là $or vào làm key chứa mảng các điều kiện hoặc, với cú pháp:
❖ Kết hợp cả AND và OR Để kết hợp cả AND và OR thì bạn chỉ cần làm tương tự như cách thực hiện truy vấn AND, và nếu truy vấn nào là or thì object đó lại làm tương tự như truy vấn OR
Trong MongoDB, index hỗ trợ thực hiện các câu truy vấn hiệu quả hơn
Nếu không có index, MongoDB sẽ phải duyệt tất cả các document trong một collection để tìm ra những document thoả mãn với điều kiện truy vấn Nếu có một index tồn tại, MongoDB có thể sử dụng nó để giới hạn số lượng document mà nó phải kiểm tra
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 Khi kiểm soát truy cập được kích hoạt, MongoDB yêu cầu tất cả các máy khách xác thực để xác định quyền truy cập
Mặc dù xác thực và ủy quyền có mối liên hệ chặt chẽ với nhau, nhưng xác thực khác với ủy quyền Xác thực giúp xác minh danh tính của người dùng; ủy quyền xác định quyền của người dùng được truy cập và tương tác trong phạm vi tài nguyên giới hạn
Gồm 2 phương thức xác thực:
Xác thực với tư cách người dùng: 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 được liên kết với người dùng đó
Xác thực bằng cách sử dụng mongoshell:
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
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 tư cách khác nhau sẽ không làm mất thông tin đăng nhập của những người dùng đã được xác thực trước đó Điều này có thể dẫn đến kết nối có nhiều quyền hơn chủ đích của người dùng và khiến các hoạt động trong một phiên logic phát sinh lỗi
Trước khi có được quyền truy cập vào một hệ thống, người dùng phải xác thực nhận dạng danh tính của mình trong MongoDB Điều này đảm bảo rằng không có ứng dụng nào khác truy cập vào dữ liệu được lưu trữ trong MongoDB mà không được cho phép bởi người có quyền hạn
MongoDB hỗ trợ hai cơ chế xác thực để người dùng xác minh danh tính của họ:
Ngoài ra, MongoDB Enterprise cũng cung cấp hỗ trợ xác thực LDAP proxy và xác thực Kerberos
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 dựa trên 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ế này cho việc xác thực người dùng bằng mật khẩu
MongoDB sử dụng SCRAM để xác minh thông tin người dùng đã cung cấp thông qua tên đăng nhâp, mật khẩu và cơ sở dữ liệu xác thực của người dùng Cơ sở dữ liệu xác thực là cơ sở dữ liệu nơi người dùng được tạo cùng với tên đăng nhập của người dùng, phục vụ cho việc xác minh người dùng
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:
Bảng 2.1: Cơ chế SCRAM trông MongoDB
Cơ chế SCRAM Mô tả
SHA-1 - Sử dụng hàm băm SHA-1
- Thay đổi số lần lặp của mã SHA -1 SHA – 256 - 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
• Certificate Authority Để sử dụng trong phát triển phần mềm nói riêng và sản xuất nói chung, việc triển khai MongoDB đòi hỏi phải có cá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ủa họ có thể tạo và duy trì một tổ chức phát hành chứng thực độc lập hoặc sử dụng các chứng thực số được tạo bởi các nhà cung cấp dịch vụ TLS / SSL bên thứ ba
• Client x.509 Certificates Để xác thực với máy chủ, máy Client có thể sử dụng chứng thực x.509 thay vì tên người dùng và mật khẩu Chứng thực số ở bên phía client phải có các thuộc tính sau:
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; Ứng với mỗi người dùng chỉ tồn tại một chứng thư số duy nhất Đối tượng Client của X.509 chứa distinguished name (DN) khác với đối tượng Member của X.509 Ít nhất một trong các thuộc tính Organization (O), Organizational Unit (OU), hoặc Domain Component (DC) trong chứng thư số của client phải khác với các thuộc tính chứng thư số của net.tls.clusterFile và net.tls.certificateKeyFile bên trong máy chủ
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 bằng chứng thư client, trước tiên phải thêm giá trị của subject chứng chỉ máy khách với tư cách là người dùng MongoDB Với mỗi chứng thư client X.509 tương ứng với một người dùng MongoDB; tức là không thể sử dụng một chứng thư phía client để xác thực nhiều người dùng MongoDB Để sử dụng phiên với người dùng xác thực trong $external (Kerberos, LDAP, X.509), tên người dùng không được lớn hơn 10.000 bytes
- Xác thực Để 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:
tlsCertificateKeyFilePassword nếu file khóa chứng thư được mã hóa authenticationDatabase '$external'
authenticationMechanism MONGODB-X509 Đố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:
sslPEMKeyPassword nếu sslPEMKeyFile được mã hóa
2.3.2 Cơ chế ủy quyền trong mongodb
MongoDB cung cấp cơ chế kiểm soát truy cập dựa trên vai trò (Role-Based Access Control - RBAC) để quản lý quyền truy cập vào hệ thống MongoDB Người dùng được cấp một hoặc nhiều role xác định quyền truy cập vào các hoạt động vào tài nguyên cơ sở dữ liệu Ngoài việc thực thi nhiệm vụ của mỗi role, người dùng không có quyền truy cập vào hệ thống
Role có thể chứa một hoặc nhiều role đã tồn tại được xác định trước, trong trường hợp đó, role kế thừa tất cả các đặc quyền từ các role khác trong cơ sở dữ liệu Ngoài ra, role được tạo trên cơ sở dữ liệu 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
Người dùng có thể xem các đặc quyền của một role bằng cách đưa ra rolesInfo với các trường showPrivileges và showBuiltinRoles cả được thiết lập thành true Từ đó có thể gán role cần thiết cho người dùng trong quá trình tạo user và cập nhật người dùng hiện có để gán hoặc thu hồi role
Người dùng được gán với một role nhất định sẽ nhận được tất cả các đặc quyền của role đó Trong MongoDB, một người dùng có thể có nhiều role Bằng cách gán các role cho người dùng trong các cơ sở dữ liệu khác nhau, người dùng được tạo trong đó có thể thực thi quyền trên các cơ sở dữ liệu khác
2.3.2.3 Tính năng kiểm soát truy cập
MongoDB mặc định không bật tính năng kiểm soát truy cập đối với quá trình 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 Ngoài ra, kích hoạt xác thực nội bộ sẽ đồng thời kích hoạt cơ chế ủy quyền bên phía client Sau khi bật kiểm soát truy cập sẽ bắt buộc người dùng phải tự xác thực
Kết luận
Chương 2 của đồ án đã trình bày được tổng quan về hệ quản trị CSDL MongoDB, một số thao tác quản trị CSDL trong MongoDB và giới thiệu các cơ chế bảo mật như cơ chế xác thực, cơ chế ủy quyền, cơ chế mã hóa và kiểm toán trong MongoDB
CHƯƠNG 3 TRIỂN KHAI THỬ NGHIỆM GIẢI PHÁP BẢO MẬT
Bài toán triển khai
Một đơn vị triển khai máy chủ MongoDB để lưu trữ cơ sở dữ liệu của đơn vị và chỉ những người dùng trong hệ thống được phép truy cập sử dụng cơ sở dữ liệu đó
Kẻ tấn công chặn bắt gói tin trên đường truyền nhằm thu thập thông tin nhưng toàn bộ cơ sở dữ liệu đã được mã hóa trên đường truyền
Hình 3.1: Mô hình triển khai hệ thống Mongodb
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ị.
Các bước triển khai
3.2.1 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/:
# vi /etc/yum.repos.d/mongodb.repo
Thêm nội dung sau vào file:
Hình 3.2: Thêm kho lưu trữ MongoDB vào hệ thống
- Cài đặt gói mongodb-org bằng lệnh sau:
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
Hình 3.3: 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:
Hình 3.4: 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:
Hình 3.5: Kiểm tra tiến trình dịch vụ MongoDB 3.2.2 Tạo cơ sở dữ liệu
Hình 3.6: Tạo cơ sở dữ liệu trong MongoDB
- Tạo người dùng mới với vai trò userAdmin:
Hình 3.7: Tạo người dùng với vai trò Admin
3.2.3 Cấu hình TLS trên Mongodb Server
3.2.3.1 Tạo chứng thư số tự ký và chứng thư số cho client
- Tạo private root key: openssl genrsa -des3 -out root_self_CA.key 2048
- Tạo chứng thư số tự ký: openssl req -x509 -new -nodes -key root_self_CA.key -sha256 -days 1024 -out root_self_CA.pem
- Tạo private key cho client: openssl genrsa -des3 -out mongodb_client.key 2048
- Tạo yêu cầu chứng thư cho client: openssl req -new -key mongodb_client.key -out mongodb_client.csr
- Tạo chứng thư số cho client: 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: cat mongodb_client.key mongodb.crt > mongodb_client.pem
3.2.3.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:
Hình 3.8: Cấu hình file mongodb.conf
Thực nghiệm đánh giá
Trong phần này sẽ thực hiện một số kiểm tra kết nối sơ bộ từ máy User đến máy chủ MongoDB để xác nhận rằng có thể kết nối với cơ sở dữ liệu của mình mà không gặp sự cố nào Đồ án sẽ sử dụng ứng dụng khách mongo và Robo3T để xác nhận kết nối Để kết nối từ xa với máy chủ MongoDB, cần cấu hình để cho phép kết nối TCP đến từ địa chỉ IP của máy chủ MongoDB trên cổng 27017 (cổng mongodb mặc định) Điều này có thể dễ dàng thực hiện 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:
Hình 3.9: Tạo kết nối tới máy chủ MongoDB
- Cấu hình trong tab Authentication:
Hình 3.10: Cấu hình tab Authentication
- Cấu hình trong tab TLS:
Hình 3.11: Cấu hình tab TLS
Cuối cùng bấm vào nút "test" phía 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 chính xác, sẽ hiện ra như hình 3.12:
Hình 3.12: Kết nối thành công tới máy chủ MongoDB
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
Trên máy Attacker cài sẵn phần mềm Wireshark và thực hiện chặn bắt gói tin trên đường truyền từ máy User có địa chỉ IP 192.168.2.20 tới máy MongoDB có địa chỉ IP 192.168.2.10 nhưng đường truyền đã được bảo vệ bởi giao thức TLS nên không thu được thông tin:
Hình 3.13: Thông tin trao đổi giữa máy User và MongoDB server đã được mã hóa
Kết luận
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
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Qua thời gian nỗ lực nghiên cứu, tìm hiểu dưới sự giúp đỡ tận tình của thầy
TS Lại Minh Tuấn (Khoa An toàn thông tin) và cô KS Lê Thị Bích Hằng, cùng sự giúp đỡ rất nhiều của quý thầy cô giáo trong Khoa Mật mã, em đã hoàn thành đồ á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” đúng theo yêu cầu và thời gian quy định
Trong đồ án án tốt nghiệp của em đã đạt được kết quả như sau:
Mặt cơ sở lý thuyết:
+ Đồ án đã trình bày tổng quan về hệ quản trị CSDL và dữ liệu phi quan hệ
+ Trình bày về các thành phần, tính năng nổi bật và các ưu, nhược điểm của hệ quản trị cơ sở dữ liệu MongoDB
+ Trình bày cách quản trị CSDL MongoDB, các cơ chế bảo mật của
+ Nắm và hiểu được thao tác quản trị CSDL trong MongoDB và các cơ chế bảo mật như cơ chế xác thực, ủy quyền, mã hoá, kiểm toán trong MongoDB
+ Triển khai thử nghiệm giải pháp bảo mật trong hệ quản trị cơ sở dữ liệu
+ Áp dụng giải pháp bảo mật trong hệ quản trị cơ sở dữ liệu MongoDB vào thực tiễn cơ quan nơi công tác làm việc.