本文介绍云数据库 MongoDB 版root账号的权限。
当您创建云数据库 MongoDB 版实例后,系统会自动在admin数据库中创建一个root账号。根据实例版本的不同,root账号的权限策略也有所不同,不同版本的root权限账号策略如下:
4.2版本及以下实例:拥有MongoDB内置的root角色权限。
4.4版本及以上实例:拥有alibabaCloudAdmin角色权限。
重要由于部分场景下写入数据到admin系统库会导致严重的性能抖动,因此alibabaCloudAdmin角色不具备admin库的写入权限,同时也无法创建拥有admin系统库可写权限的账号。
您可以使用rolesInfo
命令查看具体的角色权限。root角色权限和rolesInfo
命令的更多介绍,请分别参见root和rolesInfo。
为了您的数据安全,不建议使用root账号管理数据库,请根据业务需求创建拥有相关权限的数据库账号。具体操作,请参见云数据库MongoDB版上如何创建账号。
您可以执行如下命令可以查看root账号的权限:
db.getSiblingDB("admin").runCommand({usersInfo: "root"});
usersInfo
参数的更多信息,请参见usersInfo。
alibabaCloudAdmin权限
拥有的内置role权限(例如读写集合、账号管理、查看统计等):readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、clusterMonitor、backup、enableSharding、restore。
说明alibabaCloudAdmin只有admin库的读权限。
支持分片集群的相关命令:flushRouterConfig、cleanupOrphaned、runCommandOnShard、splitVector、clearJumboFlag、moveChunk、splitChunk。
常见问题
Q:为什么无法创建含clusterAdmin、clusterManager、hostManager等高权限user或role?
A:alibabaCloudAdmin权限有限,因此在创建自定义user或role时,不能高于root账号现有权限范围。
Q:为什么无法在admin库下创建含readWrite、dbAdmin、dbOwner权限的user或role?
A:alibabaCloudAdmin对于admin库仅有只读权限,无法进行写入,您可以在其他库下创建包含这些内置权限的user或role。
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' } ] } );
如果role和user都创建成功后,在使用cdc的过程中仍然出错,请提交工单联系技术支持协助处理。