为什么copyDatabase命令在“dbAdminAnyDatabase'”时仍然提供未授权的错误消息?

时间:2015-12-29 05:54:29

标签: mongodb

版本是mongo 2.6。

我创建了一个用户角色" dbAdminAnyDatabase"。但是当copyDatabase仍然提供错误消息时。

mongos> db.createUser({user:"hant",pwd:"abc",roles:["readWriteAnyDatabase","dbAdminAnyDatabase"]});
Successfully added user: {
    "user" : "hant",
    "roles" : [
        "readWriteAnyDatabase",
        "dbAdminAnyDatabase"
    ]
}

mongos> use admin;
switched to db admin
mongos> db.auth("hant","abc");
1
mongos>  db.copyDatabase("wlib007","wlib003");
{
    "errmsg" : "exception: nextSafe(): { $err: \"not authorized for query on wlib007.system.namespaces\", code: 13 }",
    "code" : 13106,
    "ok" : 0
}

但是在检查wlib007.system.namespaces.find时,

mongos> db.system.namespaces.find();
{ "name" : "admin.system.version" }
{ "name" : "admin.system.indexes" }
{ "name" : "admin.system.version.$_id_" }
{ "name" : "admin.system.users" }
{ "name" : "admin.system.users.$_id_" }
{ "name" : "admin.system.users.$user_1_db_1" }
{ "name" : "admin.system.profile", "options" : { "capped" : true, "size" : 1048576 } }

为什么dbAdminAnyDatabase角色不适用于copyDatabase

2 个答案:

答案 0 :(得分:0)

以下是描述mongo角色的官方文档: https://docs.mongodb.org/manual/reference/built-in-roles/

遵守规则," dbAdmin"没有读/写权限。您可以通过mongodb的客户进行角色测试,例如Mongochef。

答案 1 :(得分:0)

如您所写:

mongos> db.auth("hant","abc");
db.copyDatabase("wlib007","wlib003");
  

{“ errmsg”:“例外:nextSafe():{$ err:\”未经授权查询   在wlib007.system.namespaces \“上,代码:13}”,“ code”:13106,   “ ok”:0}

您想要的

  

使用wlib003

创建用户请求并授予那些 DB(“ wlib007”,“ wlib003”)身份验证;

如下。

这是一个简单的问题。

  1. 重要的是,您必须切换目标数据库 NOT 管理员。
  

使用yourDB

  1. 通过

  2. 检查您的数据库身份验证
  3. 显示用户

如果您得到一个{}空对象,那就是问题。您只需要输入

db.createUser(
    {
      user: "yourUser",
      pwd: "password",
      roles: [ "readWrite", "dbAdmin" ]
    } )

db.grantRolesToUser('yourUser',[{ role: "dbAdmin", db: "yourDB" }])