Mongodb

Mongo為任何數據庫創建一個使用者作為管理員引發錯誤

  • November 23, 2021

我正在嘗試創建一個具有訪問任何數據庫的權限並可以執行任何操作的簡單使用者。當我嘗試執行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

僅當我啟用身份驗證配置並且我需要它時,才會出現上述問題。

那麼,如何為任何數據庫創建具有管理員權限的使用者。我想要它,因為我將我的 mongo 服務配置為使用身份驗證連接。如果我想執行我的數據轉儲,我必須使用此身份驗證參數。

請問有什麼幫助嗎?

使用mongo 版本 3.0.5

該服務在Amazon Linux AMI 2015.03 (HVM) 上,SSD 卷類型 - ami -1ecae776

‘…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"}]})

根據MongoDB BOL Enable Auth啟用訪問控制,確保您在 admin 數據庫中有一個具有userAdminuserAdminAnyDatabase角色的使用者。該使用者可以管理使用者和角色,例如:創建使用者、授予或撤銷使用者角色以及創建或修改自定義角色。

您可以在啟用訪問控制之前或之後創建使用者。如果您在創建任何使用者之前啟用訪問控制,MongoDB 會提供一個localhost 異常,允許您在 admin 數據庫中創建使用者管理員。創建後,您必須以使用者管理員身份進行身份驗證才能根據需要創建其他使用者。

程序

以下是您可以通過以下程序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

根據需要指定其他命令行選項以將mongoshell 連接到您的部署,例如--host.

創建使用者管理員

例如,在 admin 數據庫中,添加一個具有該userAdminAnyDatabase角色的使用者。例如,以下myUserAdminadmin 數據庫中創建使用者:

> 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 實例

使用 –auth 命令行選項重新啟動mongod實例,或者,如果使用配置文件,則使用security.authorization 設置

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

連接到此實例的客戶端現在必須以MongoDB使用者身份驗證自己。客戶只能執行由其分配的角色確定的操作。

以使用者管理員身份連接和驗證

使用mongo外殼,您可以:

  • 通過傳入使用者憑據連接身份驗證,或
  • 首先連接沒有身份驗證,然後發出 db.auth()方法進行身份驗證。

在連接期間進行身份驗證使用命令行選項啟動mongoshell :-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
>

引用自:https://dba.stackexchange.com/questions/111727