实例创建时指定的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权限

常见问题

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

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

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

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

  • Q:如何创建一个对所有自定义集合都有读写等权限的user?

    A:您可以在admin库下创建包含readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase的账号。命令如下:

    db.getSiblingDB("admin").createUser({user:"myName",pwd:"myPassword",roles:["readWriteAnyDatabase"]})
  • Q:clusterManager包含了很多分片集群运维相关命令的权限,不能创建的话如何使用?

    A: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"]})
  • Q:使用flink-sql-connector-mongodb-cdc时,为什么按照示例创建role返回结果显示没权限?

    A:listDatabases动作是针对整个集群的,需要放在Cluster Resource中执行,您可以先改用如下命令来创建自定义role。

    db.createRole(
        {
            role: "flinkrole",
            privileges: [
            {
                resource: { db: "", collection: "" },
                actions: [
                    "splitVector",
                    "listDatabases",
                    "listCollections",
                    "collStats",
                    "find",
                    "changeStream" ]
            },
            {
                resource: { "cluster": true }, 
                actions: [ "listDatabases" ]
            }
            ],
            roles: [
                { role: 'read', db: 'config' }
            ]
        }
    );

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