Mongodb


Também conhecido como mongo, é um banco de dados NOSQL muito utilizado nos dias de hoje, ele é rápido e escalável e tem duas versões mais utilizadas, 2.6 e 3.7+

Normalmente não precisa de autenticação, mas vale a pena saber configurar quando precisar né? Vale a pena lembrar que o mongo usa um banco de dados próprio para controle de usuário, esse banco se chama admin, portanto vamos configurar os usuários nesse banco!

Uso básico

Inserindo informações

db.users.insertMany( [
   { name: "Ash", age: -1, login: [{ duration: 1, date: 23/10/1990}, { duration: 2, date: 1/7/1997}], active: true },
   { name: "Misty", age: 16, login: [{ duration: 2, date: 23/10/1877}, { duration: 3, date: 2/6/1995}], active: false },
   { name: "Brock", age: 18, login: [{ duration: 3, date: 23/10/2021}, { duration: 4, date: 3/7/1992}], active: true },
   { name: "Tomura", age: 16, login: [{ duration: 4, date: 23/10/2134}, { duration: 5, date: 4/8/1990}], active: true },
   { name: "Midoriya", age: 16, login: [{ duration: 5, date: 23/10/222}, { duration: 6, date: 5/9/1990}], active: false }
]);

Pesquisando

Simples

> db.users.find({name: "Ash"})
{ "_id" : ObjectId("61463f04fe96cdfe7484fbaf"), "name" : "Ash", "age" : -1, "login" : [ { "duration" : 1, "date" : 0.0011557788944723617 }, { "duration" : 1, "date" : 0.00007153587524143358 } ], "active" : true }
> db.users.find({name: "Ash"}, {name: 1})
{ "_id" : ObjectId("61463f04fe96cdfe7484fbaf"), "name" : "Ash" }
db.users.find({active: true}, {name: 1})
{ "_id" : ObjectId("61463f7c436eece3785cb410"), "name" : "Ash" }
{ "_id" : ObjectId("61463f7c436eece3785cb412"), "name" : "Brock" }
{ "_id" : ObjectId("61463f7c436eece3785cb413"), "name" : "Tomura" }

Um pouco mais complexo

db.users.find({"login.duration": {$gt: 3, $lt: 5}, age: {$gt: 17}}).pretty()
{
	"_id" : ObjectId("61463f7c436eece3785cb412"),
	"name" : "Brock",
	"age" : 18,
	"login" : [
		{
			"duration" : 3,
			"date" : 0.0011380504700643245
		},
		{
			"duration" : 4,
			"date" : 0.00021514629948364886
		}
	],
	"active" : true
}

Autenticação

Mongo 2.6

> use admin
switched to db admin
db.createUser({user:"4dm1n", pwd:"4dm1n", roles: [{role: "root", db: "admin"}]})
Successfully added user: {
        "user" : "4dm1n",
        "roles" : [
                {
                        "role" : "root",
                        "db" : "admin"
                }
        ]
}

Testando

mongo -u4dm1n -p4dm1n --authenticationDatabase admin
MongoDB shell version: 2.6.10
connecting to: test

Mongo 3.7

> use admin
switched to db admin
> db.getUsers()
[ ]
> db.createUser({user:"r00t", pwd:"r00t", roles: [{role: "root", db: "admin"}]})

Successfully added user: {
        "user" : "r00t",
        "roles" : [
                {
                        "role" : "root",
                        "db" : "admin"
                }
        ]
}

Testando certo e testando errado:

root@4d60e75e30f3:/# mongo -u4dm1n -p4dm1n --authenticationDatabase admin
MongoDB shell version v3.7.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.7.3
2018-04-03T23:45:08.660+0000 E QUERY    [js] Error: Authentication failed. :
DB.prototype._authOrThrow@src/mongo/shell/db.js:1626:20
@(auth):6:1
@(auth):1:2
exception: login failed
root@4d60e75e30f3:/# mongo -ur00t -pr00t --authenticationDatabase admin
MongoDB shell version v3.7.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.7.3