MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Kết nối với cơ sở dữ liệu MongoDB


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 đị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--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--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--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.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sự khác biệt giữa phương thức insert (), insertOne () và insertMany () là gì?

  2. Chọn tài liệu trong đó tất cả các giá trị trong một trường mảng tồn tại trong một mảng khác

  3. Sự cố khi chạy ví dụ trong Meteor

  4. Có cách nào để ngăn MongoDB thêm dạng số nhiều vào tên bộ sưu tập không?

  5. MongoDB $ tuần