Estou tentando adicionar autorização ao meu MongoDB.
Estou fazendo tudo isso no Linux com o MongoDB 2.6.1.
Meu arquivo mongod.conf está no antigo formato de compatibilidade
(foi assim que veio com a instalação).
1) Criei um usuário administrador conforme descrito aqui em (3)
http://docs.mongodb.org/manual/tutorial/add-user-administrator/
2) Eu editei mongod.conf descomentando esta linha
auth = true
3) Finalmente reiniciei o serviço mongod e tentei fazer o login com:
/usr/bin/mongo localhost:27017/admin -u sa -p pwd
4) Posso conectar, mas diz isso ao conectar.
MongoDB shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB shell!
The current date/time is: Thu May 29 2014 17:47:16 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
5) Agora parece que esse sa
usuário que eu criei não tem permissões.
root@test02:~# mc
MongoDB shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB shell!
The current date/time is: Thu May 29 2014 17:57:03 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
[admin] 2014-05-29 17:57:03.011 >>> use admin
switched to db admin
[admin] 2014-05-29 17:57:07.889 >>> show collections
2014-05-29T17:57:10.377-0400 error: {
"$err" : "not authorized for query on admin.system.namespaces",
"code" : 13
} at src/mongo/shell/query.js:131
[admin] 2014-05-29 17:57:10.378 >>> use test
switched to db test
[test] 2014-05-29 17:57:13.466 >>> show collections
2014-05-29T17:57:15.930-0400 error: {
"$err" : "not authorized for query on test.system.namespaces",
"code" : 13
} at src/mongo/shell/query.js:131
[test] 2014-05-29 17:57:15.931 >>>
Qual é o problema? Repeti todo esse procedimento três vezes e
acho que fiz tudo conforme especificado nos documentos do MongoDB. Mas isso não funciona.
Eu esperava que esse sa
usuário estivesse autorizado a fazer qualquer coisa para
poder criar outros usuários e conceder permissões mais específicas.
Respostas:
Eu também estava coçando a cabeça com o mesmo problema e tudo funcionou depois que eu defini a função como raiz ao adicionar o primeiro usuário administrador.
Se você já criou o
admin
usuário, pode alterar a função da seguinte maneira:Para obter uma referência completa das configurações de autenticação, consulte as etapas que compilei após horas de pesquisa na Internet.
fonte
userAdminAnyDatabase
vez deroot
?db.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
db.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
, e isso me deixa confuso. Não estou autorizado a executar um comando e, no entanto, posso executar um comando para me tornar root e, em seguida, executar esse comando. Muito estranho: Sdb.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
fez não trabalho, certifique-se de voltar parause admin
... tive o mesmo problema, uma vez que eu mudei de volta funcionou como um charmeÉ um pouco confuso - acredito que você precisará se permitir readWrite para consultar um banco de dados. Um usuário com dbadmin ou useradmin pode administrar o banco de dados (incluindo a concessão de direitos adicionais), mas não pode executar consultas ou gravar dados.
conceda a si mesmo readWrite e você ficará bem -
http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite
fonte
Talvez um exemplo rápido de como alterar um usuário atual seja útil para alguém. Era isso que eu estava realmente procurando.
Seguindo o conselho de @JohnPetrone eu adicionei função readWrite ao meu usuário administrador com grantRolesToUser
fonte
Você pode tentar: Usar o sinalizador --authenticationDatabase ajuda.
fonte
Eu sei que esta resposta está chegando muito tarde neste tópico, mas espero que você verifique.
O motivo pelo qual você obtém esse erro é baseado na função específica que você concedeu ao usuário, que você reuniu até agora, e sim em atribuir a esse usuário a função
root
resolverá seu problema, mas você deve primeiro entender o que essas funções fazem exatamente antes de concedê-las para os usuários.No tutorial, você concedeu ao usuário o
userAdminAnyDatabase
função que basicamente oferece ao usuário a capacidade de gerenciar usuários de todos os seus bancos de dados. O que você estava tentando fazer com o usuário estava fora da definição de função.O
root
papel tem esse papel incluído na definição, bem como noreadWriteAnyDatabase
,dbAdminAnyDatabase
e outros papéis tornando-se um superusuário (basicamente porque você pode fazer qualquer coisa com ele).Você pode verificar as definições de função para ver quais funções você precisará fornecer aos usuários para concluir determinadas tarefas. https://docs.mongodb.com/manual/reference/built-in-roles/ Não é recomendável tornar todos os seus usuários super :)
fonte
show collections
), você deve dar a ele essa capacidade e nada maisroles: [ { role: "read", db: "admin" } ]
. Observe que a função aqui é lida, é específica do banco de dados e você não pode fazer nada além disso. Confira este link para outras funções docs.mongodb.com/manual/reference/built-in-rolesÉ uma pergunta simples.
ou
fonte
Eu tive um problema semelhante aqui em um ambiente Windows: instalei o Bitnami DreamFactory e ele também instala outro MongoDb iniciado na inicialização do sistema. Eu estava executando meu MongoDbService (que foi iniciado sem nenhum erro), mas notei, depois de perder muito tempo, que estava de fato conectando-me ao Serviço MongoDb do Bitnami. Por favor, dê uma olhada se não houver outra instância do mongoDB em execução no seu servidor.
Boa sorte!
fonte
Além disso, observe que, se o seu cliente mongo shell não conseguir se conectar corretamente à
mongod
instância, você poderá receber esses erros "Permissão negada".Verifique se o seu cliente abre uma conexão verificando a porta de conexão, mas também se a porta em que você está usando
mongod
não está em uso. Você pode definir uma porta diferente usando o--port <port>
parâmetro no shell e no processo.fonte
Eu tive esse problema porque o nome do host no meu MongoDB Compass estava apontando para o administrador do meu projeto. Corrigido adicionando o / projectname após o hostname :) Tente o seguinte:
Use a mesma cadeia de conexão no seu código também:
Boa sorte.
fonte
fonte
Concordou que você deve se autenticar no admin db e precisa de pelo menos uma função com privilégios corretos, o que evitaria a 'exceção de host local' do DB (isto é para o local hospedado no mongoDB), embora você tenha tudo no lugar e ainda recebendo exceções não autorizadas em quase todos os comandos, enquanto acessa o mongoDB que foi criado usando o Mongo Atlas , então aqui é o lugar onde você pode saber o motivo, por que:
/dba/219003/not-authorized-on-admin-to-execute-command-mongodb-atlas-m0-free-tier-cluster?newreg=471a9a26108243d78d4ca74a87e7a115
e verifique também se você já hospedou o mongoDB no mongo Atlas :
https://docs.atlas.mongodb.com/unsupported-commands/
fonte
fonte
Segui estas etapas no Centos 7 para o MongoDB 4.2. (Usuário remoto)
Atualizar arquivo mongod.conf
Inicie o demon de serviço do MongoDB
Shell MongoDB aberto
Execute este comando no shell
Usuário raiz remoto foi criado. Agora você pode testar essa conexão com o banco de dados usando qualquer ferramenta MongoDB GUI da sua máquina dev. Like Robo 3T
fonte
Isso pode ocorrer porque você não definiu noAuth = true no mongodb.conf
Após definir isso, reinicie o serviço usando
reinicialização do mongod de serviço
fonte