MongoDB – Como configurar autenticação com usuário e senha (+ banco de dados).
- Postado por Adriano Bonacin
- Categorias mongodb
- Data 28/01/2022
- Comentários 0 comentário
Vamos conversar um pouco sobre autenticação no MongoDB. O ponto mais básico de segurança de qualquer sistema é a autenticação, que visa garantir que o cliente é quem ele está dizendo que é. Temos várias formas de fazer isso, mas vamos focar no bom e velho usuário e senha, que é o mínimo que qualquer ambiente de produção deve ter.
O MongoDB usa o nome técnico Salted Challenge Response Authentication Mechanism (SCRAM) para se referir à autenticação com user e senha. Há um mecanismo bem engenhoso por trás para nos trazer mais segurança, mas também não é de nosso interesse agora.
Uma pequena variação que encontramos no MongoDB é que o user pode se autenticar em diferentes bancos de dados. Assim, no momento da autenticação além do user/pass você também informa em qual banco quer ser autenticar, quando não informado usa-se o admin.
Arquivo de configuração
São duas coisas que precisamos fazer para habilitar a autenticação. Uma delas é a alteração do arquivo de configuração, incluindo a opção:
security:
authorization: enabled
A outra é a criação de um user adminitrativo no DB Admin. Enquanto não existir users criados, você ainda consegue se conectar sem autenticar. Após a criação do primeiro user, estará habilitado a autenticação e será necessário informar usuário, senha e banco de dados.
Por enquanto, para não misturar os assuntos, vamos remover a opção de replicação (ReplicaSet) do nosso arquivo de conf (depois vou falar de como criar o ReplicaSet com autenticação). Além disso, se seu MongoDB já estava rodando, vamos limpar tudo seguindo este artigo<>, por conta da configuração do ReplicaSet que não queremos neste momento.
Agora nosso arquivo de conf está assim (repare security descomentado e replication comentado):
[root@mymongo1 /]# cat /etc/mongod.conf
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# engine:
# wiredTiger:
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
security:
authorization: enabled
#operationProfiling:
#replication:
# replSetName: "rsYadax0"
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
Vamos startar o mongod (após limparmos os dados):
[root@mymongo1 /]# mongod -f /etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 34
child process started successfully, parent exiting
[root@mymongo1 /]#
Criação do usuário
Conectamos no MongoDB (quiet vai remover aquele monte de informações sobre a conexão), trocamos e DB e criamos o user.
[root@mymongo1 /]# mongosh --quiet
test> use admin
switched to db admin
admin> db.createUser(
... {
..... user: "yadaxDBA",
..... pwd: "MinhaSenha12#",
..... roles: [
..... { role: "root", db: "admin" }
..... ]
..... }
... )
{ ok: 1 }
admin>
Se a gente tentar fazer a mesma coisa em seguida, já não é mais possível. Lembre-se, apenas a primeira criação de usuário será permitida. Após isso, você precisa se autenticar com o user recém criado para criar os demais.
[root@mymongo1 /]# mongosh --quiet
test> use admin
switched to db admin
admin> db.createUser(
... {
..... user: "yadaxDBA2",
..... pwd: "MinhaSenha12#",
..... roles: [
..... { role: "root", db: "admin" }
..... ]
..... }
... )
MongoServerError: command createUser requires authentication
admin>
Agora com a autenticação o comando mongosh muda um pouco, lembre-se de utilizar aspas se tiver algum caracter especial que possa ser interpretado errado pelo Linux. Vamos criar nosso segundo user.
[root@mymongo1 /]# mongosh --username yadaxDBA --password "MinhaSenha12#" --quiet
test> use admin
switched to db admin
admin> db.createUser(
... {
..... user: "yadaxDBA2",
..... pwd: "MinhaSenha12#",
..... roles: [
..... { role: "userAdminAnyDatabase", db: "admin" }
..... ]
..... }
... )
{ ok: 1 }
admin>
Há alguns outros detalhes sobre a criação de users dentro de bancos de dados específicos, mas falarei disso em outro artigo junto com a criação de roles. Também vou falar mais a respeito da criação do ReplicaSet com autenticação, que requer um passo extra. Até lá.
Tag:mongodb