2015-02-16 19 views
8

Tôi đang sử dụng MongoDB 2.6.7mongoose 3.8.23 driver cho Node.js. Cơ sở dữ liệu là sharded trong 2 mảnh (mỗi là bản sao riêng biệt) và mọi thứ trông ok khi tôi nhập vỏ Mongo trên bất kỳ sơ thẩm, bản sao, mongos, máy chủ cấu hình, vvKhông ủy quyền cho truy vấn trên MongoDB mảnh vỡ từ Mongoose lái xe

Sau đó tôi đã thêm quản trị người dùng và người dùng (có tên normaluser) cho cơ sở dữ liệu cụ thể mà tôi đang kết nối. Tôi đã thêm chúng vào số mongos. Người sử dụng có:

[ 
{ 
    "_id" : "admin.adminuser", 
    "user" : "adminuser", 
    "db" : "admin", 
    "roles" : [ 
     { 
      "role" : "dbAdminAnyDatabase", 
      "db" : "admin" 
     }, 
     { 
      "role" : "readWriteAnyDatabase", 
      "db" : "admin" 
     }, 
     { 
      "role" : "userAdminAnyDatabase", 
      "db" : "admin" 
     }, 
     { 
      "role" : "clusterAdmin", 
      "db" : "admin" 
     } 
    ] 
} 
] 

[ 
{ 
    "_id" : "mydb.normaluser", 
    "user" : "normaluser", 
    "db" : "mydb", 
    "roles" : [ 
     { 
      "role" : "readWrite", 
      "db" : "mydb" 
     } 
    ] 
} 

]

Từ ứng dụng Node.js tôi đang kết nối với mongos trường (Tôi có 2 mongos trường hợp) như thế này:

mongoose.createConnection('mongodb://mongos-ip-1:27018,mongos-ip-2:27018/mydb', {user : 'normaluser', password : 'some-password', mongos : true, server : {poolSize : 5, keepAlive : true}} 

Tôi đã kết nối thành công với cơ sở dữ liệu nhưng khi tôi thử truy vấn mydb.some-coll ection từ ứng dụng tôi nhận được lỗi này:

Possibly unhandled MongoError: not authorized for query on mydb.some-collection 

Khi tôi đi đến Mongo vỏ trên một số mongos dụ và đăng nhập như normaluser Tôi có thể truy vấn bất cứ điều gì và nó là ok.

Có ai biết tại sao tôi không thể thực hiện bất kỳ truy vấn nào mặc dù tôi có vai trò đọcWrite cho người dùng và chỉ định người dùng trong url kết nối của mongoose không? Có lẽ tôi đang thiếu một cái gì đó với mongoose?

Tôi thậm chí đã cố gắng để đưa dbowner vai normaluser nhưng không thay đổi

Cảm ơn, Ivan

+0

Mã bit bạn' ve bao gồm nhìn tốt với tôi. Bạn có thể cho chúng tôi biết thêm mã, có thể là mã cho các phát hiện không? Thậm chí tốt hơn, bạn có thể viết một kịch bản tối thiểu cho thấy kết nối với các thông tin đúng và sau đó không xác thực cho một tìm kiếm? – wdberkeley

+0

Tôi đã có cùng một vấn đề (và đến đây tìm kiếm câu trả lời.) Cuối cùng chúng tôi đã phát hiện có một đoạn mã đang cố gắng cập nhật thời gian chờ kết nối, yêu cầu quyền truy cập quản trị, nhưng không thành công và đã "không được ủy quyền cho truy vấn trên mydb .bộ sưu tập của tôi." Không chắc chắn nếu bạn đang ở trong cùng một chiếc thuyền, nhưng tôi sẽ tìm kiếm mã đó đang cố gắng để làm nhiệm vụ hành chính. –

+0

Bạn có cố gắng cấp quyền cho bộ sưu tập đó theo cách thủ công với 'db.auth' không? Nếu không mở vỏ mongo và thử [this] (http://docs.mongodb.org/manual/reference/method/db.auth/#db.auth) – Plentybinary

Trả lời

2

Ivan, hãy thử cú pháp sau:

mongoose.createConnection('mongodb://user:pass@localhost:port/db, ...', opts);
Các vấn đề liên quan