1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài tập lớn Đề tài tìm hiểu về hệ quản trị csdl mongodb

26 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tìm hiểu về hệ quản trị CSDL MongoDB
Tác giả Trần Văn An, Nguyễn Khắc Hân, Nguyễn Minh Hiệu, Nguyễn Duy Hưng
Người hướng dẫn ThS. Ninh Thị Thu Trang
Trường học Học Viện Công Nghệ Bưu Chính Viễn Thông
Chuyên ngành An Toàn ứng dụng web và CSDL
Thể loại Bài tập lớn
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 26
Dung lượng 1,44 MB

Nội dung

Khái niệm về NoSQL NoSQL là một thuật ngữ tổng quát được sử dụng để mô tả các hệ thống quản lý cơ sở dữ liệu DBMS không sử dụng mô hình quan hệ SQL Structured Query Language để tổ chức

Trang 1

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

KHOA AN TOÀN THÔNG TIN

BÀI TẬP LỚN

ĐỀ TÀI: Tìm hiểu về hệ quản trị CSDL MongoDB

Môn học: An Toàn ứng dụng web và CSDL

Nhóm: 08

Giảng viên hướng dẫn: ThS Ninh Thị Thu Trang

Hà Nội – 2024

Trang 2

MỤC LỤC

CHƯƠNG 1 TỔNG QUAN VỀ NOSQL DATABASES 1

1.1 Khái niệm về NoSQL 1

1.2 Các loại NoSQL database 1

CHƯƠNG 2 MONGODB 2

2.1 MongoDB là gì? 2

2.2 Đặc điểm của MongoDB 2

2.2.1 Đặc điểm 2

2.2.2 Các thuật ngữ MongoDB thường dùng 2

2.2.3 Ưu điểm 3

2.2.4 Nhược điểm 3

2.3 Kiến trúc của MongoDB 4

2.3.1 Các thành phần chính 4

2.3.2 Tính năng 5

2.3.3 So sánh MongoDB và SQLDB 9

CHƯƠNG 3 CƠ CHẾ BẢO MẬT CỦA MONGODB VÀ CÁC NGUY CƠ LỖ HỔNG 10

3.1 Cơ chế xác thực (Authentication) 10

3.1.1 Phương thức xác thực 10

3.2 Cơ chế ủy quyền (Authorization) 12

3.2.1 Tính kế thừa 12

3.2.2 Tính năng kiểm soát truy cập 12

3.2.3 Quản lý người dùng và role 12

3.3 Cơ chế mã hóa (Encryption) 13

3.3.1 Mã hóa dữ liệu trạng thái động 13

3.3.2 Mã hóa dữ liệu ở trạng thái tĩnh 14

3.4 Kiểm toán (Audit) 14

3.5 Các nguy cơ lỗ hổng 15

3.5.1 Cấu hình không an toàn 15

3.5.2 Không kích hoạt xác thực 15

3.5.3 Không mã hóa dữ liệu 16

3.5.4 Tấn công Injection (NoSQL Injection) 16

Trang 3

3.5.5 Quản lý không đúng quyền hạn 16

3.5.6 Không bảo vệ mật khẩu và khóa 16

CHƯƠNG 4 CÀI ĐẶT VÀ QUẢN TRỊ 17

4.1 Cài đặt MongoDB 17

4.1.1 Cài đặt MongoDB 17

4.1.2 Truy cập MongoDB qua Mongo Shell Sau khi cài đặt thành công, bạn có thể truy cập MongoDB bằng lệnh: 17

4.1.3 Tạo cơ sở dữ liệu 18

4.1.4 Tạo Collection và Chèn Dữ liệu 18

4.2 Truy vấn dữ liệu trong MongoDB 18

4.2.1 Tìm kiếm tài liệu 18

4.2.2 Sử dụng các toán tử truy vấn 19

4.3 Cập nhật và xóa dữ liệu 20

4.3.1 Cập nhật tài liệu 20

4.3.2 Xóa tài liệu 20

4.4 Lập chỉ mục (Indexing) 21

4.4.1 Cơ chế hoạt động của chỉ mục 21

4.4.2 Các loại chỉ mục trong MongoDB 21

4.4.3 Xây dựng và Quản lý Chỉ mục 22

TÀI LIỆU THAM KHẢO 23

Trang 4

