MongoDB 4.X 用戶和角色權限管理總結


關於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)組成。

  1. 資源(resource)包括:數據庫、集合、部分集合和集群;
  2. 操作(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數據庫中提供其它的內置角色。

內置角色主要包括以下幾個類別:

  1. 數據庫用戶角色(Database User Roles)
  2. 數據庫管理角色(Database Administration Roles)
  3. 集群管理角色(Cluster Administration Roles)
  4. 備份和恢復角色(Backup and Restoration Roles)
  5. 全數據庫級角色(All-Database Roles)
  6. 超級用戶角色(Superuser Roles)
  7. 內部角色(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集群管理最高的操作權限。該角色包含clusterManagerclusterMonitorhostManager三個角色的所有權限,並且還擁有dropDatabase操作命令的權限。

備份和恢復角色

  • backup

backup角色包含備份MongoDB數據最小的權限。

對於MongoDB中所有的數據庫資源包含命令操作:listDatabases、listCollections、listIndexes。

對於整個集群包含命令操作:appendOplogNote、getParameter、listDatabases。

對於以下數據庫資源提供find操作權限:

  1. 對於集群中的所有非系統集合,包括自身的config數據庫和local數據庫;
  2. 對於集群中的系統集合:system.indexes、system.namespaces、system.js和system.profile;
  3. admin數據庫中的集合:admin.system.users和admin.system.roles;
  4. config.settings集合;
  5. 2.6版本之前的system.users集合。

對於config.setting集合還有insert和update操作權限。

  • restore

restore角色包含從備份文件中還原恢復MongoDB數據(除了system.profile集合)的權限。

restore角色有以下注意事項:

  1. 如果備份中包含system.profile集合而恢復目標數據庫沒有system.profile集合,mongorestore會嘗試重建該集合。因此執行用戶需要有額外針對system.profile集合的createCollection和convertToCapped操作權限;
  2. 如果執行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是基於角色的訪問控制,所以創建用戶需要指定用戶的角色,在創建用戶之前需要滿足:

  1. 先在admin數據庫中創建角色為userAdmin或userAdminAnyDatabase的用戶作為管理用戶的用戶;
  2. 啟用訪問控制,進行登錄用戶驗證,這樣創建用戶才有意義。

創建用戶管理的用戶

啟用訪問控制登錄之前,首先需要在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對於安全性能不是特別重視,在重新閱讀了最新版本的官方文檔之后有了很大的改觀,對於基於角色的用戶訪問控制能夠更為精細地控制訪問用戶的權限。在新的版本當中對於密碼加密機制以及加密算法都做了很大的改進與提升,通過這次總結梳理可以給本文總結如下:

  1. MongoDB中角色和用戶是建立在數據庫中的;
  2. 在哪個數據庫中創建用戶就需要在哪個數據庫中進行驗證;
  3. 為了更好對用戶權限進行控制,最好為每個用戶創建一個自定義角色。

參考

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/

☆〖本人水平有限,文中如有錯誤還請留言批評指正!〗☆


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM