Je commence une nouvelle instance mongo, crée un utilisateur, l'autorise, mais lorsque j'exécute "show collections", le système indique que l'ID n'est pas autorisé. Je ne sais pas pourquoi?
# 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
J'ai eu le même problème, mais j'ai trouvé ce tutoriel et il m'a aidé.
http://www.hacksparrow.com/mongodb-add-users-and-authenticate.html
utilisation:
db.addUser('sa', 'sa')
au lieu de
db.addUser({user:"sa",pwd:"sa",roles:["userAdminAnyDatabase"]})
{
"user" : "sa",
"pwd" : "75692b1d11c072c6c79332e248c4f699",
"roles" : [
"userAdminAnyDatabase"
],
"_id" : ObjectId("519deedff788eb914bc429b5")
}
Comme Robert le dit, les utilisateurs admin ne disposent que de droits sur admin, pas sur l'écriture dans les bases de données . Il y a différentes manières. J'ai choisi la manière dbOwner.
(J'utilise Ubuntu Server, Mongo 2.6.3 et Robomongo)
Donc, pour ce faire, commencez par créer votre administrateur comme le dit mongo:
tapez mongo
dans votre shell linux
et ces commandes dans le shell mongo:
use admin
db.createUser({user:"mongoadmin",pwd:"chooseyouradminpassword",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
db.auth("mongoadmin","chooseyouradminpassword")
exit
éditez le fichier mongo conf avec:
nano /etc/mongod.conf
Vous pouvez utiliser vi si nano n'est pas installé.
activer l'authentification en décommentant/en ajoutant la ligne auth=true
si vous voulez utiliser Robomongo depuis une autre machine, changez la ligne bind_ip=127.0.0.1
par bind_ip=0.0.0.0
(peut-être devriez-vous ajouter plus de protection en production).
tapez linux Shell:
service mongod restart
mongo
Et en mongo Shell:
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 n'est pas obligatoire).
Si vous voulez essayer si cela fonctionne, tapez ceci dans le shell mongo:
db.products.insert( { item: "card", qty: 15 } )
show collections
db.products.find()
Bonne chance ! J'espère que cela vous aidera et aidera les autres!
J'ai chercher ces informations pendant des heures.
J'ai eu le même problème et voici comment je l'ai résolu:
db = db.getSiblingDB('admin')
db.addUser(
{ user: "mongoadmin",
pwd: "adminpass",
roles: ['clusterAdmin', 'userAdminAnyDatabase', 'readAnyDatabase'] } )
Pour MongoDB version 2.6, utilisez:
db.createUser(
{
user: "testUser"
pwd: "password",
roles: [{role: "readWrite", db:"yourdatabase"}]
})
Voir le docs
Je l'ai résolu comme ça Pour mongoDB 2.6 + actuellement 3
db.createUser(
{
user: "username",
pwd: "password",
roles: [ { role: "root", db: "admin" } ]
}
)
notez que pour role classé au lieu de userAdminAnyDatabase nous utilisons root
J'essayerais d'accorder le rôle de lecture à l'utilisateur. userAdminAnyDatabase permet d'administrer des utilisateurs.