实例创建时指定的root账号拥有什么权限?

本文介绍云数据库 MongoDB 版root账号的权限。

当您创建云数据库 MongoDB 版实例后,系统会自动在admin数据库中创建一个root账号。根据实例版本的不同,root账号的权限策略也有所不同,不同版本的root权限账号策略如下:

  • 4.2版本及以下实例:拥有MongoDB内置的root角色权限。

  • 4.4版本及以上实例:拥有alibabaCloudAdmin角色权限。

    重要

    由于部分场景下写入数据到admin系统库会导致严重的性能抖动,因此alibabaCloudAdmin角色不具备admin库的写入权限,同时也无法创建拥有admin系统库可写权限的账号。

您可以使用rolesInfo命令查看具体的角色权限。root角色权限和rolesInfo命令的更多介绍,请分别参见rootrolesInfo

重要

为了您的数据安全,不建议使用root账号管理数据库,请根据业务需求创建拥有相关权限的数据库账号。具体操作,请参见云数据库MongoDB版上如何创建账号

您可以执行如下命令查看root账号的权限:

db.getSiblingDB("admin").runCommand({usersInfo: "root"});
说明

usersInfo参数的更多信息,请参见usersInfo

alibabaCloudAdmin权限

常见问题

为什么无法创建含clusterAdmin、clusterManager、hostManager等高权限userrole?

alibabaCloudAdmin权限有限,因此在创建自定义userrole时,不能高于root账号现有权限范围。

为什么无法在admin库下创建含readWrite、dbAdmin、dbOwner权限的userrole?

alibabaCloudAdmin对于admin库仅有只读权限,无法进行写入,您可以在其他库下创建包含这些内置权限的userrole。

如何创建一个对所有自定义集合都有读写等权限的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的权限和官方行为存在差异,除了不包含configlocal库外,还不包含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' }
        ]
    }
);

如果roleuser都创建成功后,在使用cdc的过程中仍然出错,请提交工单联系技术支持协助处理。