Mongo Creare un utente come amministratore per qualsiasi database genera un errore


17

Sto cercando di creare un utente semplice con l'autorizzazione dei diritti per accedere a qualsiasi database e posso fare qualsiasi azione. Quando provo ad eseguire il createUsercomando ho ricevuto questo errore:

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

Il problema sopra riportato si verifica solo quando abilito la configurazione di autenticazione e ne ho bisogno.

Quindi, come faccio a creare un utente con autorizzazione di amministratore per qualsiasi database. Lo voglio perché ho configurato i miei servizi mongo per utilizzare la connessione di autenticazione. Se voglio eseguire un dump dei miei dati devo usare questi parametri di autenticazione.

Per favore, qualche aiuto?

Utilizzando mongo versione 3.0.5 .

il servizio è su Amazon Linux AMI 2015.03 (HVM), Tipo di volume SSD - ami-1ecae776

Risposte:


22

I ruoli "... AnyDatabase" devono essere aggiunti al database di amministrazione per l'utente:

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

Qualsiasi database:

  • Ruoli utente del database
  • Ruoli di amministrazione del database

Database di amministrazione:

  • Ruoli di amministrazione del cluster
  • Ruoli di backup e ripristino
  • Ruoli per tutti i database

Extra: per assegnare ruoli diversi su database e amministratori diversi:

db.createUser({user:"replSetManager",pwd:"password",roles:[{role:"clusterManager",db:"admin"},{role:"dbOwner", db:"adminsblog"},{role:"readWrite", db:"departmentblog"},{role:"read", db:"otherblog"}]})

1
Creo l'utente mongoadmin sul database di amministrazione, ma quando provo a fare qualsiasi azione in un altro database ricevo un errore di autorizzazione.
Robert,

Quali azioni hai provato? Dai
aldwinaldwin

0

Come da MongoDB BOL Abilita autenticazione Con controllo accessi abilitato, assicurarsi di disporre di un utente con userAdmin o userAdminAnyDatabase ruolo nel database di amministrazione. Questo utente può amministrare utenti e ruoli come: creare utenti, concedere o revocare ruoli dagli utenti e creare o modificare ruoli doganali.

È possibile creare utenti prima o dopo aver abilitato il controllo dell'accesso. Se si abilita il controllo dell'accesso prima di creare qualsiasi utente, MongoDB fornisce un'eccezione localhost che consente di creare un amministratore utente nel database di amministrazione. Una volta creato, è necessario autenticarsi come amministratore utente per creare altri utenti secondo necessità.

Procedura

Ecco la seguente procedura attraverso la quale è possibile Enable Auth. Innanzitutto aggiunge un amministratore utente a un'istanza MongoDB in esecuzione senza controllo dell'accesso e quindi abilita il controllo dell'accesso.

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)

Connetti all'istanza

Ad esempio, collegare una mongoshell all'istanza.

mongo --port 27017

Specificare le opzioni aggiuntive della riga di comando appropriate per connettere la mongoshell alla propria distribuzione, ad esempio --host.

Crea l'amministratore utente

Ad esempio qui nel database di amministrazione, aggiungere un utente con il userAdminAnyDatabaseruolo. Ad esempio, quanto segue crea l'utente myUserAdminnel database di amministrazione :

> 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: il database in cui si crea l'utente (in questo esempio, admin) è il database di autenticazione dell'utente. Sebbene l'utente esegua l'autenticazione in questo database, l'utente può avere ruoli in altri database; cioè il database di autenticazione dell'utente non limita i privilegi dell'utente.

Scollegare la mongoshell.

Riavvia l'istanza MongoDB con controllo degli accessi

Riavviare l' mongodistanza con l'opzione della riga di comando --auth o, se si utilizza un file di configurazione, l' impostazione security.authorization .

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

I client che si connettono a questa istanza devono ora autenticarsi come MongoDButente. I clienti possono eseguire azioni solo in base ai ruoli assegnati.

Connetti e autentica come amministratore utente

Usando la mongoshell, puoi:

  • Connettiti con l'autenticazione passando le credenziali dell'utente o

  • Connettiti prima senza autenticazione, quindi emetti il metodo db.auth () per l'autenticazione.

Per autenticarsi durante la connessione Avviare una mongoshell con le -u <username>, -p <password>, and the --authenticationDatabase <database>opzioni della riga di 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.

Autenticare dopo la connessione

Collega la mongoshell a mongod:

mongo --port 27017

Passare al database di autenticazione (in questo caso, admin) e utilizzare il metodo db.auth (,) per autenticare:

> use admin
switched to db admin
> db.auth("mongoadmin","mongoadmin")
1
>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.