Uau tantas respostas complicadas / confusas aqui.
Isso é a partir da v3.4 .
Resposta curta.
1) Inicie o MongoDB sem controle de acesso.
mongod --dbpath /data/db
2) Conecte-se à instância.
mongo
3) Crie o usuário.
use some_db
db.createUser(
{
user: "myNormalUser",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "some_db" },
{ role: "read", db: "some_other_db" } ]
}
)
4) Pare a instância do MongoDB e inicie-a novamente com controle de acesso.
mongod --auth --dbpath /data/db
5) Conecte e autentique como o usuário.
use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
Resposta longa: leia isto se quiser entender corretamente.
É realmente simples. Vou burlar o seguinte https://docs.mongodb.com/manual/tutorial/enable-authentication/
Se você quiser saber mais sobre o que as funções realmente fazem, leia mais aqui: https://docs.mongodb.com/manual/reference/built-in-roles/
1) Inicie o MongoDB sem controle de acesso.
mongod --dbpath /data/db
2) Conecte-se à instância.
mongo
3) Crie o administrador do usuário. A seguir, cria um administrador de usuário no admin
banco de dados de autenticação. O usuário é um dbOwner
sobre o some_db
banco de dados e NÃO sobre o admin
banco de dados, isso é importante lembrar.
use admin
db.createUser(
{
user: "myDbOwner",
pwd: "abc123",
roles: [ { role: "dbOwner", db: "some_db" } ]
}
)
Ou se você deseja criar um administrador que seja administrador sobre qualquer banco de dados:
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
4) Pare a instância do MongoDB e inicie-a novamente com controle de acesso.
mongod --auth --dbpath /data/db
5) Conecte e autentique como administrador do usuário no admin
banco de dados de autenticação, NÃO no some_db
banco de dados de autenticação. O administrador do usuário foi criado no admin
banco de dados de autenticação, o usuário não existe no some_db
banco de dados de autenticação.
use admin
db.auth("myDbOwner", "abc123")
Agora você está autenticado como um dbOwner
over the some_db
database. Então agora, se você deseja ler / escrever / fazer coisas diretamente no some_db
banco de dados, pode mudar para ele.
use some_db
//...do stuff like db.foo.insert({x:1})
// remember that the user administrator had dbOwner rights so the user may write/read, if you create a user with userAdmin they will not be able to read/write for example.
Mais sobre funções: https://docs.mongodb.com/manual/reference/built-in-roles/
Se você deseja criar usuários adicionais que não são administradores de usuários e que são apenas usuários normais, continue lendo abaixo.
6) Crie um usuário normal. Este usuário será criado no some_db
banco de dados de autenticação abaixo.
use some_db
db.createUser(
{
user: "myNormalUser",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "some_db" },
{ role: "read", db: "some_other_db" } ]
}
)
7) Saia do shell mongo, reconecte-se, autentique como o usuário.
use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})