MongoDB - 管理员用户未经授权

时间:2014-05-29 21:54:10

标签: mongodb admin

我正在尝试为MongoDB添加授权 我在Linux上用MongoDB 2.6.1做这一切 我的mongod.conf文件采用旧兼容格式
(这就是它的安装方式)。

1)我创建了管理员用户,如(3)

中所述

http://docs.mongodb.org/manual/tutorial/add-user-administrator/

2)然后我通过取消注释这一行来编辑mongod.conf

auth = true

3)最后我重新启动了mongod服务,我尝试使用以下命令登录:

/usr/bin/mongo localhost:27017/admin -u sa -p pwd

4)我可以连接,但它在连接时说明了。

MongoDB shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB shell!
The current date/time is: Thu May 29 2014 17:47:16 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }

5)现在看来我创建的sa用户根本没有权限。

root@test02:~# mc
MongoDB shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB shell!
The current date/time is: Thu May 29 2014 17:57:03 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
[admin] 2014-05-29 17:57:03.011 >>> use admin
switched to db admin
[admin] 2014-05-29 17:57:07.889 >>> show collections
2014-05-29T17:57:10.377-0400 error: {
        "$err" : "not authorized for query on admin.system.namespaces",
        "code" : 13
} at src/mongo/shell/query.js:131
[admin] 2014-05-29 17:57:10.378 >>> use test
switched to db test
[test] 2014-05-29 17:57:13.466 >>> show collections
2014-05-29T17:57:15.930-0400 error: {
        "$err" : "not authorized for query on test.system.namespaces",
        "code" : 13
} at src/mongo/shell/query.js:131
[test] 2014-05-29 17:57:15.931 >>>

有什么问题?我重复了整个过程3次和 我想我是按照MongoDB文档中的规定完成的。但它不起作用。
我期待这个sa用户被授权做任何事情以便这样做 然后,他可以创建其他用户并为他们提供更多特定权限。

17 个答案:

答案 0 :(得分:348)

我也在同样的问题上摸不着头脑,在添加第一个管理员用户后,我将角色设置为root后,一切正常。

use admin
db.createUser(
  {
    user: 'admin',
    pwd: 'password',
    roles: [ { role: 'root', db: 'admin' } ]
  }
);
exit;

如果您已经创建了admin用户,则可以更改此角色:

use admin;
db.grantRolesToUser('admin', [{ role: 'root', db: 'admin' }])

有关完整的身份验证设置参考,请参阅我在互联网上研究数小时后编译的steps

答案 1 :(得分:32)

这有点令人困惑 - 我相信你需要给自己readWrite来查询数据库。具有dbadmin或useradmin的用户可以管理数据库(包括授予您自己的其他权限),但无法执行查询或写入数据。

所以给自己readWrite,你应该没事 -

http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite

答案 2 :(得分:30)

也许一个关于如何更改当前用户的简单示例对某人有帮助。这就是我真正想要的。

根据@JohnPetrone的建议,我使用readWrite

向我的管理员用户添加了grantRolesToUser个角色
> use admin
> db.grantRolesToUser("admin",["readWrite"])
> show collections
system.users
system.version

答案 3 :(得分:20)

您可以尝试:使用--authenticationDatabase标志帮助。

mongo --port 27017 -u "admin" -p "password" --authenticationDatabase "admin"

答案 4 :(得分:7)

我知道这个问题的答案在这个帖子中已经很晚了,但我希望你能看出来。

您收到该错误的原因是基于您授予用户的特定角色,您现在已经收集了该角色,是的,为该用户提供角色root将解决您的问题,但您必须先了解在将这些角色授予用户之前,这些角色的作用是什么。

在教程中,您向用户授予了userAdminAnyDatabase角色,该角色基本上使用户能够管理所有数据库的用户。 您尝试对用户执行的操作超出了其角色定义。

root角色将此角色包含在其定义中,以及readWriteAnyDatabasedbAdminAnyDatabase和其他角色,使其成为超级用户(主要是因为您可以对其执行任何操作)。

您可以查看角色定义,了解为用户完成某些任务所需的角色。 https://docs.mongodb.com/manual/reference/built-in-roles/ 不建议所有用户使用超级用户:)

答案 5 :(得分:1)

我遇到了一个类似的问题,但是我的问题是我使用了集合名称而不是数据库名称。

答案 6 :(得分:0)

此外,请注意,如果您的mongo shell客户端无法正确连接到mongod实例,则可以收到此类" Permission Denied"错误。

确保客户端通过检查连接端口打开连接,并确保您在mongod中使用的端口未使用。您可以在shell和进程中使用--port <port>参数设置不同的端口。

答案 7 :(得分:0)

这是一个简单的问题。

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

使用yourDB

  1. 通过
  2. 检查您的数据库身份验证
  