CHƯƠNG 1 TỔNG QUAN VỀ NOSQL DATABASES

1.1 Khái niệm về NoSQL

NoSQL là một thuật ngữ tổng quát được sử dụng để mô tả các hệ thống quản lý cơ sở

dữ liệu (DBMS) không sử dụng mô hình quan hệ SQL (Structured Query Language) để tổ chức dữ liệu Thay vì đó, NoSQL thường tập trung vào các mô hình lưu trữ dữ liệu linh hoạt hơn và có thể mở rộng tốt khi xử lý dữ liệu lớn và phân tán

NoSQL xuất hiện giúp giải quyết, khắc phục các vấn đề của SQL:

 Đầu tiên phải kể đến là vấn đề hiệu suất

 Giúp cải thiện hiệu suất đáng kể so với RDBMS trước đó

 Khả năng khả mở rộng: dễ dàng mở rộng, thêm sửa xóa đơn giản Có thể sử dụng nhiều server để lưu trữ dữ liệu

1.2 Các loại NoSQL database

NoSQL databases là các hệ quản trị cơ sở dữ liệu không tuân theo mô hình bảng của

cơ sở dữ liệu quan hệ (SQL) Dưới đây là các loại NoSQL database phổ biến, phân loại theo cấu trúc và cách lưu trữ dữ liệu:

 Cơ sở dữ liệu Key-Value (Ví dụ: Redis, DynamoDB): Lưu trữ dữ liệu dưới dạng cặp key-value, giúp truy xuất dữ liệu nhanh chóng

 Cơ sở dữ liệu Document (Ví dụ: MongoDB, CouchDB): Mỗi object được lưu trữ trong cơ sở dữ liệu dưới dạng document Dữ liệu sẽ được lưu trữ dưới dạng

BSON/JSON/XML dưới database Với dạng này chúng ta có thể dễ dàng thêm, sửa, xóa trường một cách linh hoạt vì vậy nó khắc phục được cấu trúc cứng nhắc của Schema

 Cơ sở dữ liệu Wide-Column Store (Ví dụ: Apache Cassandra, HBase): Dữ liệu được tổ chức thành các cột thay vì hàng, giúp tối ưu cho việc truy xuất dữ liệu theo cột

 Cơ sở dữ liệu Graph (Ví dụ: Neo4j, ArangoDB): Dùng để lưu trữ dữ liệu có mối quan hệ phức tạp, ví dụ như mạng lưới mối quan hệ giữa các đối tượng

Trang 5

CHƯƠNG 2 MONGODB

2.1 MongoDB là gì?

MongoDB được sử dụng rất nhiều tại thời điểm hiện tại MongoDB là một hệ quản trị

cơ sở dữ liệu dạng Document được sử dụng để lưu trữ các dữ liệu lớn MongoDB được đưa ra vào giữa những năm 2000 Đây là một trong những hệ quản trị cơ sở dữ liệu NoSQL (phi quan hệ)

Hiện nay, có nhiều công ty toàn cầu sử dụng MongoDB để lưu trữ lượng dữ liệu

“khổng lồ” của họ như Facebook, Nokia, eBay, Adobe, Google, …

2.2 Đặc điểm của MongoDB

2.2.1 Đặc điểm

 Mỗi cơ sở dữ liệu bao gồm nhiều collection, mỗi collection lại chứa nhiều Document Mỗi Document có thể khác nhau về số lượng các trường dữ liệu Kích thước và nội dung của mỗi Document đều có thể khác nhau

 Cấu trúc của Document phù hợp với việc các nhà phát triển xây dựng các class

và object bằng các ngôn ngữ lập trình tương ứng Các nhà phát triển sẽ thường phát biểu rằng cấu trúc của họ không có các hàng và các cột nhưng vẫn có một cấu trúc dữ liệu rõ ràng với các cặp key-value

 Các hàng (hay có thể là documents được gọi trong MongoDB) không cần phải định nghĩa schema Thay vào đó, các trường có thể được tạo linh hoạt

 Mô hình dữ liệu sẵn có trong MongoDB cho phép bạn biểu diễn các mối quan

hệ phân cấp, để lưu trữ mảng và các cấu trúc phức tạp khác dễ dàng hơn

 Khả năng mở rộng - MongoDB có tính mở rộng cao Trên thực tế các công ty trên toàn thế giới đã xác định được các cụm với số node được chạy trên 100 nodes với khoảng hàng triệu document trong cơ sở dữ liệu

