MongoDB新增使用者


MongoDB採用基於角色的存取控制(RBAC)來確定使用者的存取。 授予使用者一個或多個角色,確定使用者對MongoDB資源的存取許可權和使用者可以執行哪些操作。 使用者應該只有最小許可權集才能確保最小許可權的系統。

MongoDB系統的每個應用程式和使用者都應該對映到不同的使用者。 這種存取隔離便於存取復原和持續的使用者維護。

前提條件

如果啟用了部署的存取控制,則可以使用localhost異常來建立系統中的第一個使用者。 此第一個使用者必須具有建立其他使用者的許可權。 對於MongoDB 3.0,使用localhost異常只能在admin資料庫上建立使用者。 建立第一個使用者後,必須使用該使用者進行身份驗證以新增後續使用者。 啟用Auth提供有關在啟用部署存取控制時新增使用者的更多詳細資訊。

對於常規使用者建立,必須擁有以下許可權:

  • 要在資料庫中建立新使用者,必須在該資料庫資源上具有createUser操作。
  • 要向使用者授予角色,必須對角色的資料庫執行grantRole操作。

userAdminuserAdminAnyDatabase內建角色在其各自的資源上提供createUsergrantRole操作。

例子

要在MongoDB部署中建立使用者,請連線到部署,然後使用db.createUser()方法或createUser命令新增使用者。

MongoDB是一個nosql資料庫伺服器。 預設安裝提供使用mongo命令通過命令列存取資料庫而不進行身份驗證。下面我們來學習如何在具有適當身份驗證的Mongodb伺服器中建立使用者。

建立管理員使用者

可以使用以下命令在MongoDB伺服器中建立具有管理員許可權的使用者。

$ mongo

> use admin

> db.createUser(
     {
       user:"maxsu",
       pwd:"pwd123",
       roles:[{role:"root",db:"admin"}]
     }
  )

> exit

現在嘗試通過命令列使用上述使用者憑據登入 -

D:\Program Files\MongoDB\Server\3.4\bin>mongo -u maxsu -p  --authenticationDatabase admin
MongoDB shell version v3.4.5
Enter password:
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.5
Server has startup warnings:
2017-07-05T21:16:55.901+0800 I CONTROL  [initandlisten]
2017-07-05T21:16:55.902+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-07-05T21:16:55.905+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-07-05T21:16:55.908+0800 I CONTROL  [initandlisten]
>

新增資料庫使用者

您還可以建立指定資料庫的使用者,該使用者只能存取該資料庫。也可以為此資料庫上的使用者指定存取級別。 例如,建立一個在mydb資料庫上具有讀寫存取許可權的使用者帳戶。

> use mydb

> db.createUser(
    {
      user: "user01",
      pwd: "pwd123",
      roles: ["readWrite"]
    }
 ) 

> exit

驗證身份驗證使用以下命令。 返回結果為1,表示認證成功。

> db.auth('user01','pwd123')
1
>

要列出資料庫的所有使用者,請使用以下命令。

 > db.getUsers()

上面語句,返回結果如下所示 -

> db.getUsers()
[
        {
                "_id" : "mydb.user01",
                "user" : "user01",
                "db" : "mydb",
                "roles" : [
                        {
                                "role" : "readWrite",
                                "db" : "mydb"
                        }
                ]
        },
        {
                "_id" : "mydb.user02",
                "user" : "user02",
                "db" : "mydb",
                "roles" : [
                        {
                                "role" : "readWrite",
                                "db" : "mydb"
                        }
                ]
        }
]
>

刪除資料庫使用者

也可以使用以下命令從資料庫中刪除使用者。

> use mydb

> db.dropUser('user02')

建立帶角色的使用者

以下操作在test資料庫中建立使用者:mynewuser,並向使用者提供readWritedbAdmin角色。

use test
db.createUser(
   {
     user: "mynewuser",
     pwd: "myuser123",
     roles: [ "readWrite", "dbAdmin" ]
   }
);

建立沒有角色的使用者

以下操作在test資料庫中建立一個名為mynewuser1的使用者,但尚未分配角色:

use test
db.createUser(
   {
     user: "mynewuser1",
     pwd: "myuser1123",
     roles: [ ]
   }
);

建立具有角色的管理使用者

以下操作在管理資料庫中建立一個名為 myadmin1 的使用者,並給予使用者對config資料庫的 readWrite 存取許可權,這樣可以讓使用者更改分片分割區的某些設定,例如平衡器設定。

use admin
db.createUser(
   {
     user: "myadmin1",
     pwd: "myadmin123",
     roles:
       [
         { role: "readWrite", db: "config" },
         "clusterAdmin"
       ]
   }
);