显示用户

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

db.createUser(       {         用户:“ yourUser”,         pwd:“密码”,         角色:[“ readWrite”,“ dbAdmin”]       })

  

db.grantRolesToUser('yourUser',[{角色:“ dbAdmin”,db:“ yourDB”}])

答案 8 :(得分:0)

我遇到了这个问题,因为 MongoDB Compass 中的主机名指向我的项目的管理员。通过在主机名后面添加/ projectname来修复: 试试这个:

  1. MongoDB atlas website
  2. 中选择项目
  3. 连接/连接MongoDB Compass
  4. 下载指南针/选择操作系统
  5. 我使用了Compass 1.12或更高版本
  6. 在Compass 1.12或更高版本下复制连接字符串。
  7. 打开MongoDB指南针/连接(左上)/连接到
  8. 检测到连接字符串/是/
  9. 在主机名后追加项目名称:cluster9-foodie.mongodb.net/ 项目名
  10. 使用POSTMAN连接并测试API。
  11. 成功。

在代码中也使用相同的连接字符串:

  1. 之前:
    • mongodb + srv:// 项目名称:密码 @ cluster9-foodie.mongodb.net / 管理员
  2. 之后:
    • mongodb + srv:// 项目名称:密码 @ cluster9-foodie.mongodb.net / 项目名称

祝你好运。

答案 9 :(得分:0)

  

使用mydb
  db.createUser({user:“ test”,pwd:“ secret”,角色:[“ readWrite”,“ dbAdmin”],passwordDigestor:“ server”})

答案 10 :(得分:0)

我有相同的案例问题,在我的案例中,这是由变量 mongodb_security_authorization 引起的,该变量设置为“已启用” 基本上,我通过对此进行了更改来解决此问题:

mongodb_security_authorization: "enabled"

对此:

mongodb_security_authorization: "disabled"

答案 11 :(得分:0)

同意您必须通过admin db身份验证,并且至少需要具有正确特权的角色,这样可以避免DB出现“本地主机异常”(这是mongoDB本地托管的),尽管您拥有所有权限在访问使用 Mongo Atlas 创建的mongoDB的同时,几乎在每个命令上都放置&仍未获得未经授权的异常,然后在这里您可能会知道原因:

https://dba.stackexchange.com/questions/219003/not-authorized-on-admin-to-execute-command-mongodb-atlas-m0-free-tier-cluster?newreg=471a9a26108243d78d4ca74a87e7a115

,如果您已将mongoDB托管在 mongo Atlas 上,也请进行以下检查:

https://docs.atlas.mongodb.com/unsupported-commands/

答案 12 :(得分:0)

Use Admin :
    use admin

Create a super user : 

    db.createUser(
    {
    user: "master",
    pwd: "test@123",
    roles: [ 
    { 
    role: "readWriteAnyDatabase", 
    db: "admin" 
    }, 
    {
    "role" : "dbAdminAnyDatabase",
    "db" : "admin"
    },
    {
    "role" : "clusterAdmin",
    "db" : "admin"
    },
    "userAdminAnyDatabase" 
    ]
    }
    )

答案 13 :(得分:0)

我在Centos 7上针对MongoDB 4.2遵循了这些步骤。 (远程用户)

更新mongod.conf文件

vi /etc/mongod.conf
   net:
     port: 27017
     bindIp: 0.0.0.0 
   security:
     authorization: enabled

启动MongoDB服务守护程序

systemctl start mongod

打开MongoDB shell

mongo

在外壳上执行此命令

use admin
db.createUser(
  {
    user: 'admin',
    pwd: 'YouPassforUser',
    roles: [ { role: 'root', db: 'admin' } ]
  }
);

已创建远程root用户。现在,您可以使用开发人员机器上的任何MongoDB GUI工具来测试此数据库连接。像Robo 3T

答案 14 :(得分:0)

对于 MongoDB shell v4.2.8版本,我尝试了多种方法来使用auth备份数据库,我的赢家解决方案是

mongodump -h <your_hostname> -d <your_db_name> -u <your_db_username> -p <your_db_password> --authenticationDatabase admin -o /path/to/where/i/want

答案 15 :(得分:0)

我在Windows环境中遇到了类似的问题:我安装了Bitnami DreamFactory,它还安装了另一个在系统启动时启动的MongoDb。我正在运行我的MongoDbService(启动时没有任何错误),但我注意到在失去了很多时间之后我实际连接了Bitnami的MongoDb服务。请查看服务器上是否没有运行mongoDB的其他实例。

祝你好运!

答案 16 :(得分:-7)

这可能是因为你没有在mongodb.conf中设置noAuth = true

# Turn on/off security.  Off is currently the default
noauth = true
#auth = true

设置完成后,使用

重新启动服务

service mongod restart