Mongo Utwórz użytkownika jako administrator dla dowolnej bazy danych zgłaszającej błąd

17

Próbuję utworzyć prostego użytkownika z uprawnieniami do dostępu do dowolnej bazy danych i mogę wykonywać dowolne czynności. Kiedy próbuję wykonać createUserpolecenie, otrzymałem ten błąd:

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

Powyższy problem występuje tylko wtedy, gdy włączę konfigurację uwierzytelniania i jej potrzebuję.

Jak więc utworzyć użytkownika z uprawnieniami administratora do dowolnej bazy danych. Chcę tego, ponieważ skonfigurowałem moje usługi mongo do korzystania z połączenia uwierzytelniającego. Jeśli chcę wykonać zrzut moich danych, muszę użyć tych parametrów uwierzytelniania.

Proszę o pomoc?

Korzystanie z wersji mongo 3.0.5 .

usługa jest dostępna na Amazon Linux AMI 2015.03 (HVM), typ woluminu SSD - ami-1ecae776

Robert
źródło

Odpowiedzi:

22

Role „AnyDatabase” należy dodać do administracyjnej bazy danych dla użytkownika:

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

Dowolna baza danych:

  • Role użytkownika bazy danych
  • Role administracji bazy danych

Baza danych administratora:

  • Role administracji klastra
  • Role tworzenia kopii zapasowych i przywracania
  • Role dla wszystkich baz danych

Dodatkowo: Aby nadać różne role różnej bazie danych i administratorowi:

db.createUser({user:"replSetManager",pwd:"password",roles:[{role:"clusterManager",db:"admin"},{role:"dbOwner", db:"adminsblog"},{role:"readWrite", db:"departmentblog"},{role:"read", db:"otherblog"}]})
aldwinaldwin
źródło
1
Tworzę użytkownika mongoadmin w administracyjnej bazie danych, ale kiedy próbuję wykonać jakąkolwiek akcję w innej bazie danych, pojawia się błąd autoryzacji.
Robert,
Jakie działania próbowałeś? Spójrz na: docs.mongodb.org/manual/reference/built-in-roles
aldwinaldwin
0

Zgodnie z MongoDB BOL Włącz uwierzytelnianie Przy włączonej kontroli dostępu upewnij się, że masz użytkownika z rolą userAdmin lub userAdminAnyDatabase w bazie danych administratora. Ten użytkownik może administrować użytkownikami i rolami, takimi jak: tworzenie użytkowników, przyznawanie lub odwoływanie ról od użytkowników oraz tworzenie lub modyfikowanie ról celnych.

Możesz tworzyć użytkowników przed włączeniem kontroli dostępu lub po nim. Jeśli włączysz kontrolę dostępu przed utworzeniem dowolnego użytkownika, MongoDB zapewnia wyjątek localhost, który umożliwia utworzenie administratora użytkownika w bazie danych administratora. Po utworzeniu należy uwierzytelnić się jako administrator użytkownika, aby w razie potrzeby utworzyć dodatkowych użytkowników.

Procedura

Oto następująca procedura, dzięki której możesz Enable Auth. Najpierw dodaje administratora użytkownika do instancji MongoDB działającej bez kontroli dostępu, a następnie włącza kontrolę dostępu.

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)

Połącz z instancją

Na przykład podłącz mongopowłokę do instancji.

mongo --port 27017

Podaj dodatkowe opcje wiersza polecenia, aby połączyć mongopowłokę z wdrożeniem, takie jak --host.

Utwórz administratora użytkownika

Na przykład tutaj w bazie danych administratora dodaj użytkownika z userAdminAnyDatabaserolą. Na przykład następujące tworzy użytkownika myUserAdminw bazie danych administratora :

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

UWAGA: Baza danych, w której tworzysz użytkownika (w tym przykładzie admin) jest bazą danych uwierzytelniania użytkownika. Chociaż użytkownik uwierzytelniałby się w tej bazie danych, może on pełnić role w innych bazach danych; tzn. baza danych uwierzytelniania użytkownika nie ogranicza uprawnień użytkownika.

Odłącz mongopowłokę.

Uruchom ponownie instancję MongoDB z kontrolą dostępu

Uruchom ponownie mongodinstancję za pomocą opcji --auth wiersza polecenia lub, jeśli używasz pliku konfiguracyjnego, ustawienia security.authorization .

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

Klienci łączący się z tym wystąpieniem muszą teraz uwierzytelnić się jako MongoDBużytkownik. Klienci mogą wykonywać tylko czynności określone przez przypisane im role.

Połącz się i uwierzytelnij jako administrator użytkownika

Za pomocą mongopowłoki możesz:

  • Połącz się z uwierzytelnianiem, przekazując poświadczenia użytkownika lub

  • Połącz najpierw bez uwierzytelniania, a następnie wydaj metodę db.auth () w celu uwierzytelnienia.

Aby uwierzytelnić podczas połączenia Uruchom mongopowłokę z -u <username>, -p <password>, and the --authenticationDatabase <database>opcjami wiersza poleceń:

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.

Aby uwierzytelnić po połączeniu

Połącz mongopowłokę z mongod:

mongo --port 27017

Przejdź do bazy danych uwierzytelniania (w tym przypadku admin) i użyj metody db.auth (,) do uwierzytelnienia:

> use admin
switched to db admin
> db.auth("mongoadmin","mongoadmin")
1
>
Md Haidar Ali Khan
źródło