Giới thiệu
Khi bạn đã có sẵn máy chủ MongoDB, một trong những hành động đầu tiên và phổ biến nhất mà bạn cần thực hiện là kết nối với cơ sở dữ liệu thực tế. Điều này đòi hỏi sự phối hợp để đảm bảo rằng cơ sở dữ liệu được định cấu hình theo cách cho phép ứng dụng khách của bạn kết nối và xác thực.
Điều này có nghĩa là bạn sẽ cần hiểu cách kết nối với cơ sở dữ liệu MongoDB của mình bằng cách cung cấp vị trí máy chủ, thông số kết nối và thông tin đăng nhập chính xác. Trong hướng dẫn này, chúng tôi sẽ tập trung vào cách kết nối với cơ sở dữ liệu từ phía máy khách bằng mongo
Ứng dụng khách shell MongoDB, được thiết kế chủ yếu cho các phiên tương tác với cơ sở dữ liệu của bạn.
Trong hướng dẫn đi kèm, bạn có thể tìm hiểu cách định cấu hình cài đặt xác thực của MongoDB để phù hợp với yêu cầu của bạn. Hãy cân nhắc đọc cả hai phần để có bức tranh toàn cảnh về cách thực hiện xác thực từ quan điểm của cả hai bên.
Thông tin cơ bản về mongo
khách hàng
mongo
client là một trình khách JavaScript dòng lệnh để kết nối, kiểm soát và tương tác với các máy chủ cơ sở dữ liệu MongoDB. Theo nhiều cách, đây là cách đơn giản nhất để kết nối và bắt đầu sử dụng cơ sở dữ liệu MongoDB của bạn vì nó được bao gồm trong cài đặt MongoDB và có sẵn trên tất cả các nền tảng phổ biến. mongo
ứng dụng khách đặc biệt hữu ích để thực hiện cấu hình ban đầu và cho các phiên tương tác mà bạn muốn khám phá dữ liệu của mình hoặc lặp lại các truy vấn dựa trên kết quả sơ bộ.
Cách bạn kết nối với mongo
shell phụ thuộc vào cấu hình của máy chủ MongoDB và các tùy chọn có sẵn để bạn xác thực tài khoản. Trong các phần sau, chúng ta sẽ xem xét một số tùy chọn kết nối cơ bản. Để rõ ràng hơn, chúng tôi sẽ phân biệt giữa kết nối cục bộ và kết nối từ xa:
- kết nối cục bộ :kết nối trong đó máy khách và phiên bản MongoDB được đặt trên cùng một máy chủ
- kết nối từ xa :nơi máy khách đang kết nối với phiên bản MongoDB có thể truy cập mạng đang chạy trên một máy tính khác
Hãy bắt đầu với việc kết nối với cơ sở dữ liệu từ cùng một máy tính.
Kết nối với cơ sở dữ liệu cục bộ bằng mongo
Không có bất kỳ đối số nào, mongo
lệnh cố gắng kết nối với một phiên bản MongoDB cục bộ.
Để thực hiện việc này, nó cố gắng kết nối với cổng 27017 trên địa chỉ loopback cục bộ:127.0.0.1:27017
. Đây là một trong những giao diện mà máy chủ MongoDB liên kết với cấu hình mặc định của chúng (MongoDB cũng có thể truy cập được thông qua tệp ổ cắm cục bộ).
Bạn có thể kết nối với máy chủ MongoDB cục bộ đang chạy với cấu hình mặc định của nó bằng cách nhập:
mongo
Khi kết nối thành công, bạn có thể sẽ thấy một tập hợp các thông báo khá dài, theo sau là lời nhắc của MongoDB shell:
MongoDB shell version v4.4.6 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("9cf2d126-d25f-4ed8-b159-ef3bba4fcc53") } MongoDB server version: 4.4.6 --- The server generated these startup warnings when booting: 2021-06-04T12:26:53.374+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem 2021-06-04T12:26:54.562+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted --- --- Enable MongoDB's free cloud-based monitoring service, which will then receive and display metrics about your deployment (disk utilization, CPU, operation statistics, etc). The monitoring data will be available on a MongoDB website with a unique URL accessible to you and anyone you share the URL with. MongoDB may use this information to make product improvements and to suggest MongoDB products and deployment options to you. To enable free monitoring, run the following command: db.enableFreeMonitoring() To permanently disable this reminder, run the following command: db.disableFreeMonitoring() --- >
Kết quả hiển thị nhật ký được tạo bởi mongo
lệnh trong khi thiết lập kết nối, theo sau là một số cảnh báo được tạo bởi máy chủ MongoDB khi khởi động. Cuối cùng, có một thông báo về dịch vụ giám sát MongoDB mà bạn có thể chọn để tận dụng hoặc tắt.
Một trong những cảnh báo từ máy chủ MongoDB cho biết rằng kiểm soát truy cập hiện chưa được bật. Đây là lý do chúng tôi có thể kết nối mà không cần cung cấp thông tin xác thực hoặc các chi tiết xác thực khác.
Nếu bạn đang kết nối với máy chủ MongoDB cục bộ có đã được định cấu hình với quyền kiểm soát truy cập, bạn sẽ cần cung cấp thêm thông tin để kết nối. Bạn sẽ cần cung cấp ít nhất tên người dùng và mật khẩu để kết nối bằng --username
được liên kết và --password
tùy chọn:
mongo --username <mongo_username> --password
Đặt --password
ở cuối và không cung cấp mật khẩu nội dòng cho biết rằng bạn muốn MongoDB nhắc nhập mật khẩu thay thế. Điều này an toàn hơn so với việc cung cấp mật khẩu trong chính lệnh vì mật khẩu đó có thể hiển thị hoặc có thể khôi phục được thông qua lịch sử shell, danh sách quy trình và các cơ chế khác.
Máy chủ MongoDB sẽ nhắc bạn nhập mật khẩu của người dùng trước khi kết nối với cơ sở dữ liệu:
MongoDB shell version v.4.4.6Enter password:
Sau khi xác thực thành công, bạn sẽ được kết nối với cơ sở dữ liệu và có thể tiếp tục phiên của mình như bình thường.
Bạn cũng có thể cung cấp thông tin này bằng cách chuyển một chuỗi kết nối thay vì sử dụng --username
và --password
tùy chọn:
mongo "mongodb://<mongo_username>:@127.0.0.1"
Vì chúng tôi đã chỉ ra rằng người dùng có mật khẩu bằng <username>:
nhưng chưa cung cấp cú pháp, mongo
shell sẽ nhắc nhập mật khẩu.
Ngoài ra, bạn cũng có thể xác thực sau khi kết nối với mongo
bình thường bằng cách sử dụng db.auth
lệnh.
Trước tiên, hãy kết nối với cơ sở dữ liệu MongoDB mà không cần cung cấp thông tin đăng nhập:
mongo
Bạn sẽ nhận được một dấu nhắc lệnh như bình thường, nhưng nếu tính năng kiểm soát truy cập được bật, bạn sẽ không có quyền thực hiện nhiều hành động cho đến khi bạn xác thực. Ví dụ:show dbs
lệnh có thể sẽ trống vì bạn không có quyền truy cập để truy vấn các cơ sở dữ liệu có sẵn:
show dbs
Để xác thực, trước tiên, hãy chọn cơ sở dữ liệu mà người dùng của bạn được xác định trong đó. Thông thường, đó sẽ là admin
cơ sở dữ liệu:
use admin
Sau đó, sử dụng db.auth()
để cung cấp tên người dùng của bạn và yêu cầu mật khẩu nhắc nhở:
db.auth({user: "<mongo_username>", passwordPrompt()})
Bạn sẽ được nhắc nhập mật khẩu của tài khoản người dùng như trước đây:
Enter password:
Nếu bạn thành công, máy chủ sẽ xuất ra 1
:
Enter password:1
Bây giờ bạn sẽ có quyền truy cập thường xuyên của người dùng mà bạn đã xác thực là:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
Bạn có thể xem danh sách người dùng đã xác thực và các vai trò được liên kết với kết nối hiện tại bất kỳ lúc nào bằng cách nhập:
db.runCommand("connectionStatus")
{ "authInfo" : { "authenticatedUsers" : [ { "user" : "root", "db" : "admin" } ], "authenticatedUserRoles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "readWriteAnyDatabase", "db" : "admin" } ] }, "ok" : 1}
Kết nối với cơ sở dữ liệu từ xa
Nếu bạn muốn kết nối với cơ sở dữ liệu MongoDB từ xa, bạn sẽ phải cung cấp một số chi tiết bổ sung khi sử dụng mongo
vỏ.
Cụ thể, bạn sẽ cần bao gồm --host
và có thể là --port
cũng như nếu máy chủ MongoDB đang lắng nghe trên một cổng không phải mặc định. Trong hầu hết các trường hợp, bạn cũng cần cung cấp --user
và --password
tùy chọn xác thực với máy chủ từ xa.
Do đó, cấu trúc cơ bản của lệnh khi kết nối với cơ sở dữ liệu MongoDB từ xa trông giống như sau:
mongo --host <mongo_server_address> --port <mongo_server_port> --user <mongo_username> --password
Như đã đề cập trong phần kết nối với cơ sở dữ liệu cục bộ, đặt --password
ở cuối và không cung cấp mật khẩu nội dòng cho biết rằng bạn muốn mongo
shell để nhắc nhập mật khẩu thay thế. Điều này an toàn hơn so với việc cung cấp mật khẩu trong chính lệnh vì mật khẩu đó có thể hiển thị hoặc có thể khôi phục được thông qua lịch sử shell, danh sách quy trình và các cơ chế khác.
Máy chủ MongoDB sẽ nhắc bạn nhập mật khẩu của người dùng trước khi kết nối với cơ sở dữ liệu:
MongoDB shell version v.4.4.6Enter password:
Sau khi xác thực thành công, bạn sẽ được kết nối với cơ sở dữ liệu và có thể tiếp tục phiên của mình như bình thường.
Bạn cũng có thể cung cấp thông tin này bằng cách chuyển một chuỗi kết nối thay vì sử dụng --host
, --port
, --username
và --password
tùy chọn:
mongo "mongodb://<mongo_username>:@<mongo_server_address>:<mongo_server_port>"
Vì chúng tôi đã chỉ ra rằng người dùng có mật khẩu bằng <username>:
nhưng chưa cung cấp cú pháp, mongo
shell sẽ nhắc nhập mật khẩu.
Điều chỉnh cấu hình xác thực của máy chủ MongoDB
Nếu bạn muốn sửa đổi các quy tắc chỉ định cách người dùng có thể xác thực đối với các phiên bản MongoDB của bạn, bạn có thể làm như vậy bằng cách sửa đổi cấu hình máy chủ của mình. Bạn có thể tìm hiểu cách sửa đổi cấu hình xác thực của MongoDB trong bài viết này.
Kết luận
Trong hướng dẫn này, chúng tôi đã đề cập đến xác thực MongoDB từ phía máy khách. Chúng tôi đã trình bày cách sử dụng mongo
shell để kết nối với cả phiên bản cơ sở dữ liệu cục bộ và từ xa bằng nhiều phương pháp.
Biết cách kết nối với các phiên bản MongoDB khác nhau là rất quan trọng khi bạn bắt đầu làm việc với hệ thống cơ sở dữ liệu. Bạn có thể chạy một phiên bản MongoDB cục bộ để phát triển mà không cần bất kỳ xác thực đặc biệt nào, nhưng cơ sở dữ liệu của bạn trong quá trình dàn dựng và sản xuất gần như chắc chắn sẽ yêu cầu xác thực. Có thể xác thực trong cả hai trường hợp sẽ cho phép bạn hoạt động tốt trong các môi trường khác nhau.