Mongo Créer un utilisateur en tant qu'administrateur pour toute base de données génère une erreur


17

J'essaie de créer un utilisateur simple avec les droits d'accès à n'importe quelle base de données et je peux effectuer n'importe quelle action. Lorsque j'essaie d'exécuter la createUsercommande, j'ai eu cette erreur:

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

Le problème ci-dessus ne se produit que lorsque j'active la configuration d'authentification et que j'en ai besoin.

Alors, comment puis-je créer un utilisateur avec l'autorisation d'administrateur pour n'importe quelle base de données. Je le veux car j'ai configuré mes services mongo pour utiliser la connexion d'authentification. Si je veux exécuter un vidage de mes données, je dois utiliser ces paramètres d'authentification.

S'il vous plaît une aide?

Utilisation de mongo version 3.0.5 .

le service est sur Amazon Linux AMI 2015.03 (HVM), type de volume SSD - ami-1ecae776

Réponses:


22

Les rôles '... AnyDatabase' doivent être ajoutés à la base de données d'administration pour l'utilisateur:

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

Toute base de données:

  • Rôles d'utilisateur de base de données
  • Rôles d'administration de base de données

Base de données d'administration:

  • Rôles d'administration de cluster
  • Rôles de sauvegarde et de restauration
  • Rôles toutes bases de données

Extra: pour attribuer différents rôles sur différentes bases de données et administrateurs:

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

1
Je crée l'utilisateur mongoadmin sur la base de données d'administration, mais lorsque j'essaie de faire une action dans une autre base de données, j'obtiens une erreur d'autorisation.
Robert

Quelles actions avez-vous essayées? Jetez un œil à: docs.mongodb.org/manual/reference/built-in-roles
aldwinaldwin

0

Conformément à MongoDB BOL Activer l'authentification avec le contrôle d'accès activé, assurez-vous que vous disposez d'un utilisateur avec le rôle userAdmin ou userAdminAnyDatabase dans la base de données d'administration. Cet utilisateur peut administrer des utilisateurs et des rôles tels que: créer des utilisateurs, accorder ou révoquer des rôles aux utilisateurs et créer ou modifier des rôles douaniers.

Vous pouvez créer des utilisateurs avant ou après avoir activé le contrôle d'accès. Si vous activez le contrôle d'accès avant de créer un utilisateur, MongoDB fournit une exception localhost qui vous permet de créer un administrateur utilisateur dans la base de données admin. Une fois créé, vous devez vous authentifier en tant qu'administrateur d'utilisateurs pour créer des utilisateurs supplémentaires selon vos besoins.

Procédure

Voici la procédure suivante à travers laquelle vous pouvez Enable Auth. Ajoute d'abord un administrateur utilisateur à une instance MongoDB exécutée sans contrôle d'accès, puis active le contrôle d'accès.

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)

Se connecter à l'instance

Par exemple, connectez un mongoshell à l'instance.

mongo --port 27017

Spécifiez des options de ligne de commande supplémentaires appropriées pour connecter le mongoshell à votre déploiement, telles que --host.

Créer l'administrateur utilisateur

Par exemple ici dans la base de données d'administration, ajoutez un utilisateur avec le userAdminAnyDatabaserôle. Par exemple, ce qui suit crée l'utilisateur myUserAdmindans la base de données d'administration :

> 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"
                }
        ]
}

REMARQUE: la base de données dans laquelle vous créez l'utilisateur (dans cet exemple, admin) est la base de données d'authentification de l'utilisateur. Bien que l'utilisateur s'authentifie auprès de cette base de données, l'utilisateur peut avoir des rôles dans d'autres bases de données; c'est-à-dire que la base de données d'authentification de l'utilisateur ne limite pas les privilèges de l'utilisateur.

Déconnectez la mongocoque.

Redémarrez l'instance MongoDB avec le contrôle d'accès

Redémarrez l' mongodinstance avec l'option de ligne de commande --auth ou, si vous utilisez un fichier de configuration, le paramètre security.authorization .

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

Les clients qui se connectent à cette instance doivent désormais s'authentifier en tant MongoDBqu'utilisateur. Les clients ne peuvent effectuer que des actions déterminées par les rôles qui leur sont attribués.

Connectez-vous et authentifiez-vous en tant qu'administrateur utilisateur

En utilisant le mongoshell, vous pouvez:

  • Connectez-vous avec l'authentification en transmettant les informations d'identification de l'utilisateur, ou

  • Connectez-vous d'abord sans authentification, puis lancez la méthode db.auth () pour vous authentifier.

Pour s'authentifier pendant la connexion Démarrez un mongoshell avec les -u <username>, -p <password>, and the --authenticationDatabase <database>options de ligne de commande:

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.

Pour s'authentifier après la connexion

Connectez la mongocoque au mongod:

mongo --port 27017

Basculez vers la base de données d'authentification (dans ce cas, admin) et utilisez la méthode db.auth (,) pour vous authentifier:

> use admin
switched to db admin
> db.auth("mongoadmin","mongoadmin")
1
>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.