Mongo Crie um usuário como administrador para qualquer banco de dados gera um erro

17

Estou tentando criar um usuário simples com permissão de direitos para acessar qualquer banco de dados e pode executar qualquer ação. Ao tentar executar o createUsercomando, recebi este erro:

db.createUser({ user: "mongoadmin" , pwd: "mongoadmin", roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]})
2015-08-20T17:09:42.300+0000 E QUERY    Error: couldn't add user: No role named userAdminAnyDatabase@new_vehicles_catalog

O problema acima só acontece quando eu ativo a configuração de autenticação e preciso dela.

Então, como faço para criar um usuário com permissão de administrador para qualquer banco de dados. Eu o quero porque configurei meus serviços mongo para usar conexão de autenticação. Se eu quiser executar um despejo dos meus dados, tenho que usar esses parâmetros de autenticação.

Por favor, ajuda?

Usando o mongo versão 3.0.5 .

o serviço está no Amazon Linux AMI 2015.03 (HVM), tipo de volume SSD - ami-1ecae776

Robert
fonte

Respostas:

22

As funções '... AnyDatabase' devem ser adicionadas ao banco de dados do administrador para o usuário:

use admin
db.createUser({ user: "mongoadmin" , pwd: "mongoadmin", roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]})

Qualquer banco de dados:

  • Funções de usuário do banco de dados
  • Funções de administração de banco de dados

Banco de dados do administrador:

  • Funções de administração de cluster
  • Funções de backup e restauração
  • Funções de todos os bancos de dados

Extra: para atribuir diferentes funções em diferentes bancos de dados e administradores:

db.createUser({user:"replSetManager",pwd:"password",roles:[{role:"clusterManager",db:"admin"},{role:"dbOwner", db:"adminsblog"},{role:"readWrite", db:"departmentblog"},{role:"read", db:"otherblog"}]})
aldwinaldwin
fonte
1
Eu crio o usuário mongoadmin no banco de dados do administrador, mas quando tento executar qualquer ação em outro banco de dados, recebo um erro de autorização.
Robert
Que ações você tentou? Dê uma olhada em: docs.mongodb.org/manual/reference/built-in-roles
aldwinaldwin
0

Conforme MongoDB BOL Ativar autenticação Com o controle de acesso ativado, verifique se você tem um usuário com a função userAdmin ou userAdminAnyDatabase no banco de dados do administrador. Esse usuário pode administrar usuário e funções como: criar usuários, conceder ou revogar funções dos usuários e criar ou modificar funções alfandegárias.

Você pode criar usuários antes ou depois de ativar o controle de acesso. Se você habilitar o controle de acesso antes de criar qualquer usuário, o MongoDB fornecerá uma exceção localhost que permite criar um administrador de usuários no banco de dados do administrador. Depois de criado, você deve se autenticar como administrador do usuário para criar usuários adicionais conforme necessário.

Procedimento

Aqui está o seguinte procedimento através do qual você pode Enable Auth. Primeiro, adicione um administrador de usuário a uma instância do MongoDB em execução sem controle de acesso e, em seguida, habilite o controle de acesso.

mongod --port 27017 --dbpath /data/db1

