MongoDB - admin用户未授权

我正在尝试添加授权到我的MongoDB.
. 我用MongoDB 2.6.1在Linux上做这一切 我的mongo .conf文件是旧的兼容格式
(这就是安装的方式)。< / p >

1)我创建了admin用户,如(3)所述

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

2)然后我通过取消注释这一行来编辑mongo .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用户被授权做任何事情,以便

455307 次浏览

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

所以允许自己读写,你应该没事-

< a href = " http://docs.mongodb.org/manual/reference/built-in-roles/读写" > http://docs.mongodb.org/manual/reference/built-in-roles/读写< / >

我也对同样的问题感到困惑,在添加第一个管理用户时,我将角色设置为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' }])

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

我在Windows环境中遇到了类似的问题:我已经安装了Bitnami DreamFactory,它还安装了另一个MongoDb,在系统引导时启动。我正在运行我的MongoDbService(启动时没有任何错误),但我注意到在浪费了很多时间后,我实际上是在Bitnami的MongoDb服务上连接。请检查一下,如果您的服务器上没有另一个mongoDB实例正在运行。

好运!

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

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

设置完成后重新启动服务使用

Service mongod重启

也许一个关于如何更改当前用户的快速示例将对某些人有所帮助。这就是我要找的东西。

根据@JohnPetrone的建议,我用grantRolesToUser向我的管理用户添加了读写角色

> use admin
> db.grantRolesToUser("admin",["readWrite"])
> show collections
system.users
system.version

此外,请注意,如果你的mongo shell客户端无法正确连接到mongod实例,你会收到这样的“Permission Denied”错误。

确保您的客户端通过检查连接端口来打开连接,但也要确保您在mongod中使用的端口没有被使用。你可以在shell和进程中使用--port <port>参数来设置不同的端口。

您可以尝试:使用——authenticationDatabase标志会有所帮助。

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

我知道这个答案在这篇文章中出现得很晚,但我希望你能看看。

你得到这个错误的原因是基于你授予用户的特定角色,你现在已经收集到这个角色,给用户root角色将解决你的问题,但你必须首先了解这些角色到底是做什么的,然后再授予他们给用户。

在教程中,你授予用户userAdminAnyDatabase角色,基本上赋予用户管理所有数据库用户的能力。 你试图对用户做的事情超出了用户的角色定义

root角色的定义中包含了这个角色,还有readWriteAnyDatabasedbAdminAnyDatabase和其他角色,使其成为超级用户(基本上是因为你可以用它做任何事情)。

您可以检查角色定义,以查看您将需要为您的用户提供哪些角色来完成某些任务。 https://docs.mongodb.com/manual/reference/built-in-roles/ 不建议让你所有的用户都是超级用户:)

这是个简单的问题。

  1. 必须切换目标db admin,这很重要。

使用yourDB

  1. 检查您的db身份验证

显示用户

  1. 如果你得到一个{}空对象,那就是问题。你只需要打字
< p > db.createUser ( { 用户:“对于”, pwd:“密码”, 角色:["readWrite", "dbAdmin"] }) < / p >

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

我有这个问题,因为我的MongoDB指南针中的主机名指向管理员,而不是我的项目。修复了在主机名后面添加/projectname的问题:) 试试这个:< / p >
  1. MongoDB atlas网站中选择你的项目
  2. 连接/连接MongoDB Compass
  3. 下载Compass/选择你的操作系统
  4. 我使用的是Compass 1.12或更高版本
  5. 复制Compass 1.12或更高版本下的连接字符串。
  6. 打开MongoDB Compass/Connect(左上)/Connect To
  7. 检测到连接字符串/是/
  8. 在主机名之后追加项目名:cluster9-foodie.mongodb.net/projectname
  9. 连接,使用POSTMAN测试API。
  10. 成功。

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

    <李>:
    • mongodb + srv: / / projectname:密码@cluster9-foodie.mongodb.net/管理
    • 李< / ul > < / > <李>后:
      • mongodb + srv: / / projectname:密码@cluster9-foodie.mongodb.net/projectname
      • 李< / ul > < / >

祝你好运。

使用mydb
db。createUser({user: "test", pwd: "secret", roles: ["readWrite", "dbAdmin"],passwordDigestor:"server"})

.使用实例

同意你必须获得身份验证到管理db,至少需要一个具有正确权限的角色,以避免来自db的“本地主机异常”(这是mongoDB的托管在本地),尽管你已经一切就绪&在访问使用蒙戈阿特拉斯创建的mongoDB时,仍然在几乎每个命令上获得未授权的异常,那么在这里你可能知道原因,为什么:

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

如果你在蒙戈阿特拉斯上托管了mongoDB,也要检查这个:

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

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"
]
}
)

我在MongoDB 4.2的Centos 7上执行了这些步骤。(远程用户)

更新mongo .conf文件

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

启动MongoDB服务恶魔

systemctl start mongod

打开MongoDB shell

mongo

在shell上执行此命令

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

已创建远端root用户。现在,您可以在开发机器上使用任何MongoDB GUI工具测试这个数据库连接。Like Robo 3T

对于MongoDB shell v4.2.8版本,我已经尝试了不同的方法来备份我的数据库与认证,我的赢家解决方案是

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

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

如果使用Atlas,请注意不能通过mongo shell创建用户。

我一直在用头撞墙,直到我看到了这个: https://www.mongodb.com/community/forums/t/cant-create-a-root-user-from-mongo-shell/101369 < / p >