当您创建云数据库 MongoDB 版实例后,系统会自动在admin数据库中创建一个root账号。根据实例版本的不同,root账号的权限策略也有所不同,不同版本的root权限账号策略如下:
您可以使用rolesInfo
命令查看具体的角色权限。root角色权限和rolesInfo
命令的更多介绍,请分别参见root和rolesInfo。
您可以执行如下命令查看root账号的权限:
db.getSiblingDB("admin").runCommand({usersInfo: "root"});
常见问题
为什么无法创建含clusterAdmin、clusterManager、hostManager等高权限user或role?
alibabaCloudAdmin权限有限,因此在创建自定义user或role时,不能高于root账号现有权限范围。
为什么无法在admin库下创建含readWrite、dbAdmin、dbOwner权限的user或role?
alibabaCloudAdmin对于admin库仅有只读权限,无法进行写入,您可以在其他库下创建包含这些内置权限的user或role。
如何创建一个对所有自定义集合都有读写等权限的user?
您可以在admin库下创建包含readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase的账号。命令如下:
db.getSiblingDB("admin").createUser({user:"myName",pwd:"myPassword",roles:["readWriteAnyDatabase"]})
clusterManager包含了很多分片集群运维相关命令的权限,不能创建的话如何使用?
alibabaCloudAdmin权限的root账号本身自带一些分片集群运维相关命令的权限,您可以使用root账号来进行这些操作。
如果您想创建一个自定义账号来执行运维命令,可以使用以下方式来创建user。此处以创建支持splitVector命令的user为例:
db.runCommand({createRole:'myRole',privileges:[{"resource":{"db":"","collection":""},"actions":['splitVector']}],roles:['readAnyDatabase']})
db.getSiblingDB("admin").createUser({user:"myUser",pwd:"myPassword",roles:["myRole"]})
为什么我自定义创建的新账号在admin库下使用change stream时报错无权限使用aggregate?
您首先需要确保新建的自定义账号拥有其他数据库的读权限(即readAnyDatabase权限),然后需要单独为自定义账号在admin库下添加read权限。
假设自定义账号为myUser
,授权命令示例如下:
db.adminCommand({ grantRolesToUser: "myUser", roles: [{ role: "read", db: "admin"}]})
这是因为是云数据库MongoDB内置的xxxAnyDatabase
的权限和官方行为存在差异,除了不包含config和local库外,还不包含admin库,因此,您需要单独添加admin库的读权限。
使用flink-sql-connector-mongodb-cdc时,为什么按照示例创建role返回结果显示没有权限?
listDatabases动作是针对整个集群的,需要放在Cluster Resource中执行,您可以先改用如下命令来创建自定义role。
db.createRole(
{
role: "flinkrole",
privileges: [
{
resource: { db: "", collection: "" },
actions: [
"splitVector",
"listCollections",
"collStats",
"find",
"changeStream" ]
},
{
resource: { "cluster": true },
actions: [ "listDatabases" ]
}
],
roles: [
{ role: 'read', db: 'config' }
]
}
);
如果role和user都创建成功后,在使用cdc的过程中仍然出错,请提交工单联系技术支持协助处理。