2012-07-01 27 views
9

Với mục đích muốn tạo một cơ sở dữ liệu MongoDB trong một nhiệm vụ Capistrano, tôi cần tìm ra cách tạo cơ sở dữ liệu mới thông qua trình bao MongoDB khi MongoDB đang chạy với auth được bật.Làm thế nào để tạo một MongoDB mới từ dòng lệnh được bật auth?

Với auth bật vỏ MongoDB không thể làm bất cứ điều gì mà không xác thực đầu tiên, nhưng xác thực đã xảy ra trong khi sử dụng cơ sở dữ liệu admin theo như tôi biết. Vì vậy, tôi đã kết nối với nó để bắt đầu như:

sudo -u mongodb mongo admin --eval "db.auth(username, password)" 

Và điều đó xác thực tôi để thực hiện thêm nhưng ... tại thời điểm đó tôi cần tạo cơ sở dữ liệu và người dùng cho nó trong cùng phiên trình vỏ . Tuy nhiên, tôi không thể:

sudo -u mongodb mongo admin --eval "db.auth(username, password);use new_database" 

Vì không thể sử dụng use database trong eval. Vì vậy, tôi đã cố gắng thay vì:

sudo -u mongodb mongo admin --eval "db.auth(username, password);db = connect('localhost:27017/new_database')" 

Và đó thực sự sẽ làm cho tôi một thể hiện của cơ sở dữ liệu mới, tôi muốn tạo nhưng nếu tôi cố gắng:

sudo -u mongodb mongo admin --eval "db.auth(username, password);connect('localhost:27017/new_database').addUser(new_user, new_password)" 

tôi nhận được một lỗi xác thực, vì vậy rõ ràng sử dụng lệnh connect() để quên rằng tôi đã xác thực trước đó.

Vì vậy, đây là nơi tôi bị kẹt, cố gắng tạo cơ sở dữ liệu trong một dòng với MongoDB bằng cách sử dụng auth và người dùng quản trị viên.

Bất kỳ đề xuất nào về cách tôi có thể thực hiện việc này?

Trả lời

12

Bạn có thể sử dụng db.getSiblingDB(name) để tham khảo các cơ sở dữ liệu mới và thêm một tài khoản mới, ví dụ:

mongo -u username -p password admin --eval "db.getSiblingDB('new_database').addUser('new_user', 'new_password');" 

Bây giờ bạn sẽ có thể để xác thực từ dòng lệnh sử dụng -u và -p:

mongo -u new_user -p new_password new_database 
+0

Làm việc hoàn hảo, cảm ơn! – rjoll

+0

http://docs.mongodb.org/manual/reference/method/db.getSiblingDB/ – kschaper

+0

@kschaper: Cảm ơn, sửa chữa liên kết tài liệu (từ liên kết wiki cũ). – Stennie

0

Hãy coi chừng thực tế rằng chức năng addUser không được chấp nhận kể từ phiên bản 2.6.

Sử dụng db.createUser()db.updateUser() thay vì db.addUser() để thêm người dùng vào MongoDB.

Mã của bạn nên được như dưới đây:

mongo -u username -p password admin --eval "db.getSiblingDB('new_database').createUser({ user : 'new_user', pwd : 'new_password', roles : [{ role: 'readWrite', db: 'new_database'}]});" 
Các vấn đề liên quan