MongoDB添加用戶
MongoDB採用基於角色的訪問控制(RBAC)來確定用戶的訪問。 授予用戶一個或多個角色,確定用戶對MongoDB資源的訪問權限和用戶可以執行哪些操作。 用戶應該只有最小權限集才能確保最小權限的系統。
MongoDB系統的每個應用程序和用戶都應該映射到不同的用戶。 這種訪問隔離便於訪問撤銷和持續的用戶維護。
前提條件
如果啓用了部署的訪問控制,則可以使用localhost異常來創建系統中的第一個用戶。 此第一個用戶必須具有創建其他用戶的權限。 對於MongoDB 3.0,使用localhost異常只能在admin
數據庫上創建用戶。 創建第一個用戶後,必須使用該用戶進行身份驗證以添加後續用戶。 啓用Auth提供有關在啓用部署訪問控制時添加用戶的更多詳細信息。
對於常規用戶創建,必須擁有以下權限:
- 要在數據庫中創建新用戶,必須在該數據庫資源上具有createUser操作。
- 要向用戶授予角色,必須對角色的數據庫執行
grantRole
操作。
userAdmin和userAdminAnyDatabase內置角色在其各自的資源上提供createUser
和grantRole
操作。
例子
要在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
,並向用戶提供readWrite
和dbAdmin
角色。
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"
]
}
);