2013-05-23 33 views
13

Tôi bắt đầu một trường hợp mongo mới, tạo người dùng, ủy quyền, nhưng khi tôi chạy "hiển thị bộ sưu tập", hệ thống cho biết rằng id không được ủy quyền. Tôi không biết tại sao?Không được phép truy vấn trên admin.system.namespaces trên mongodb

# mongo admin 
MongoDB shell version: 2.4.3 
connecting to: admin 
Server has startup warnings: 
Thu May 23 18:23:56.735 [initandlisten] 
Thu May 23 18:23:56.735 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary. 
Thu May 23 18:23:56.735 [initandlisten] **  32 bit builds are limited to less than 2GB of data (or less with --journal). 
Thu May 23 18:23:56.735 [initandlisten] **  See http://dochub.mongodb.org/core/32bit 
Thu May 23 18:23:56.735 [initandlisten] 
> db = db.getSiblingDB("admin") 
admin 
> db.addUser({user:"sa",pwd:"sa",roles:["userAdminAnyDatabase"]}) 
{ 
     "user" : "sa", 
     "pwd" : "75692b1d11c072c6c79332e248c4f699", 
     "roles" : [ 
       "userAdminAnyDatabase" 
     ], 
     "_id" : ObjectId("519deedff788eb914bc429b5") 
} 
> show collections\ 
Thu May 23 18:26:50.103 JavaScript execution failed: SyntaxError: Unexpected token ILLEGAL 
> show collections 
Thu May 23 18:26:52.418 JavaScript execution failed: error: { 
     "$err" : "not authorized for query on admin.system.namespaces", 
     "code" : 16550 
} at src/mongo/shell/query.js:L128 
> db.auth("sa","sa") 
1 
> show collections 
Thu May 23 18:27:22.307 JavaScript execution failed: error: { 
     "$err" : "not authorized for query on admin.system.namespaces", 
     "code" : 16550 
} at src/mongo/shell/query.js:L128 

Trả lời

0

Tôi sẽ thử cấp vai trò đã đọc cho người dùng. userAdminAnyDatabase cấp khả năng quản trị người dùng.

13

Tôi đã gặp vấn đề tương tự, nhưng tôi đã tìm thấy hướng dẫn này và nó đã giúp tôi.

http://www.hacksparrow.com/mongodb-add-users-and-authenticate.html

sử dụng:

db.addUser('sa', 'sa') 

thay vì

db.addUser({user:"sa",pwd:"sa",roles:["userAdminAnyDatabase"]}) 
{ 
     "user" : "sa", 
     "pwd" : "75692b1d11c072c6c79332e248c4f699", 
     "roles" : [ 
       "userAdminAnyDatabase" 
     ], 
     "_id" : ObjectId("519deedff788eb914bc429b5") 
} 
+0

này giải quyết vấn đề của tôi và tôi đã nói rằng đây có thể là ví dụ hoàn hảo của mã hóa KISS (Keep It Simple, Stupid) – Max

7

tôi đã cùng một vấn đề và đây là cách tôi giải quyết nó:

db = db.getSiblingDB('admin') 
db.addUser( 
    { user: "mongoadmin", 
     pwd: "adminpass", 
     roles: ['clusterAdmin', 'userAdminAnyDatabase', 'readAnyDatabase'] }) 
3

Đối với MongoDB versi trên 2,6 sử dụng:

db.createUser(
{ 
    user: "testUser" 
    pwd: "password", 
    roles: [{role: "readWrite", db:"yourdatabase"}] 
}) 

Xem docs

+0

Câu trả lời này là chính xác, nhưng lưu ý, OP đang sử dụng phiên bản 2.4.3. –

8

Như Robert nói, người sử dụng quản trị viên chỉ có quyền admin, không phải viết trong cơ sở dữ liệu. Vì vậy, bạn phải tạo một người dùng tùy chỉnh cho cơ sở dữ liệu của bạn. Có nhiều cách khác nhau. Tôi đã chọn cách dbOwner.

(Tôi sử dụng Ubuntu Server, Mongo 2.6.3 và Robomongo)

Vì vậy, để làm được điều này, fisrt tạo người dùng quản trị của bạn như Mongo nói:

loại mongo trong vỏ linux của bạn

và các lệnh trong shell Mongo:

use admin 
db.createUser({user:"mongoadmin",pwd:"chooseyouradminpassword",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) 
db.auth("mongoadmin","chooseyouradminpassword") 
exit 

chỉnh sửa các tập tin Mongo conf với:

nano /etc/mongod.conf 

Bạn có thể sử dụng vi nếu nano chưa được cài đặt.

kích hoạt xác thực bởi không chú thích/cách thêm các dòng auth=true

nếu bạn muốn sử dụng Robomongo từ máy khác để thay đổi dòng bind_ip=127.0.0.1 bởi bind_ip=0.0.0.0 (có lẽ bạn nên thêm bảo vệ tốt hơn trong sản xuất).

gõ vào vỏ linux:

service mongod restart 
mongo 

Và trong vỏ Mongo:

use admin 
db.auth("mongoadmin","pwd:"chooseyouradminpassword") 
use doomnewdatabase 
db.createUser({user:"doom",pwd:"chooseyourdoompassword",customData:{desc:"Just me as I am"},roles : [{role:"dbOwner",db:"doomnewdatabase"}]}) 
db.auth("doom","chooseyourdoompassword") 
show collections 

(customData không bắt buộc).

Nếu bạn muốn thử nếu nó hoạt động, gõ này trong vỏ Mongo:

db.products.insert({ item: "card", qty: 15 }) 
show collections 
db.products.find() 

Chúc may mắn! Hy vọng nó sẽ giúp bạn và những người khác!

Tôi đã tìm kiếm thông tin này trong nhiều giờ.

+1

Awesome :) câu trả lời hoàn chỉnh nhất về việc thiết lập auth từng thấy –

+1

@matteo: bình luận của bạn đi thẳng vào trái tim tôi ... hy vọng câu trả lời của tôi sẽ giúp bạn. cảm ơn. – doom

1

Tôi giải quyết nó như vậy cho MongoDB 2,6 + hiện 3

db.createUser(
    { 
    user: "username", 
    pwd: "password", 
    roles: [ { role: "root", db: "admin" } ] 
    } 
) 

lưu ý rằng đối với vai trò nộp thay vì userAdminAnyDatabase chúng tôi sử dụng gốc

Các vấn đề liên quan