Mongo Создание пользователя с правами администратора для любой базы данных вызывает ошибку

17

Я пытаюсь создать простого пользователя с правами доступа к любой базе данных и могу выполнять любые действия. Когда я пытался выполнить createUserкоманду, я получил эту ошибку:

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

Проблема выше возникает только тогда, когда я включаю конфигурацию аутентификации, и мне это нужно.

Итак, как мне создать пользователя с правами администратора для любой базы данных. Я хочу, потому что я настроил свои сервисы Монго на использование аутентификационного соединения. Если я хочу выполнить дамп своих данных, я должен использовать эти параметры аутентификации.

Пожалуйста, помогите?

Использование Монго версии 3.0.5 .

служба работает на Amazon Linux AMI 2015.03 (HVM), тип тома SSD - ami-1ecae776

Роберт
источник

Ответы:

22

Роли '... AnyDatabase' должны быть добавлены в базу данных администратора для пользователя:

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

Любая база данных:

  • Роли пользователя базы данных
  • Роли администрирования базы данных

База данных администратора:

  • Роли управления кластером
  • Роли резервного копирования и восстановления
  • Роли всех баз данных

Дополнительно: чтобы назначить разные роли для разных баз данных и администраторов:

db.createUser({user:"replSetManager",pwd:"password",roles:[{role:"clusterManager",db:"admin"},{role:"dbOwner", db:"adminsblog"},{role:"readWrite", db:"departmentblog"},{role:"read", db:"otherblog"}]})
aldwinaldwin
источник
1
Я создаю пользователя mongoadmin в базе данных администратора, но при попытке выполнить какое-либо действие в другой базе данных я получаю ошибку авторизации.
Роберт
Какие действия вы пробовали? Посмотрите: docs.mongodb.org/manual/reference/built-in-roles
aldwinaldwin
0

Согласно MongoDB BOL Enable Auth При включенном управлении доступом убедитесь, что у вас есть пользователь с ролью userAdmin или userAdminAnyDatabase в базе данных администратора. Этот пользователь может администрировать пользователя и роли, такие как: создавать пользователей, предоставлять или отзывать роли у пользователей, а также создавать или изменять таможенные роли.

Вы можете создавать пользователей до или после включения контроля доступа. Если вы включите контроль доступа перед созданием любого пользователя, MongoDB предоставит исключение localhost, которое позволяет вам создать администратора пользователя в базе данных администратора. После создания необходимо авторизоваться как администратор пользователя, чтобы при необходимости создать дополнительных пользователей.

Процедура

Вот следующая процедура, с помощью которой вы можете Enable Auth. Сначала добавляется администратор пользователя к экземпляру MongoDB, работающему без контроля доступа, а затем включает контроль доступа.

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)

Подключиться к экземпляру

Например, подключите mongoоболочку к экземпляру.

mongo --port 27017

Укажите дополнительные параметры командной строки для подключения mongoоболочки к вашему развертыванию, например --host.

Создать администратора пользователя

Например, здесь, в базе данных администратора, добавьте пользователя с userAdminAnyDatabaseролью. Например, следующее создает пользователя myUserAdminв базе данных администратора :

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

ПРИМЕЧАНИЕ. База данных, в которой вы создаете пользователя (в данном примере - admin), является базой данных аутентификации пользователя. Хотя пользователь будет проходить аутентификацию в этой базе данных, он может иметь роли в других базах данных; т.е. база данных аутентификации пользователя не ограничивает привилегии пользователя.

Отключить mongoоболочку.

Перезапустите экземпляр MongoDB с контролем доступа

Перезапустите mongodэкземпляр с параметром командной строки --auth или, если используется файл конфигурации, с параметром security.authorization .

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

Клиенты, которые подключаются к этому экземпляру, теперь должны аутентифицировать себя как MongoDBпользователя. Клиенты могут выполнять действия только в соответствии с назначенными им ролями.

Подключитесь и авторизуйтесь как администратор пользователя

Используя mongoоболочку, вы можете:

  • Соединитесь с аутентификацией, передавая учетные данные пользователя, или

  • Сначала подключитесь без аутентификации, а затем выполните метод db.auth () для аутентификации.

Для проверки подлинности во время подключения Запустите mongoоболочку с параметрами -u <username>, -p <password>, and the --authenticationDatabase <database>командной строки:

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.

Аутентифицировать после подключения

Подключите mongoоболочку к mongod:

mongo --port 27017

Переключитесь на базу данных аутентификации (в данном случае admin) и используйте метод db.auth (,) для аутентификации:

> use admin
switched to db admin
> db.auth("mongoadmin","mongoadmin")
1
>
Г-н Хайдар Али Хан
источник