2.2.2 Các thuật ngữ MongoDB thường dùng

 _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 chẳng may có quên thì MongoDB sẽ tự động sinh ra trường này

 collection: là một tập các Documents Một collection tương đương với một bảng được tạo bởi bất kỳ một hệ quản trị cơ sở dữ liệu quan hệ nào có thể là Oracle hay MySQL Một collection tồn tại trong cơ sở dữ liệu và nó không có bất kỳ một loại cấu trúc nào

 Cursor: là con trỏ trỏ tới tập kết quả của một tập truy vấn Client có thể lặp qua một con trỏ để lấy kết quả của dữ liệu

 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

Trang 6

 Document: là một bản ghi trong 1 collection của MongoDB tương ứng được gọi là 1 document Document lần lượt bao gồm có tên trường và giá trị tương ứng

 Field: là một cặp key-value 1 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

 JSON: được biết đến như là một ký hiệu đối tượng JavaScript Đây là một dạng văn bản đơn giản, dễ đọc để thể hiện dữ liệu có cấu trúc Hiện tại JSON được

hỗ trợ trong nhiều ngôn ngữ lập trình

2.2.3 Ưu điểm

 Tính linh hoạt: MongoDB là một hệ thống cơ sở dữ liệu phi quan hệ, nó cung cấp khả năng lưu trữ dữ liệu bất cứ khi nào, bất cứ nơi đâu, không cần phải tuân thủ một mô hình quan hệ cụ thể Phát triển hệ thống tệp riêng GridFS, gần giống với hệ thống tệp phân tán Hadoop (sử dụng hệ thống tệp nhằm để lưu trữ các tệp vượt qua kích thước giới hạn của BSON (16 MB cho mỗi document))

 Không schema: Giống như các cơ sở dữ liệu NoSQL khác, MongoDB không yêu cầu các schema được xác định trước

 Khả năng mở rộng: MongoDB có khả năng mở rộng dễ dàng, nhờ tính năng sharding cho phép phân chia dữ liệu thành nhiều phần và lưu trữ trên nhiều máy chủ

 Tốc độ truy xuất nhanh: MongoDB có thể đáp ứng các yêu cầu truy vấn dữ liệu trong thời gian ngắn hơn so với các hệ thống cơ sở dữ liệu quan hệ truyền thống

 Tính khả dụng cao: MongoDB cung cấp tính năng sao lưu và phục hồi dữ liệu, giúp người dùng bảo vệ dữ liệu của mình khỏi những rủi ro

 Hỗ trợ bên thứ ba: MongoDB hỗ trợ một số công cụ lưu trữ và cung cấp API công cụ lưu trữ có thể cắm được (pluggable storage engine API) cho phép các bên thứ ba phát triển công cụ lưu trữ dữ liệu riêng

2.2.4 Nhược điểm

 Tính liên tục: Với chiến lược chuyển đổi dự phòng tự động, người dùng chỉ có thể thiết lập một node master trong cụm MongoDB Nếu node master bị lỗi, một node khác sẽ tự động chuyển đổi thành master mới Quá trình chuyển đổi này đảm bảo tính liên tục, nhưng không diễn ra tức thời mà có thể mất tới một phút

 Giới hạn ghi: Node master duy nhất của MongoDB cũng làm giới hạn lại tốc độ ghi dữ liệu vào cơ sở dữ liệu

 Tính nhất quán của dữ liệu: MongoDB không cung cấp tính toàn vẹn tham chiếu đầy đủ thông qua việc sử dụng các ràng buộc khóa ngoại (foreign-key), điều này có thể ảnh hưởng đến tính nhất quán của dữ liệu

Trang 7

 Bảo mật: Tính năng xác thực người dùng không được mặc định bật trong cơ sở

dữ liệu MongoDB Để bảo mật hệ thống trước các cuộc tấn công của tin tặc, bạn có thể thủ công thiết lập các cài đặt chặn những kết nối lạ và không an toàn

2.3 Kiến trúc của MongoDB

Kiến trúc của MongoDB được thể hiện ở hình dưới đây:

Hình 2.1 Kiến trúc của MongoDB

2.3.1 Các thành phần chính

