關於MongoDB的用戶和角色許可權的梳理一直不太清晰,仔細閱讀了下官方文檔,並對此做個總結。 預設情況下,MongoDB實例啟動運行時是沒有啟用用戶訪問許可權控制的,也就是說,在實例本機伺服器上都可以隨意登錄實例進行各種操作,MongoDB不會對連接客戶端進行用戶驗證,可以想象這是非常危險的。為了強制 ...
關於MongoDB的用戶和角色許可權的梳理一直不太清晰,仔細閱讀了下官方文檔,並對此做個總結。
預設情況下,MongoDB實例啟動運行時是沒有啟用用戶訪問許可權控制的,也就是說,在實例本機伺服器上都可以隨意登錄實例進行各種操作,MongoDB不會對連接客戶端進行用戶驗證,可以想象這是非常危險的。為了強制開啟用戶訪問控制(用戶驗證),則需要在MongoDB實例啟動時使用選項--auth
或在指定啟動配置文件中添加選項auth=true
。
本文就MongoDB用戶的許可權和角色管理進行測試,主要參考的是官方文檔說明。
版本說明
操作系統:CentOS Linux release 7.5.1804 (Core)
資料庫版本:MongoDB v4.0.9
啟用訪問控制
MongoDB使用的是基於角色的訪問控制(Role-Based Access Control,RBAC)來管理用戶對實例的訪問。通過對用戶授予一個或多個角色來控制用戶訪問資料庫資源的許可權和資料庫操作的許可權,在對用戶分配角色之前,用戶無法訪問實例。
在實例啟動時添加選項--auth
或指定啟動配置文件中添加選項auth=true
。
角色
在MongoDB中通過角色對用戶授予相應資料庫資源的操作許可權,每個角色當中的許可權可以顯式指定,也可以通過繼承其他角色的許可權,或者兩都都存在的許可權。
許可權
許可權由指定的資料庫資源(resource)以及允許在指定資源上進行的操作(action)組成。
- 資源(resource)包括:資料庫、集合、部分集合和集群;
- 操作(action)包括:對資源進行的增、刪、改、查(CRUD)操作。
在角色定義時可以包含一個或多個已存在的角色,新創建的角色會繼承包含的角色所有的許可權。在同一個資料庫中,新創建角色可以繼承其他角色的許可權,在admin
資料庫中創建的角色可以繼承在其它任意資料庫中角色的許可權。
關於角色許可權的查看,可以通過如下命令查詢:
// 查詢當前資料庫中的角色許可權
> db.runCommand({ rolesInfo: "<rolename>" })
// 查詢其它資料庫中指定的角色許可權
> db.runCommand({ rolesInfo: { role: "<rolename>", db: "<database>" } }
// 查詢多個角色許可權
> db.runCommand(
{
rolesInfo: [
"<rolename>",
{ role: "<rolename>", db: "<database>" },
...
]
}
)
// 查詢所有角色許可權(僅用戶自定義角色)
> db.runCommand({ rolesInfo: 1 })
// 查詢所有角色許可權(包含內置角色)
> db.runCommand({ rolesInfo: 1, showBuiltinRoles: true })
系統內置角色
MongoDB內部提供了一系列內置的角色,這些角色是為了完成一些基本的資料庫操作。每個內置角色提供了用戶在角色資料庫內資料庫級別所有非系統類集合的訪問許可權,也提供了對集合級別所有系統集合的訪問許可權。MongoDB在每個資料庫上都提供內置的資料庫用戶角色和資料庫管理角色,但只在admin資料庫中提供其它的內置角色。
內置角色主要包括以下幾個類別:
- 資料庫用戶角色(Database User Roles)
- 資料庫管理角色(Database Administration Roles)
- 集群管理角色(Cluster Administration Roles)
- 備份和恢復角色(Backup and Restoration Roles)
- 全資料庫級角色(All-Database Roles)
- 超級用戶角色(Superuser Roles)
- 內部角色(Internal Role)
資料庫用戶角色
- read
read角色包含讀取所有非系統集合數據和訂閱部分系統集合(system.indexes、system.js、system.namespaces)的許可權。
該角色許可權包含命令操作:changeStream、collStats、dbHash、dbStats、find、killCursors、listIndexes、listCollections。
- readWrite
readWrite角色包含read角色的許可權同時增加了對非系統集合數據的修改許可權,但只對系統集合system.js有修改許可權。
該角色許可權包含命令操作:collStats、convertToCapped、createCollection、dbHash、dbStats、dropCollection、createIndex、dropIndex、find、insert、killCursors、listIndexes、listCollections、remove、renameCollectionSameDB、update。
資料庫管理角色
- dbAdmin
dbAdmin角色包含執行某些管理任務(與schema相關、索引、收集統計信息)的許可權,該角色不包含用戶和角色管理的許可權。
對於系統集合(system.indexes、system.namespaces、system.profile)包含命令操作:collStats、dbHash、dbStats、find、killCursors、listIndexes、listCollections、dropCollection and createCollection(僅適用system.profile)
對於非系統集合包含命令操作:bypassDocumentValidation、collMod、collStats、compact、convertToCapped、createCollection、createIndex、dbStats、dropCollection、dropDatabase、dropIndex、enableProfiler、reIndex、renameCollectionSameDB、repairDatabase、storageDetails、validate
- dbOwner
dbOwner角色包含對數據所有的管理操作許可權。即包含角色readWrite、dbAdmin和userAdmin的許可權。
- userAdmin
userAdmin角色包含對當前資料庫創建和修改角色和用戶的許可權。該角色允許向其它任何用戶(包括自身)授予任何許可權,所以這個角色也提供間接對超級用戶(root)的訪問許可權,如果限定在admin數據中,也包括集群管理的許可權。
該角色許可權包含命令操作:changeCustomData、changePassword、createRole、createUser、dropRole、dropUser、grantRole、revokeRole、setAuthenticationRestriction、viewRole、viewUser。
集群管理角色
- clusterManager
clusterManager角色包含對集群監控和管理操作的許可權。擁有此角色的用戶能夠訪問集群中的config資料庫和local資料庫。
對於整個集群該角色包含命令操作:addShard、appendOplogNote、applicationMessage、cleanupOrphaned、flushRouterConfig、listSessions (3.6新增)、listShards、removeShard、replSetConfigure、replSetGetConfig、replSetGetStatus、replSetStateChange、resync。
對於集群中所有的資料庫包含命令操作:enableSharding、moveChunk、splitChunk、splitVector。
對於集群中config資料庫和local資料庫包含的命令操作可以參考官方文檔:https://docs.mongodb.com/manual/reference/built-in-roles/#clusterManager。
- clusterMonitor
clusterMonitor角色包含針對監控工具具有隻讀操作的許可權。如工具MongoDB Cloud Manager和工具Ops Manager。
對於整個集群該角色包含命令操作:checkFreeMonitoringStatus(4.0新增)、connPoolStats、getCmdLineOpts、getLog、getParameter、getShardMap、hostInfo、inprog、listDatabases、listSessions (3.6新增)、listShards、netstat、replSetGetConfig、replSetGetStatus、serverStatus、setFreeMonitoring (4.0新增)、shardingState、top。
對於集群中所有的數據為包含命令操作:collStats、dbStats、getShardVersion、indexStats、useUUID(3.6新增)。
對於集群中config資料庫和local資料庫包含的命令操作可以參考官方文檔:https://docs.mongodb.com/manual/reference/built-in-roles/#clusterMonitor。
- hostManager
hostManager角色包含針對資料庫伺服器的監控和管理操作許可權。
對於整個集群該角色包含命令操作:applicationMessage、closeAllDatabases、connPoolSync、cpuProfiler、flushRouterConfig、fsync、invalidateUserCache、killAnyCursor (4.0新增)、killAnySession (3.6新增)、killop、logRotate、resync、setParameter、shutdown、touch、unlock。
對於集群中所有的資料庫包含命令操作:killCursors、repairDatabase。
- clusterAdmin
clusterAdmin角色包含MongoDB集群管理最高的操作許可權。該角色包含clusterManager、clusterMonitor和hostManager三個角色的所有許可權,並且還擁有dropDatabase操作命令的許可權。
備份和恢復角色
- backup
backup角色包含備份MongoDB數據最小的許可權。
對於MongoDB中所有的資料庫資源包含命令操作:listDatabases、listCollections、listIndexes。
對於整個集群包含命令操作:appendOplogNote、getParameter、listDatabases。
對於以下資料庫資源提供find操作許可權:
- 對於集群中的所有非系統集合,包括自身的config資料庫和local資料庫;
- 對於集群中的系統集合:system.indexes、system.namespaces、system.js和system.profile;
- admin資料庫中的集合:admin.system.users和admin.system.roles;
- config.settings集合;
- 2.6版本之前的system.users集合。
對於config.setting集合還有insert和update操作許可權。
- restore
restore角色包含從備份文件中還原恢復MongoDB數據(除了system.profile集合)的許可權。
restore角色有以下註意事項:
- 如果備份中包含system.profile集合而恢複目標資料庫沒有system.profile集合,mongorestore會嘗試重建該集合。因此執行用戶需要有額外針對system.profile集合的createCollection和convertToCapped操作許可權;
- 如果執行mongorestore命令時指定選項
--oplogReplay
,則restore角色包含的許可權無法進行重放oplog。如果需要進行重放oplog,則需要只對執行mongorestore的用戶授予包含對實例中任何資源具有任何許可權的自定義角色。
對於整個集群包含命令操作:getParameter。
對於所有非系統集合包含命令操作:bypassDocumentValidation、changeCustomData、changePassword、collMod、convertToCapped、createCollection、createIndex、createRole、createUser、dropCollection、dropRole、dropUser、grantRole、insert、revokeRole、viewRole、viewUser。
關於restore角色包含其它的命令操作可以參考官方文檔:https://docs.mongodb.com/manual/reference/built-in-roles/#restore。
全資料庫級角色
以下角色只存在於admin資料庫,並且適用於除了config和local之外所有的資料庫。
- readAnyDatabase
readAnyDatabase角色包含對除了config和local之外所有資料庫的只讀許可權。同時對於整個集群包含listDatabases命令操作。
在MongoDB3.4版本之前,該角色包含對config和local資料庫的讀取許可權。當前版本如果需要對這兩個資料庫進行讀取,則需要在admin資料庫授予用戶對這兩個資料庫的read角色。
- readWriteAnyDatabase
readWriteAnyDatabase角色包含對除了config和local之外所有資料庫的讀寫許可權。同時對於整個集群包含listDatabases命令操作。
在MongoDB3.4版本之前,該角色包含對config和local資料庫的讀寫許可權。當前版本如果需要對這兩個資料庫進行讀寫,則需要在admin資料庫授予用戶對這兩個資料庫的readWrite角色。
- userAdminAnyDatabase
userAdminAnyDatabase角色包含類似於userAdmin角色對於所有資料庫的用戶管理許可權,除了config資料庫和local資料庫。
對於集群包含命令操作:authSchemaUpgrade、invalidateUserCache、listDatabases。
對於系統集合admin.system.users和admin.system.roles包含命令操作:collStats、dbHash、dbStats、find、killCursors、planCacheRead、createIndex、dropIndex。
該角色不會限制用戶授予許可權的操作,因此,擁有角色的用戶也有可能授予超過角色範圍內的許可權給自己或其它用戶,也可以使自己成為超級用戶,userAdminAnyDatabase角色也可以認為是MongoDB中的超級用戶角色。
- dbAdminAnyDatabase
dbAdminAnyDatabase角色包含類似於dbAdmin角色對於所有資料庫管理許可權,除了config資料庫和local資料庫。同時對於整個集群包含listDatabases命令操作。
在MongoDB3.4版本之前,該角色包含對config和local資料庫的管理許可權。當前版本如果需要對這兩個資料庫進行管理,則需要在admin資料庫授予用戶對這兩個資料庫的dbAdmin角色。
超級用戶角色
以下角色包含在任何資料庫授予任何用戶任何許可權的許可權。這意味著用戶如果有以下角色之一可以為自己在任何資料庫授予任何許可權。
- dbOwner角色(作用範圍為admin資料庫)
- userAdmin角色(作用範圍為admin資料庫)
- userAdminAnyDatabase角色
以下角色包含資料庫所有資源的所有操作許可權。
- root
root角色包含角色readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase、clusterAdmin、restore和backup聯合之後所有的許可權。
內部角色
- **__system**
MongoDB將此角色授予代表集群成員的用戶對象,如副本集(replica set)成員或mongos實例。該角色允許用戶對於需要的資料庫操作都具有相應的許可權,不要將該角色授予應用程式用戶或其它管理員用戶。
總結
通過以上對內置角色的說明,總結一下較為常用的內置角色,如下表:
角色 | 許可權描述 |
---|---|
read | 可以讀取指定資料庫中任何數據。 |
readWrite | 可以讀寫指定資料庫中任何數據,包括創建、重命名、刪除集合。 |
readAnyDatabase | 可以讀取所有資料庫中任何數據(除了資料庫config和local之外)。 |
readWriteAnyDatabase | 可以讀寫所有資料庫中任何數據(除了資料庫config和local之外)。 |
dbAdmin | 可以讀取指定資料庫以及對資料庫進行清理、修改、壓縮、獲取統計信息、執行檢查等操作。 |
dbAdminAnyDatabase | 可以讀取任何資料庫以及對資料庫進行清理、修改、壓縮、獲取統計信息、執行檢查等操作(除了資料庫config和local之外)。 |
clusterAdmin | 可以對整個集群或資料庫系統進行管理操作。 |
userAdmin | 可以在指定資料庫創建和修改用戶。 |
userAdminAnyDatabase | 可以在指定資料庫創建和修改用戶(除了資料庫config和local之外)。 |
用戶自定義角色
雖然MongoDB提供了一系列內置角色,但有時內置角色所包含的許可權並不滿足所有需求,所以MongoDB也提供了創建自定義角色的方法。當創建一個自定義角色時需要進入指定資料庫進行操作,因為MongoDB通過資料庫和角色名稱對角色進行唯一標識。
除了在admin資料庫中創建的角色之外,在其它資料庫中創建的自定義角色包含的許可權只適用於角色所在的資料庫,並且只能繼承同資料庫其它角色的許可權。在admin資料庫中創建的自定義角色則不受此限制。
MongoDB將所有的角色信息存儲在admin資料庫的system.roles集合中,不建議直接訪問此集合內容,而是通過角色管理命令來查看和編輯自定義角色。
創建自定義角色
測試環境說明:
> show dbs;
admin 0.000GB
config 0.000GB
dbabd 0.001GB
local 0.000GB
> use dbabd;
switched to db dbabd
> show collections;
city
user_operation
> db.city.count()
600
> db.user_operation.count()
22068
在admin資料庫中創建自定義用戶dbabd,對集合city有find,update許可權,對集合user_operation只有find許可權。
> db.createRole(
{
role: "dbabd",
privileges: [
{ resource: { db: "dbabd", collection: "city" }, actions: ["find", "update"] },
{ resource: { db: "dbabd", collection: "user_operation" }, actions: ["find"] },
],
roles: []
}
)
或
> db.adminCommand(
{
createRole: "dbabd",
privileges: [
{ resource: { db: "dbabd", collection: "city" }, actions: ["find", "update"] },
{ resource: { db: "dbabd", collection: "user_operation" }, actions: ["find"] }
],
roles: []
}
)
查看自定義角色
> db.getRole("dbabd", { showPrivileges: true })
或
> db.getRoles({ rolesInfo: 1, showPrivileges: true })
或
> use admin
> db.runCommand(
{
rolesInfo: { role: "dbabd", db: "admin" },
showPrivileges: true
}
)
更新自定義角色
為自定義角色dbabd更新集合dbabd.user_operation的insert許可權。
> db.updateRole(
"dbabd",
{
privileges: [
{ resource: { db: "dbabd", collection: "city" }, actions: ["find", "update"] },
{ resource: { db: "dbabd", collection: "user_operation" }, actions: ["find", "insert"] }
],
roles: []
}
)
或
> db.adminCommand(
{
updateRole: "dbabd",
privileges: [
{ resource: { db: "dbabd", collection: "city" }, actions: ["find", "update"] },
{ resource: { db: "dbabd", collection: "user_operation" }, actions: ["find", "insert"] }
],
roles: []
}
)
添加角色許可權
為自定義角色dbabd添加集合dbabd.user_operation的remove許可權。
db.grantPrivilegesToRole(
"dbabd",
[
{ resource: { db: "dbabd", collection: "user_operation" }, actions: ["remove"] }
]
)
或
> use admin
> db.runCommand(
{
grantPrivilegesToRole: "dbabd",
privileges: [
{ resource: { db: "dbabd", collection: "user_operation" }, actions: ["remove"] }
]
}
)
刪除角色許可權
為自定義角色dbabd收回集合dbabd.city的update許可權。
> db.revokePrivilegesFromRole(
"dbabd",
[
{ resource: { db: "dbabd", collection: "city" }, actions: ["update"] }
]
)
或
> use admin
> db.runCommand(
{
revokePrivilegesFromRole: "dbabd",
privileges: [
{ resource: { db: "dbabd", collection: "city" }, actions: ["update"] }
]
}
)
添加角色繼承的角色
為自定義角色dbabd添加dbabd資料庫的read角色,繼承其角色許可權。
> use dbabd
> db.grantRolesToRole("dbabd", [{ role: "read", db: "dbabd" }])
或
> use dbabd
> db.runCommand({ grantRolesToRole: "dbabd", roles: [{ role: "read", db: "dbabd" }] })
// 查詢角色信息驗證
> db.getRole("dbabd")
{
"role" : "dbabd",
"db" : "admin",
"isBuiltin" : false,
"roles" : [
{
"role" : "read",
"db" : "dbabd"
}
],
"inheritedRoles" : [
{
"role" : "read",
"db" : "dbabd"
}
]
}
刪除角色繼承的角色
為自定義角色dbabd收回dbabd資料庫的read角色及其角色許可權。
> use dbabd
> db.revokeRolesFromRole("dbabd", [{ role: "read", db: "dbabd" }])
或
> use dbabd
> db.runCommand({ revokeRolesFromRole: "dbabd", roles: [{ role: "read", db: "dbabd" }] })
//查詢角色信息驗證
> db.getRole("dbabd")
{
"role" : "dbabd",
"db" : "admin",
"isBuiltin" : false,
"roles" : [ ],
"inheritedRoles" : [ ]
}
刪除自定義角色
刪除自定義角色dbabd。
> use admin
> db.dropRole("dbabd")
或
> use admin
> db.runCommand({ dropRole: "dbabd" })
用戶
MongoDB是基於角色的訪問控制,所以創建用戶需要指定用戶的角色,在創建用戶之前需要滿足:
- 先在admin資料庫中創建角色為userAdmin或userAdminAnyDatabase的用戶作為管理用戶的用戶;
- 啟用訪問控制,進行登錄用戶驗證,這樣創建用戶才有意義。
創建用戶管理的用戶
啟用訪問控制登錄之前,首先需要在admin資料庫中創建角色為userAdmin或userAdminAnyDatabase作為用戶管理的用戶,之後才能通過這個用戶創建其它角色的用戶,這個用戶作為其它所有用戶的管理者。
// 創建管理用戶用戶名為user_admin,密碼admin
db.createUser(
{
user: "user_admin",
pwd: "admin",
roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
}
)
Successfully added user: {
"user" : "user_admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
開啟訪問控制
要開啟訪問控制,則需要在mongod進程啟動時加上選項--auth
或在啟動配置文件加入選項auth=true
,並重啟mongodb實例。
## mongod配置文件如下
# cat mongodb.cnf
journal=true
dbpath=/data/mongodb/4.0/data
directoryperdb=true
fork=true
port=27017
logpath=/data/mongodb/4.0/logs/mongodb.log
quiet=true
bind_ip_all=true
auth=true
## 啟動mongodb實例
# mongod -f mongodb.cnf
about to fork child process, waiting until server is ready for connections.
forked process: 44347
child process started successfully, parent exiting
使用mongo shell登錄mongodb實例:
# mongo 192.168.58.2:27017
MongoDB shell version v4.0.9
connecting to: mongodb://192.168.58.2:27017/test?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("428c215c-2927-49ee-8507-573efc4a1185") }
MongoDB server version: 4.0.9
>
// 如果沒有開啟訪問控制,則在登錄時會提示如下警告信息
** WARNING: Access control is not enabled for the database.
** Read and write access to data and configuration is unrestricted.
用戶管理用戶驗證
可以在使用mongo shell登錄時添加選項--authenticationDatabase
或登錄完後在admin資料庫下進行驗證。
在mongo shell登錄時同時進行驗證:
# mongo 192.168.58.2:27017 -uuser_admin -p --authenticationDatabase admin
MongoDB shell version v4.0.9
Enter password: # 輸入密碼admin
connecting to: mongodb://192.168.58.2:27017/test?authSource=admin&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("94663b8d-7d88-4c97-ad1c-c3c24262ad39") }
MongoDB server version: 4.0.9
>
mongo shell登錄完成之後進行驗證:
# mongo 192.168.58.2:27017
MongoDB shell version v4.0.9
connecting to: mongodb://192.168.58.2:27017/test?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("531e75df-3a5d-4f35-9e18-d7a6e090df63") }
MongoDB server version: 4.0.9
> use admin
switched to db admin
> db.auth('user_admin','admin')
1
用戶管理操作
創建普通用戶
使用user_admin用戶在admin資料庫中創建基於角色dbabd的用戶dbabd_user,密碼為dbabd。
> use admin
> db.createUser(
{
user: "dbabd_user",
pwd: "dbabd",
roles: ["dbabd"],
customData: { info: "user for dbabd" }
}
)
Successfully added user: {
"user" : "dbabd_user",
"roles" : [
"dbabd"
],
"customData" : {
"info" : "user for dbabd"
}
或
> db.getSiblingDB("admin").runCommand(
{
createUser: "dbabd_user",
pwd: "dbabd",
customData: { info: "user for dbabd" },
roles: ["dbabd"]
}
)
{ "ok" : 1 }
查看用戶信息
> use admin
> db.getUser("dbabd_user", { showPrivileges: true })
或
> db.getSiblingDB("admin").runCommand(
{
usersInfo: "dbabd_user",
showPrivileges: true
}
)
為用戶添加角色
用戶dbabd_user添加admin資料庫的readWrite角色。
> use admin
> db.grantRolesToUser(
"dbabd_user",
[
{ role: "readWrite", db: "admin" },
{ role: "dbabd", db: "admin" }
]
)
或
> use admin
> db.runCommand(
{
grantRolesToUser: "dbabd_user",
roles:
[
{ role: "readWrite", db: "admin" },
{ role: "dbabd", db: "admin" }
]
}
)
更新用戶信息
更新用戶dbabd_user具有admin資料庫readWrite角色為read角色。
> use admin
> db.updateUser(
"dbabd_user",
{
customData: { info: "user for dbabd" },
roles: [
{ role: "dbabd", db: "admin" },
{ role: "read", db: "admin" }
]
}
)
或
> use admin
> db.runCommand(
{
updateUser: "dbabd_user",
customData: { info: "user for dbabd" },
roles: [
{ role: "dbabd", db: "admin" },
{ role: "read", db: "admin" }
]
}
)
為用戶回收角色
用戶dbabd_user回收admin資料庫的read角色。
> use admin
> db.revokeRolesFromUser(
"dbabd_user",
[
{ role: "read", db: "admin" }
]
)
或
> use admin
> db.runCommand(
{
revokeRolesFromUser: "dbabd_user",
roles:
[
{ role: "read", db: "admin" }
]
}
)
更改用戶密碼
更改用戶dbabd_user密碼為dbabdnew。
> use admin
> db.changeUserPassword("dbabd_user", "dbabdnew")
刪除用戶
刪除用戶dbabd_user。
> use admin
> db.dropUser("dbabd_user")
或
> use admin
> db.runCommand({ dropUser: "dbabd_user" })
關於更多用戶管理操作信息可以參考官方文檔說明:https://docs.mongodb.com/manual/reference/method/js-user-management/
總結
一直以為MongoDB對於安全性能不是特別重視,在重新閱讀了最新版本的官方文檔之後有了很大的改觀,對於基於角色的用戶訪問控制能夠更為精細地控制訪問用戶的許可權。在新的版本當中對於密碼加密機制以及加密演算法都做了很大的改進與提升,通過這次總結梳理可以給本文總結如下:
- MongoDB中角色和用戶是建立在資料庫中的;
- 在哪個資料庫中創建用戶就需要在哪個資料庫中進行驗證;
- 為了更好對用戶許可權進行控制,最好為每個用戶創建一個自定義角色。
參考
https://docs.mongodb.com/manual/tutorial/enable-authentication/
https://docs.mongodb.com/manual/reference/command/nav-role-management/
https://docs.mongodb.com/manual/reference/command/nav-user-management/
☆〖本人水平有限,文中如有錯誤還請留言批評指正!〗☆