C:\Program Files\MongoDB\Server\3.6\bin>mongod --auth --port 27017 --dbpath /data/db1
2018-01-02T00:04:21.038-0700 I CONTROL  [initandlisten] MongoDB starting : pid=8048 port=27017 dbpath=/data/db1 64-bit host=ACSD140013
2018-01-02T00:04:21.038-0700 I CONTROL  [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] db version v3.6.0
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] git version: a57d8e71e6998a2d0afde7edc11bd23e5661c915
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1u-fips  22 Sep 2016
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] allocator: tcmalloc
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] modules: none
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] build environment:
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten]     distmod: 2008plus-ssl
2018-01-02T00:04:21.040-0700 I CONTROL  [initandlisten]     distarch: x86_64
2018-01-02T00:04:21.040-0700 I CONTROL  [initandlisten]     target_arch: x86_64
2018-01-02T00:04:21.040-0700 I CONTROL  [initandlisten] options: { net: { port: 27017 }, security: { authorization: "enabled" }, storage: { dbPath: "/data/db1" } }
2018-01-02T00:04:21.044-0700 I -        [initandlisten] Detected data files in /data/db1 created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2018-01-02T00:04:21.044-0700 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=1508M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
2018-01-02T00:04:21.557-0700 I STORAGE  [initandlisten] WiredTiger message [1514876661:556397][8048:140720576475904], txn-recover: Main recovery loop: starting at 1/35584
2018-01-02T00:04:21.677-0700 I STORAGE  [initandlisten] WiredTiger message [1514876661:676479][8048:140720576475904], txn-recover: Recovering log 1 through 2
2018-01-02T00:04:21.792-0700 I STORAGE  [initandlisten] WiredTiger message [1514876661:792524][8048:140720576475904], txn-recover: Recovering log 2 through 2
2018-01-02T00:04:23.008-0700 I CONTROL  [initandlisten]
2018-01-02T00:04:23.008-0700 I CONTROL  [initandlisten] ** WARNING: This server is bound to localhost.
2018-01-02T00:04:23.009-0700 I CONTROL  [initandlisten] **          Remote systems will be unable to connect to this server.
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          Start the server with --bind_ip <address> to specify which IP
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          addresses it should serve responses from, or with --bind_ip_all to
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          bind to all interfaces. If this behavior is desired, start the
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          server with --bind_ip 127.0.0.1 to disable this warning.
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten]
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten]
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten] ** WARNING: The file system cache of this machine is configured to be greater than 40% of the total memory. This can lead to increased memory pressure and poor performance.
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten] See http://dochub.mongodb.org/core/wt-windows-system-file-cache
2018-01-02T00:04:23.012-0700 I CONTROL  [initandlisten]
2018-01-02T10:04:23.320+0300 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db1/diagnostic.data'
2018-01-02T10:04:23.322+0300 I NETWORK  [initandlisten] waiting for connections on port 27017
2018-01-02T10:05:09.214+0300 I NETWORK  [listener] connection accepted from 127.0.0.1:64482 #1 (1 connection now open)

Conecte-se à instância

Por exemplo, conecte um mongoshell à instância.

mongo --port 27017

Especifique opções adicionais da linha de comando, conforme apropriado, para conectar o mongoshell à sua implantação, como --host.

Crie o administrador do usuário

Por exemplo, aqui no banco de dados do administrador, adicione um usuário com a userAdminAnyDatabasefunção Por exemplo, o seguinte cria o usuário myUserAdminno banco de dados do administrador :

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

NOTA: O banco de dados em que você cria o usuário (neste exemplo, admin) é o banco de dados de autenticação do usuário. Embora o usuário se autentique neste banco de dados, ele pode ter funções em outros bancos de dados; ou seja, o banco de dados de autenticação do usuário não limita os privilégios do usuário.

Desconecte o mongoshell.

Reinicie a instância do MongoDB com controle de acesso

mongodReinicie a instância com a opção de linha de comando --auth ou, se estiver usando um arquivo de configuração, a configuração security.authorization .

mongod --auth --port 27017 --dbpath /data/db1

Os clientes que se conectam a esta instância agora devem se autenticar como MongoDBusuário. Os clientes podem executar apenas ações conforme determinado pelas funções atribuídas.

Conecte e autentique como administrador do usuário

Usando o mongoshell, você pode:

  • Conecte-se à autenticação transmitindo credenciais do usuário ou

  • Conecte-se primeiro sem autenticação e, em seguida, emita o método db.auth () para autenticar.

Para autenticar durante a conexão Inicie um mongoshell com as -u <username>, -p <password>, and the --authenticationDatabase <database>opções de linha de comando:

C:\Program Files\MongoDB\Server\3.6\bin>mongo --port 27017 -u "mongoadmin" -p "mongoadmin" --authenticationDatabase "admin"
MongoDB shell version v3.6.0
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 3.6.0
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
2018-01-02T10:05:09.248+0300 I STORAGE  [main] In File::open(), CreateFileW for 'H:\\.mongorc.js' failed with Access is denied.

Para autenticar após conectar

Conecte o mongoshell ao mongod:

mongo --port 27017

Alterne para o banco de dados de autenticação (neste caso, admin) e use o método db.auth (,) para autenticar:

> use admin
switched to db admin
> db.auth("mongoadmin","mongoadmin")
1
>
Md Haidar Ali Khan
fonte