本文主要是MongoDB4.X的操作
一、MongoDB用戶創建
MongoDB采用基於角色的訪問控制(RBAC)來確定用戶的訪問。 授予用戶一個或多個角色,確定用戶對MongoDB資源的訪問權限和用戶可以執行哪些操作。 用戶應該只有最小權限集才能確保最小權限的系統。
MongoDB系統的每個應用程序和用戶都應該映射到不同的用戶。 這種訪問隔離便於訪問撤銷和持續的用戶維護。
1.創建管理員用戶
要在MongoDB部署中創建用戶,請連接到部署,然后使用db.createUser()方法或createUser命令添加用戶。
rs0:PRIMARY> db.createUser(
... {
... user:"test",
... pwd:"123456",
... roles:[{role:"root",db:"admin"}]
... }
... )
Successfully added user: {
"user" : "test",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
查看全部用戶用db.getUsers();
2.添加並驗證用戶
use admin
db.addUser(“abc”,”123456”)
db.auth(“abc”,”123456”)
3.查看已存在的用戶
db.system.users.find()
db.getUsers();
4.查看用戶信息
> use admin
> db.getUser("用戶名", { showPrivileges: true })
或
> db.getSiblingDB("admin").runCommand(
{
usersInfo: "root",
showPrivileges: true
}
)
5.添加數據庫用戶
創建指定數據庫的用戶,該用戶只能訪問該數據庫。也可以為此數據庫上的用戶指定訪問級別。 例如,創建一個在data數據庫上具有讀寫訪問權限的用戶帳戶。
> use data
> db.createUser( { user: "user01", pwd: "123456", roles: ["readWrite"] } )
或
db.getSiblingDB("admin").runCommand( { createUser: "user02", pwd: "123456", customData: { info: "user for user02" }, roles: ["readWrite"] } )
身份驗證使用db.auth('用戶名','密碼');
Built-In Roles(內置角色):
1. 數據庫用戶角色:read、readWrite;
2. 數據庫管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 備份恢復角色:backup、restore;
5. 所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超級用戶角色:root
// 這里還有幾個角色間接或直接提供了系統超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 內部角色:__system
具體角色
Read:允許用戶讀取指定數據庫
readWrite:允許用戶讀寫指定數據庫
dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫里創建、刪除和管理用戶
clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
root:只在admin數據庫中可用。超級賬號,超級權限
db.createUser(
{
user: "fyerp",
pwd: "test.123",
roles:
[{ role: "readWrite", db: "item" },{ role: "readWrite", db: "local" },{ role: "readWrite", db: "logdb" }]
}
)
7.為用戶添加角色
用戶user02添加admin數據庫的readWrite角色
> use admin
> db.grantRolesToUser( "user02", [ { role: "readWrite", db: "admin" }, { role: "user02", db: "admin" } ] )
或
> use admin
> db.runCommand( { grantRolesToUser: "user02", roles: [ { role: "readWrite", db: "admin" }, { role: "user02", db: "admin" } ] } )
8.更新用戶信息
更新用戶user02具有admin數據庫readWrite角色為read角色。
> use admin
> db.updateUser( "user02", { customData: { info: "user for user02" }, roles: [ { role: "user02", db: "admin" }, { role: "read", db: "admin" } ] } )
或
> use admin
> db.runCommand( { updateUser: "user02", customData: { info: "user for user02" }, roles: [ { role: "user02", db: "admin" }, { role: "read", db: "admin" } ] } )
9.為用戶回收角色
> use admin
> db.revokeRolesFromUser( "dbabd_user", [ { role: "read", db: "admin" } ] )
或
> use admin
> db.runCommand( { revokeRolesFromUser: "dbabd_user", roles: [ { role: "read", db: "admin" } ] } )
10.更改用戶密碼
更改用戶dbabd_user密碼為dbabdnew。
> use admin
> db.changeUserPassword("dbabd_user", "dbabdnew")
11.刪除用戶
刪除用戶dbabd_user
> use admin
> db.dropUser("dbabd_user")
或
> use admin
> db.runCommand({ dropUser: "user02" })
關於更多用戶管理操作信息可以參考官方文檔說明:
https://docs.mongodb.com/manual/reference/method/js-user-management/