Các thành phần chính trong kiến trúc của MongoDB gồm [1]:

 Driver: Các ứng dụng sẽ sử dụng Node.js MongoDB driver để tạo kết nối với MongoDB và chạy các chương trình Phần này cũng hỗ trợ các trình điều khiển khác như:

o Trình điều khiển C

o Trình điều khiển C ++

o Trình điều khiển C #

o Go Driver

o Trình điều khiển Java

o Trình điều khiển Node.js

o Trình điều khiển PHP

o Trình điều khiển Python

o Trình điều khiển Ruby

o Trình điều khiển Rust

o Trình điều khiển Scala

o Trình điều khiển Swift

Trang 8

 Query router: là một thành phần giúp điều phối các truy vấn trong sharded cluster, nhận yêu cầu từ ứng dụng, định tuyến chúng đến các shard thích hợp, và trả kết quả về cho ứng dụng Điều này giúp ứng dụng không cần quan tâm đến cách dữ liệu được phân chia trên nhiều shard, đồng thời tối ưu hóa việc truy xuất và xử lý

dữ liệu trong các môi trường có quy mô lớn

 Shard: MongoDB Sharding là một kỹ thuật để phân phối dữ liệu trên multinode

Nó giúp hệ thống mở rộng theo chiều ngang để lưu trữ dữ liệu trên nhiều máy chủ khác nhau

 Primary Replica Set Member: được sử dụng để nhận tất cả các thao tác ghi, đọc và

xử lý dữ liệu Nó duy trì oplog cho tất cả các hoạt động ghi đang được thực hiện trên tập dữ liệu

 Secondary Replica Set Member: được sử dụng để duy trì các tập dữ liệu chính Nó đọc oplog của primary và áp dụng các thay đổi trong tập dữ liệu của nó một cách không đồng bộ

Trang 9

Tính dự phòng và tính sẵn sàng của MongoDB được thể hiện ở bộ bản sao thông qua việc bầu cử Bộ bản sao sẽ tiến hành bầu cử để xác định nút phụ nào sẽ trở thành nút chính khi có một số hoạt động như[3]:

 Thêm một nút mới vào bộ bản sao

 Tạo một bộ bản sao mới

 Xác định nút phụ đã cập nhật dữ liệu gần đây nhất từ nút chính

 Heartbeat và trạng thái kết nối với các thành viên tập bản sao khác

 Các mức độ ưu tiên do người dùng xác định được chỉ định cho các thành viên tập bản sao

Hình 2.3 Bầu chọn một nút phụ làm nút chính

Trang 10

Để đảm bảo cho việc bầu cử có thể diễn ra nhanh chóng, MongoDB cung cấp nút Arbiter Nút Arbiter không chứa bản sao dữ liệu của nút chính và không thể trở thành nút chính, nó chỉ có thể bầu cử cho nút phụ khác trở thành nút chính[5] Nút Arbiter sẽ giúp hệ thống tiết kiệm tài nguyên do nó không chứa dữ liệu, đồng thời đảm bảo rằng số nút trong một bộ bản sao là số lẻ

Hình 2.4 Nút Arbiter trong replica sets

b Sharding

Sharding là phương pháp mở rộng theo chiều ngang, nó giúp phân tán dữ liệu trên nhiều máy khác nhau Một cụm phân mảnh (sharded cluster) gồm các thành phần sau[6]:

 Shard: mỗi shard chứa một phần của dữ liệu được phân đoạn Mỗi phân đoạn phải được triển khai dưới dạng một bộ bản sao

 Router: hoạt động như một bộ định tuyến truy vấn, cung cấp giao diện giữa ứng dụng và cụm phân mảnh

 Config server: nó lưu trữ siêu dữ liệu và cấu hình cài đặt của cụm

Hình 2.5 Sharding

Trang 11

MongoDB phân đoạn dữ liệu tới mức collection (tương đương với một bảng trong hệ quản trị cơ sở dữ liệu thường), phân phối collection data vào các shard trong cụm Việc phân phối dữ liệu sẽ được thực hiện dựa trên shard keys và

chunks, trong đó mỗi shard key sẽ bao gồm một hoặc một số trường trong một bản ghi, còn chunk là một tập hợp các bản ghi được lưu trên một shard và chứa một phạm vi giá trị khóa[7]

