db.serverStatus()返回"未授权执行命令"在mlab上拥有所有者权限

时间:2017-11-19 22:18:18

标签: mongodb

我最近开了一个免费的mLab帐户,我试图通过shell访问我数据库中的打开连接数。

当我在本地运行mongodb时,我从未遇到过命令行问题,但现在没有任何作用。

连接我这样做:

mongo ds127044.mlab.com:27044/db_name -u db_user -p db_password

它显示我已成功连接。

之后我跑:

db.serverStatus()

得到:

{
    "ok" : 0,
    "errmsg" : "not authorized on admin to execute command { serverStatus: 1.0 }",
    "code" : 13,
    "codeName" : "Unauthorized"
}

但根据我的控制台,我被列为db的所有者:

{
"_id": "db_name.db_user",
"user": "db_user",
"db": "db_name",
"roles": [
    {
        "role": "dbOwner",
        "db": "db_name"
    }
  ]
}

我是否在命令行中出错了,或者我的帐户是否与mLab有关?

3 个答案:

答案 0 :(得分:0)

似乎与您的用户角色相关。

此处的所有文档:https://docs.mongodb.com/manual/reference/built-in-roles/#cluster-admin-roles/(特别是cluesterMonitor信息)

说:

  

...管理数据库包括以下用于管理的角色   整个系统,而不仅仅是一个数据库...

并在此文档中https://docs.mongodb.com/manual/core/security-built-in-roles/

说:

  

每个数据库都包括:数据库管理角色 ...   admin数据库包括以下用于管理的角色   整个系统:群集管理角色

' serverStatus '适用于 clusterMonitor 角色,所以......

尝试改变它:

roles: [ { role: "clusterMonitor", db: "admin" },
         { role: "dbOwner", db: "db_name" }]
祝你好运!

答案 1 :(得分:0)

我通过更改我的mac设置以允许远程登录来解决这个问题。

系统偏好设置 - >分享 - >远程登录:开启

答案 2 :(得分:0)

不是mongodb专家,但这是我在文档中找到的。

db.serverStatus()在其输出中共享实例信息。例如:

  

主机

     
    

系统的主机名。在Unix / Linux系统中,这应该与hostname命令的输出相同。

  

mLab不会向最终用户公开主机信息,最终用户只能访问他们正在创建的数据库,特别是您登录的数据库。

类似地,您将遇到诸如show dbs之类的其他调用的问题,因为这将暴露与您自己的数据库一起存在的所有数据库(包括其他用户的数据库!)。

我想唯一可以使用的命令就是那些只公开与您的数据库完全相关的信息的命令。我建议,如有必要,也许可以在一个单独的问题中找到该出口清单的更多mongodb管理员。