MongoDB - 管理员用户未经授权

pet*_*rov 168 admin mongodb

我正在尝试向MongoDB添加授权.
我正在使用MongoDB 2.6.1在Linux上完成所有这些工作.
我的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" }
Run Code Online (Sandbox Code Playgroud)

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 >>>
Run Code Online (Sandbox Code Playgroud)

问题是什么?我重复了整个过程3次,
我认为我按照MongoDB文档中的规定完成了所有操作.但它不起作用.
我希望这个sa用户有权做任何事情,这样
他就可以创建其他用户并为他们提供更具体的权限.

s-h*_*ter 393

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

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

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

  • WTF?这样一个愚蠢的事情就失去了一个小时.他们为什么要输入文档`userAdminAnyDatabase`而不是`root`? (130认同)
  • 我们的想法是,您首先创建一个仅用于管理其他用户的用户(因此该角色以"userAdmin"开头),然后才创建普通用户.它有点意义,但我也没有第一次得到它... @akostadinov (11认同)
  • 这对我来说对MongoDB v3.4.7不起作用:`db.grantRolesToUser('admin',[{role:"root",db:"admin"}]) (9认同)
  • 我知道上游文档提到了它,如果您正在寻找它,为了进行身份验证,您必须像这样“使用”管理数据库:```use admin;```然后```db。 auth("用户名","密码");```希望这对某人有帮助。 (3认同)
  • @Cerin此代码** DID **对我有用:`db.grantRolesToUser('admin',[{角色:“ root”,db:“ admin”}])),这让我感到困惑。我无权运行命令,但是我可以运行命令以使自己成为root,然后“然后”运行该命令。很奇怪:S (2认同)
  • 对于那些db.grantRolesToUser('admin',[{角色:“ root”,db:“ admin”}]))不起作用的用户,请确保切换回`use admin` ...同样的问题,一旦我切换回去,它就像一个魅力 (2认同)

Joh*_*one 34

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

给自己readWrite,你应该没事 -

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

  • 答案是正确的 - dbadmin和useradmin角色(原始海报询问的内容)不包括readWrite.dbOwner会这样做,但这不是原始海报正在使用和询问的内容. (9认同)
  • 你是绝对正确的.道歉.我花了太长时间的争吵角色,并且糊涂了. (3认同)

Bar*_*t C 30

也许一个如何更改当前用户的快速示例将对某人有所帮助.这就是我真正想要的.

继@JohnPetrone的意见,我加入读写角色与我的管理员用户grantRolesToUser

> use admin
> db.grantRolesToUser("admin",["readWrite"])
> show collections
system.users
system.version
Run Code Online (Sandbox Code Playgroud)

  • 执行此操作时,我收到“错误:管理员未授权执行命令” (8认同)

jre*_*emi 22

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

mongo --port 27017 -u "admin" -p "password" --authenticationDatabase "admin"
Run Code Online (Sandbox Code Playgroud)


小智 8

这是一个简单的问题。

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

使用你的数据库

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

显示用户

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

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

或者

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


小智 7

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

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

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

root角色拥有这个角色包含在它的定义还有readWriteAnyDatabase,dbAdminAnyDatabase和其他角色使其成为一个超级用户(主要是因为你可以用它做任何事情).

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