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 commande createUser
, 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 de l'aide?
Utilisation de mongo version 3.0.5.
le service est activé Amazon Linux AMI 2015.03 (HVM), Type de volume SSD - AMI-1ecae776
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:
Base de données d'administration:
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"}]})
Selon MongoDB BOL
Activer l'authentification Lorsque le contrôle d'accès est activé, assurez-vous que vous disposez d'un utilisateur avec le rôle serAdmin ou serAdminAnyDatabase 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 un exception localhost qui vous permet de créer un administrateur utilisateur dans la base de données d'administration. 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)
Connectez-vous à l'instance
Par exemple, connectez un shell mongo
à l'instance.
mongo --port 27017
Spécifiez des options de ligne de commande supplémentaires appropriées pour connecter le shell mongo
à votre déploiement, telles que --Host
.
Créez l'administrateur utilisateur
Par exemple ici dans la base de données admin, ajoutez un utilisateur avec le rôle userAdminAnyDatabase
. Par exemple, ce qui suit crée l'utilisateur myUserAdmin
dans 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 le shell mongo
.
Redémarrez l'instance MongoDB avec contrôle d'accès
Redémarrez l'instance mongod
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 qu'utilisateur MongoDB
. 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 shell mongo
, 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 mongo
Shell avec le -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 le shell mongo
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
>