Mongo Erstellen Sie einen Benutzer als Administrator für eine Datenbank, die einen Fehler auslöst


17

Ich versuche, einen einfachen Benutzer mit der Berechtigung zum Zugriff auf eine Datenbank zu erstellen, der alle Aktionen ausführen kann. Beim Versuch, den createUserBefehl auszuführen, ist folgender Fehler aufgetreten:

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

Das obige Problem tritt nur auf, wenn ich die Authentifizierungskonfiguration aktiviere und diese benötige.

Wie erstelle ich einen Benutzer mit Administratorrechten für eine Datenbank? Ich möchte es, weil ich meine Mongo-Dienste so konfiguriert habe, dass sie eine Authentifizierungsverbindung verwenden. Wenn ich einen Dump meiner Daten ausführen möchte, muss ich diese Authentifizierungsparameter verwenden.

Bitte irgendeine Hilfe?

Verwenden von Mongo Version 3.0.5 .

Der Dienst läuft unter Amazon Linux AMI 2015.03 (HVM), SSD-Volume-Typ - ami-1ecae776

Antworten:


22

Die Rollen "... AnyDatabase" sollten der Admin-Datenbank für den Benutzer hinzugefügt werden:

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

Beliebige Datenbank:

  • Datenbankbenutzerrollen
  • Rollen der Datenbankadministration

Admin-Datenbank:

  • Cluster-Verwaltungsrollen
  • Sicherungs- und Wiederherstellungsrollen
  • Alle Datenbankrollen

Extra: So weisen Sie verschiedenen Datenbanken und Administratoren unterschiedliche Rollen zu:

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

1
Ich erstelle den mongoadmin-Benutzer in der Admin-Datenbank, aber wenn ich versuche, eine Aktion in einer anderen Datenbank auszuführen, erhalte ich einen Autorisierungsfehler.
Robert

Welche Aktionen haben Sie versucht? Werfen Sie einen Blick auf: docs.mongodb.org/manual/reference/built-in-roles
aldwinaldwin

0

Gemäß MongoDB BOL Aktivieren Auth Mit Zugriffskontrolle aktiviert ist , sicherzustellen , dass Sie einen Benutzer mit haben Useradmin oder userAdminAnyDatabase Rolle in der Admin - Datenbank. Dieser Benutzer kann Benutzer und Rollen verwalten, z. B .: Benutzer erstellen, Rollen von Benutzern erteilen oder widerrufen sowie Zollrollen erstellen oder ändern.

Sie können Benutzer erstellen, bevor oder nachdem Sie die Zugriffssteuerung aktiviert haben. Wenn Sie die Zugriffssteuerung aktivieren, bevor Sie einen Benutzer erstellen , stellt MongoDB eine localhost-Ausnahme bereit , mit der Sie einen Benutzeradministrator in der Admin-Datenbank erstellen können. Nach dem Erstellen müssen Sie sich als Benutzeradministrator authentifizieren, um nach Bedarf weitere Benutzer zu erstellen.

Verfahren

Hier ist das folgende Verfahren, mit dem Sie können Enable Auth. Fügt einer MongoDB-Instanz, die ohne Zugriffssteuerung ausgeführt wird, zunächst einen Benutzeradministrator hinzu und aktiviert dann die Zugriffssteuerung.

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)

Stellen Sie eine Verbindung zur Instanz her

Verbinden Sie beispielsweise eine mongoShell mit der Instanz.

mongo --port 27017

Geben Sie gegebenenfalls zusätzliche Befehlszeilenoptionen an, um die mongoShell mit Ihrer Bereitstellung zu verbinden , z --host.

Erstellen Sie den Benutzeradministrator

Fügen Sie hier in der Admin-Datenbank beispielsweise einen Benutzer mit der userAdminAnyDatabaseRolle hinzu. Folgendes erstellt beispielsweise den Benutzer myUserAdminin der Admin-Datenbank :

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

HINWEIS: Die Datenbank, in der Sie den Benutzer erstellen (in diesem Beispiel admin), ist die Authentifizierungsdatenbank des Benutzers. Obwohl sich der Benutzer bei dieser Datenbank authentifizieren würde, kann er Rollen in anderen Datenbanken haben. dh die Authentifizierungsdatenbank des Benutzers schränkt die Berechtigungen des Benutzers nicht ein.

Trennen Sie die mongoShell.

Starten Sie die MongoDB-Instanz mit Zugriffskontrolle neu

Starten Sie die mongodInstanz mit der Befehlszeilenoption --auth oder bei Verwendung einer Konfigurationsdatei mit der Einstellung security.authorization neu .

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

Clients, die eine Verbindung zu dieser Instanz herstellen, müssen sich jetzt als MongoDBBenutzer authentifizieren . Clients können nur Aktionen ausführen, die von ihren zugewiesenen Rollen bestimmt werden.

Stellen Sie eine Verbindung her und authentifizieren Sie sich als Benutzeradministrator

Mit der mongoShell können Sie:

  • Stellen Sie eine Verbindung zur Authentifizierung her, indem Sie Benutzeranmeldeinformationen eingeben, oder

  • Stellen Sie zuerst eine Verbindung ohne Authentifizierung her, und geben Sie dann die Methode db.auth () zur Authentifizierung aus.

So authentifizieren Sie sich während der Verbindung Starten Sie eine mongoShell mit den -u <username>, -p <password>, and the --authenticationDatabase <database>Befehlszeilenoptionen:

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.

Nach dem Verbinden authentifizieren

Verbinden Sie die mongoShell mit mongod:

mongo --port 27017

Wechseln Sie zur Authentifizierungsdatenbank (in diesem Fall admin) und verwenden Sie die Methode db.auth (,) , um Folgendes zu authentifizieren:

> use admin
switched to db admin
> db.auth("mongoadmin","mongoadmin")
1
>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.