Mongo Shell是MongoDB自带的数据库管理工具。云数据库MongoDB支持通过Mongo Shell管理数据库账号。本文介绍如何通过Mongo Shell创建和查询数据库账号。
前提条件
- 已创建云数据库MongoDB实例。不同类型实例的创建方法如下:
说明 云数据库MongoDB已停止新购Serverless实例,您可以使用现存实例。
- 已通过Mongo Shell成功连接云数据库MongoDB实例。不同类型实例的连接方法如下:
注意事项
同一数据库的数据库账号不允许重复。
创建数据库账号
说明
- 数据库账号创建后不支持在云数据库MongoDB控制台的账号管理页面查询。
- 首次通过Mongo Shell创建数据库账号时,需要在admin数据库下对实例固有的root账号进行认证。
查询数据库账号
查询云数据库MongoDB实例的所有数据库账号
在admin数据库执行如下命令:
db.getCollection("system.users").find()
说明 该命令可以直接复制执行,无需修改。
返回结果如下:
{ "_id" : "admin.root", "userId" : UUID("b079b4c8-0e34-4e0d-90f9-75741414****"), "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "WeN7mJumlZKG2dvzLRDL*****", "storedKey" : "wfRUnCq55ajFwnYxf9MQJ0k****", "serverKey" : "tP70xGJ9PRZs01VSJF1YDrHg****" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "5aIQ734c2Whg2pPwfg****/mpJulsd+33rE****", "storedKey" : "otMBwA2TTwoU****+dfwccnfPN14Dy5Oq6keYOl****", "serverKey" : "VCE****+aLkXGzCqRiaPfjnFG4WFiAOq0BKXxTo0****" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "admin.test", "userId" : UUID("769ea9a1-6224-470e-8162-19a62fa2****"), "user" : "test", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "8fyXsIUgs6aQmafhTDrS****", "storedKey" : "fJQFoKsl7ll****/4vFU4xQn****", "serverKey" : "Tf1zygJ****/3/P3UMM47rr8****" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "wcWRhs9VXEsmNWtd7ZD****+NbYXx8ugJ3p2****", "storedKey" : "A5GiH****/tf70hakRY3U3joho3GrtFWQ****/WX****", "serverKey" : "ryRAcj6zomYiHJqhA9ObvuYALc3ZZva8ImR7B89C****" } }, "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }
查询目标数据库的所有数据库账号
说明 您可以通过
use database_name
命令切换数据库,其中database_name
为目标数据库的名称。
- 方式一:在目标数据库执行查询命令。
show users
说明 该命令可以直接复制执行,无需修改。返回结果如下:{ "_id" : "admin.root", "userId" : UUID("b079b4c8-0e34-4e0d-90f9-75741414****"), "user" : "root", "db" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } { "_id" : "admin.test", "userId" : UUID("769ea9a1-6224-470e-8162-19a62fa2****"), "user" : "test", "db" : "admin", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] }
- 方式二:在admin数据库执行查询命令。
语法:
db.getCollection("system.users").find({db: "database_name"})
参数说明:
database_name
为目标数据库的名称。示例:db.getCollection("system.users").find({db: "admin"})
返回结果如下:{ "_id" : "admin.root", "userId" : UUID("b079b4c8-0e34-4e0d-90f9-75741414****"), "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "WeN7mJumlZKG2dvzLRDL*****", "storedKey" : "wfRUnCq55ajFwnYxf9MQJ0k****", "serverKey" : "tP70xGJ9PRZs01VSJF1YDrHg****" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "5aIQ734c2Whg2pPwfg****/mpJulsd+33rE****", "storedKey" : "otMBwA2TTwoU****+dfwccnfPN14Dy5Oq6keYOl****", "serverKey" : "VCE****+aLkXGzCqRiaPfjnFG4WFiAOq0BKXxTo0****" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] } { "_id" : "admin.test", "userId" : UUID("769ea9a1-6224-470e-8162-19a62fa2****"), "user" : "test", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "8fyXsIUgs6aQmafhTDrS****", "storedKey" : "fJQFoKsl7ll****/4vFU4xQn****", "serverKey" : "Tf1zygJ****/3/P3UMM47rr8****" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "wcWRhs9VXEsmNWtd7ZD****+NbYXx8ugJ3p2****", "storedKey" : "A5GiH****/tf70hakRY3U3joho3GrtFWQ****/WX****", "serverKey" : "ryRAcj6zomYiHJqhA9ObvuYALc3ZZva8ImR7B89C****" } }, "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }
查询目标数据库的单个数据库账号
说明 查询单个数据库账号的命令需在admin数据库执行。
语法:
db.getCollection("system.users").find({user: "user_name", db: "database_name"})
参数说明:
user_name
:数据库账号的名称。database_name
:数据库账号所属的数据库名称。
示例:
db.getCollection("system.users").find({user: "test", db: "admin"})
返回结果如下:
{ "_id" : "admin.test", "userId" : UUID("769ea9a1-6224-470e-8162-19a62fa2****"), "user" : "test", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "8fyXsIUgs6aQmafhTDrS****", "storedKey" : "fJQFoKsl7llXdiU/4vFU4xQn****", "serverKey" : "Tf1zygJ****/3/P3UMM47rr8****" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "wcWRhs9VXEsmNWtd7ZD****+NbYXx8ugJ3p2****", "storedKey" : "A5GiH****/tf70hakRY3U3joho3GrtFWQ****/WX****", "serverKey" : "ryRAcj6zomYiHJqhA9ObvuYALc3ZZva8ImR7B89C****" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
数据库账号的角色说明
所属数据库 | 角色 | 角色说明 |
---|---|---|
所有数据库 | readOnly | 对所属数据库的只读权限。 |
readWrite | 对所属数据库的读写权限。 | |
userAdmin | 在所属数据库下创建账号和角色的权限。 | |
dbAdmin | 在所属数据库下管理数据集合的权限。 | |
dbOwner | 包含readWrite、userAdmin和dbAdmin的所有权限。 | |
enableSharding | 允许分片集群实例的数据库在多个Shard节点上分布。 | |
admin数据库 | readAnyDatabase | 对所有数据库的只读权限。 |
readWriteAnyDatabase | 对所有数据库的读写权限。 | |
userAdminAnyDatabase | 在所有数据库下创建账号和角色的权限。 | |
dbAdminAnyDatabase | 在所有数据库下管理数据集合的权限。 | |
clusterMonitor | 执行各种采集信息指令的权限。 | |
hostManager | 执行setParameter、killop、resync和killCursors等指令的权限。更多指令信息,请参见hostManager。 | |
clusterManager | 执行节点管理指令的权限。 | |
clusterAdmin | 包含clusterMonitor、hostManager和clusterManager的所有权限。 | |
root | 包含admin数据库下的所有权限,包括readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase和dbAdminAnyDatabase等。 |
说明 角色说明的更多信息,请参见Built-In Roles和MongoDB。