Khi có một bản ghi mới, dữ liệu thuộc các trường trong shard key sẽ được dùng

để xác định rằng bản ghi đó sẽ được lưu trong shard nào Có hai cách để phân tán

dữ liệu trên cụm phân mảnh[6]:

 Hashed Shard Key: Dữ liệu được phân mảnh dựa trên giá trị băm của trường shard key Điều này đảm bảo việc phân phối dữ liệu đồng đều trên các shard Nó thường được sử dụng khi muốn phân phối dữ liệu một cách ngẫu nhiên nhưng đồng đều giữa các shard, tránh hiện tượng hotspot

Hình 2.6 Hashed Shard Key

 Range-based Shard Key: dữ liệu được phân phối theo dải giá trị của shard key Điều này cho phép lưu trữ các tài liệu có giá trị tương tự nhau ở cùng một shard Phương pháp này thích hợp cho các truy vấn có tính chất tuần tự hoặc tìm kiếm theo phạm vi, nhưng có thể dẫn đến sự mất cân bằng trong phân phối dữ liệu nếu giá trị của shard key tăng tuyến tính, dẫn đến tình trạng hotspot

Hình 2.7 Range-based Shard Key

Trang 12

quy mô theo chiều ngang

MySQL sử dụng khả năng điều chỉnh quy mô theo chiều dọc và bản sao chỉ

có quyền đọc để cải thiện hiệu suất ở quy mô lớn

MongoDB không có lược đồ, nhờ đó

mang lại tính linh hoạt cao hơn và

cho phép cơ sở dữ liệu này thao tác

với dữ liệu phi cấu trúc, bán cấu trúc

và có cấu trúc

MongoDB sử dụng các chứng chỉ Kerberos, X.509 và LDAP để xác thực người dùng

Trang 13

CHƯƠNG 3 CƠ CHẾ BẢO MẬT CỦA MONGODB VÀ CÁC NGUY CƠ LỖ

HỔNG

3.1 Cơ chế xác thực (Authentication)

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

3.1.1 Phương thức xác thực

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ọ:

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:

SCRAM-SHA-1 - Sử dụng hàm băm SHA-1

- Thay đổi số lần lặp của mã SHA -1 SCRAM-SHA-256 - Sử dụng hàm băm SHA – 256

- Thay đổi số lần lặp của mã SHA 256

Trang 14

3.1.1.2 X.509

Xác thực bằng x.509 certificates là một cơ chế an toàn trong MongoDB, cho phép sử dụng các chứng chỉ số thay cho tên người dùng và mật khẩu để xác thực giữa các máy khách (client) và máy chủ (server) Ngoài ra, MongoDB cũng hỗ trợ

sử dụng chứng chỉ x.509 để xác thực nội bộ giữa các thành viên của replica set và sharded cluster

X.509 là một tiêu chuẩn cho các chứng chỉ mã hóa sử dụng trong các kết nối bảo mật thông qua TLS/SSL Chứng chỉ X.509 có thể được sử dụng để xác minh danh tính của máy khách, máy chủ và các thành viên trong hệ thống MongoDB

Certificate Authority (CA)

 Để sử dụng chứng chỉ X.509 trong môi trường sản xuất, MongoDB yêu cầu các chứng chỉ hợp lệ được tạo ra và ký bởi một Certificate Authority (CA) đáng tin cậy

 CA có thể là một cơ quan độc lập, tổ chức của bạn, hoặc các bên cung cấp chứng chỉ bên thứ ba

 MongoDB yêu cầu tất cả chứng chỉ của các thành viên trong replica set hoặc sharded cluster phải được phát hành bởi cùng một CA

b Yêu cầu về nội dung chứng chỉ khách hàng

Chứng chỉ của khách hàng phải chứa các trường sau:

 keyUsage = digitalSignature

extendedKeyUsage = clientAuth Xác thực giữa các thành viên của Replica Set và Sharded Cluster

Có thể sử dụng chứng chỉ X.509 để xác thực nội bộ giữa các thành viên của replica sets và sharded clusters, thay cho việc sử dụng keyfiles

Yêu cầu về chứng chỉ cho thành viên nội bộ

 Tất cả các chứng chỉ của thành viên trong replica set hoặc sharded cluster phải được phát hành bởi cùng một CA

Ngày đăng: 21/10/2024, 16:34