gpt4 book ai didi

Mongodb 找不到用户 "user@database"

转载 作者:行者123 更新时间:2023-12-05 08:14:18 25 4
gpt4 key购买 nike

我正在尝试允许 mongo 用户连接到 mongo 数据库,但无论我为用户提供什么角色,身份验证都会失败,并在日志中显示此错误:

2019-08-09T17:03:05.486+0000 I ACCESS   [conn13] SCRAM-SHA-1 authentication failed for username on dbname from client 127.0.0.1:38790 ; UserNotFound: Could not find user username@dbname
2019-08-09T17:03:05.488+0000 I NETWORK [conn13] end connection 127.0.0.1:38790 (0 connections now open)

这里是/etc/mongodb.conf的内容

# mongodb.conf

# Where to store the data.
dbpath=/var/lib/mongodb

#where to log
logpath=/var/log/mongodb/mongodb.log

logappend=true

bind_ip = 0.0.0.0
port = 27017

# Enable journaling, http://www.mongodb.org/display/DOCS/Journaling
journal=true

auth=true

这是我创建用户的方式:

db.createUser({
user: "username",
pwd: "secret",
roles: [
{ role: "userAdmin", db: "dbname" },
{ role: "dbAdmin", db: "dbname" },
{ role: "readWrite", db: "dbname" }
]
});

我还向数据库dbname 上的用户授予了dbOwner 角色。这里发生了什么?如果用户是所有者并具有读/写权限,为什么我无法连接到数据库?我是否必须创建名为 username@dbname 的用户?

编辑:刚刚尝试添加用户名为 username@dbname 的用户,但该用户也无法连接。

我还可以使用相同的命令连接到 mongo,在末尾去掉 /dbname,然后运行 ​​use dbname。我不知道为什么这行得通,但直接连接不行。

最佳答案

问题是数据库用户是在 admin 数据库而不是 dbname 上创建的。

从连接字符串/mongo shell 等中省略 /dbname 意味着连接字符串将向 admin 数据库进行身份验证。引用文档:

If '/database' is not specified and the connection string includes credentials, the driver will authenticate to the admin database

(https://docs.mongodb.com/manual/reference/connection-string/#components)。

如果定义了 /dbname,那么连接字符串将针对 dbname 进行身份验证,除非 authSource参数配置为指定用户所在的数据库。

您可以通过将 authSource=admin 添加到连接字符串或将 --authenticationDatabase admin 添加到 mongo shell command 来确认是否属于这种情况。 .

或者,您可以使用 db.getUsers() 查看创建用户的数据库。

关于Mongodb 找不到用户 "user@database",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57434521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com