云数据库MongoDB支持通过DMS(Data Management Service)管理数据库账号,本文介绍如何通过DMS创建和查询数据库账号。
前提条件
- 已创建云数据库MongoDB实例。不同类型实例的创建方法如下:
说明 Serverless实例不支持通过DMS连接,您可以通过Mongo Shell连接并管理数据库账号。如何连接和管理,请参见通过Mongo Shell连接云数据库MongoDB Serverless实例和通过Mongo Shell管理数据库账号。
- 已通过DMS成功连接云数据库MongoDB实例。不同类型实例的连接方法如下:
注意事项
同一数据库的数据库账号不允许重复。
创建数据库账号
说明
- 数据库账号创建后不支持在云数据库MongoDB控制台的账号管理页面查询。
- 在哪个数据库创建的数据库账号,该数据库账号就属于哪个数据库。
语法:
db.createUser({user: "user_name", pwd: "password", roles:[{role: "role_name", db: "role_database_name"}]})
参数说明:
参数 | 描述 | 示例值 |
---|---|---|
user_name |
数据库账号的名称。
若账号名称中包含 |
test |
password |
数据库账号的密码。 | 123456Aa |
role_name |
授予数据库账号的角色。
角色取值,请参见数据库账号的角色说明。 |
readAnyDatabase |
role_database_name |
角色所属的数据库名称。
例如, |
admin |
示例:
在admin数据库中,创建数据库账号test,密码为123456Aa,并授予test账号readAnyDatabase角色。
db.createUser({user: "test", pwd: "123456Aa", roles:[{role: "readAnyDatabase", db: "admin"}]})
返回结果中ok
取值为1.0
时,表示创建成功,其他取值表示创建失败。
创建成功的返回结果如下:
{
'ok': 1.0,
'operationTime': Timestamp(1655286737,1),
'$clusterTime': {
'clusterTime': Timestamp(1655286737,1),
'signature': {
'hash': BinData(0,"6+urVhsBbHyxgny3S7****"),
'keyId': NumberLong(710604588397****)
}
}
}
说明 参数的更多信息,请参见Response。
查询数据库账号
查询云数据库MongoDB实例的所有数据库账号
在admin数据库执行如下命令:
db.getCollection("system.users").find()
说明 该命令可以直接复制执行,无需修改。
返回结果如下:
{
'_id': "admin.root",
'userId': BinData(3,"b079b4c8-0e34-4e0d-90f9-7574141****"),
'user': "root",
'db': "admin",
'credentials': {
'SCRAM-SHA-1': {
'iterationCount': 10000,
'salt': "eCUjsUnIqvfLYbY****",
'storedKey': "W0t/jpngji+Mffy****",
'serverKey': "sryLTQRiOm9s+EVO1j****"
},
'SCRAM-SHA-256': {
'iterationCount': 15000,
'salt': "scONYL9TYtM0RNKAhzurFxus2sdr****",
'storedKey': "0Byz0qQdafMmaEWhiA304zb9MFOT****",
'serverKey': "1tLLzdk1qmry3zAuVZZZVFZNw0****"
}
},
'roles': [
{
'role': "root",
'db': "admin"
}
]
},
{
'_id': "admin.test",
'userId': BinData(3,"769ea9a1-6224-470e-8162-19a62f****"),
'user': "test",
'db': "admin",
'credentials': {
'SCRAM-SHA-1': {
'iterationCount': 10000,
'salt': "8fyXsIUgs6aQmafh****",
'storedKey': "fJQFoKsl7llXdiU/4v****",
'serverKey': "Tf1zygJ1jti/3/P3UM****"
},
'SCRAM-SHA-256': {
'iterationCount': 15000,
'salt': "wcWRhs9VXEsmNWtd7ZDQinT****",
'storedKey': "A5GiHrQE9/tf70hakRY3U3joho3Grt****",
'serverKey': "ryRAcj6zomYiHJqhA9ObvuYALc3ZZ****"
}
},
'roles': [
{
'role': "readAnyDatabase",
'db': "admin"
}
]
}
查询目标数据库的所有数据库账号
- 方式一:在DMS控制台的账号管理页面查询。
- 在DMS控制台左侧的数据库实例列表中,右键单击目标实例。
- 在弹出的列表中选择账号管理。
- 在账号管理页面的数据库列表中,选择目标数据库。
您可以在该页面查询到用户名、数据库和库权限,并对数据库账号进行编辑和删除操作。
- 方式二:在admin数据库执行查询命令。
- 语法:
db.getCollection("system.users").find({db: "database_name"})
参数说明:
database_name
为目标数据库的名称。 - 示例:
db.getCollection("system.users").find({db: "admin"})
返回结果如下:{ '_id': "admin.root", 'userId': BinData(3,"b079b4c8-0e34-4e0d-90f9-7574141****"), 'user': "root", 'db': "admin", 'credentials': { 'SCRAM-SHA-1': { 'iterationCount': 10000, 'salt': "eCUjsUnIqvfLYbY****", 'storedKey': "W0t/jpngji+Mffy****", 'serverKey': "sryLTQRiOm9s+EVO1j****" }, 'SCRAM-SHA-256': { 'iterationCount': 15000, 'salt': "scONYL9TYtM0RNKAhzurFxus2sdr****", 'storedKey': "0Byz0qQdafMmaEWhiA304zb9MFOT****", 'serverKey': "1tLLzdk1qmry3zAuVZZZVFZNw0****" } }, 'roles': [ { 'role': "root", 'db': "admin" } ] }, { '_id': "admin.test", 'userId': BinData(3,"769ea9a1-6224-470e-8162-19a62f****"), 'user': "test", 'db': "admin", 'credentials': { 'SCRAM-SHA-1': { 'iterationCount': 10000, 'salt': "8fyXsIUgs6aQmafh****", 'storedKey': "fJQFoKsl7llXdiU/4v****", 'serverKey': "Tf1zygJ1jti/3/P3UM****" }, 'SCRAM-SHA-256': { 'iterationCount': 15000, 'salt': "wcWRhs9VXEsmNWtd7ZDQinT****", 'storedKey': "A5GiHrQE9/tf70hakRY3U3joho3Grt****", 'serverKey': "ryRAcj6zomYiHJqhA9ObvuYALc3ZZ****" } }, 'roles': [ { 'role': "readAnyDatabase", 'db': "admin" } ] }
- 语法:
- 方式三:在目标数据库执行查询命令。
返回结果如下:
{ 'users': [ { '_id': "admin.root", 'userId': BinData(3,"b079b4c8-0e34-4e0d-90f9-7574141****"), 'user': "root", 'db': "admin", 'roles': [ { 'role': "root", 'db': "admin" } ], 'mechanisms': [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] }, { '_id': "admin.test", 'userId': BinData(3,"769ea9a1-6224-470e-8162-19a62f****"), 'user': "test", 'db': "admin", 'roles': [ { 'role': "readAnyDatabase", 'db': "admin" } ], 'mechanisms': [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } ], 'ok': 1.0, 'operationTime': Timestamp(1655967385,1), '$clusterTime': { 'clusterTime': Timestamp(1655967385,1), 'signature': { 'hash': BinData(0,"f2gL0FuIITTKp+6Ex+25TFt****"), 'keyId': NumberLong(710604588397****) } } }
查询目标数据库的单个数据库账号
语法:
db.getCollection("system.users").find({user: "user_name", db: "database_name"})
参数说明:
user_name
:数据库账号的名称。database_name
:数据库账号所属的数据库名称。
在admin数据库执行如下命令:
db.getCollection("system.users").find({user: "test", db: "admin"})
返回结果如下:
{
'_id': "admin.test",
'userId': BinData(3,"769ea9a1-6224-470e-8162-19a62f****"),
'user': "test",
'db': "admin",
'credentials': {
'SCRAM-SHA-1': {
'iterationCount': 10000,
'salt': "8fyXsIUgs6aQmafh****",
'storedKey': "fJQFoKsl7llXdiU/4v****",
'serverKey': "Tf1zygJ1jti/3/P3UM****"
},
'SCRAM-SHA-256': {
'iterationCount': 15000,
'salt': "wcWRhs9VXEsmNWtd7ZDQinT****",
'storedKey': "A5GiHrQE9/tf70hakRY3U3joho3Grt****",
'serverKey': "ryRAcj6zomYiHJqhA9ObvuYALc3ZZ****"
}
},
'roles': [
{
'role': "readAnyDatabase",
'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。