Python 2.7.15 MongoDb身份验证失败

时间:2018-06-18 17:38:09

标签: python mongodb

我最近在Ubuntu 16.04上设置了MongoDb服务器。我跟着this guide

我成功地设法绑定了服务器的IP,并允许ufw规则给我试图连接到MongoDb端口的主机,所以我假设一切都在那里工作。

问题是我现在正在尝试使用我创建的用户进行连接。这是我使用的代码:

Con = MongoClient('mongodb://IP.OF.SERVER:27017/')
db = Con.playerDb.authenticate('USER','PASSWORD')

但是我收到以下错误:

Traceback (most recent call last):
File "C:\Users\AC\Documents\AC\Servers\tests.py", line 5, in <module>
db = Con.playerDb.authenticate('USERNAME','PASSWORD')
File "C:\Python27\lib\site-packages\pymongo\database.py", line 995, in authenticate
connect=True)
File "C:\Python27\lib\site-packages\pymongo\mongo_client.py", line 410, in _cache_credentials
sock_info.authenticate(credentials)
File "C:\Python27\lib\site-packages\pymongo\pool.py", line 304, in authenticate
auth.authenticate(credentials, self)
File "C:\Python27\lib\site-packages\pymongo\auth.py", line 436, in authenticate
auth_func(credentials, sock_info)
File "C:\Python27\lib\site-packages\pymongo\auth.py", line 416, in _authenticate_default
return _authenticate_scram_sha1(credentials, sock_info)
File "C:\Python27\lib\site-packages\pymongo\auth.py", line 188, in _authenticate_scram_sha1
res = sock_info.command(source, cmd)
File "C:\Python27\lib\site-packages\pymongo\pool.py", line 201, in command
check_keys, self.listeners, self.max_bson_size)
File "C:\Python27\lib\site-packages\pymongo\network.py", line 94, in command
helpers._check_command_response(response_doc, msg, allowable_errors)
File "C:\Python27\lib\site-packages\pymongo\helpers.py", line 193, in _check_command_response
raise OperationFailure(msg % errmsg, code, response)
OperationFailure: command SON([('saslStart', 1), ('mechanism', 'SCRAM-SHA-1'), ('payload', Binary('n,,n=USERNAME,r=PASSWORD', 0)), ('autoAuthorize', 1)]) on namespace playerDb.$cmd failed: Authentication failed.

我已经尝试了一些其他建议,例如添加以下内容:

mechanism = 'SCRAM-SHA-1'

我也尝试过其他人建议的MongoClient()的不同变体,但说实话我不知道究竟是什么问题。我只创建了一个管理员用户,绑定了服务器的IP,因此它会监听并设置一些ufw规则,所以如果我没有通过正确的用户+传递,就不能确定验证失败的原因。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

没关系,我最终设法解决了这个问题。实际上,我没有为新数据库创建具有正确角色的正确数据库,集合和用户。我使用的Python代码在帖子中实际上是正确的。

在启用身份验证之前,我需要在Ubuntu服务器上执行的操作是创建数据库,然后创建用户,如下所示:

使用playerdb db.createUser( { 用户:“用户名”, PWD: “密码”, 角色:[{role:“readWrite”,db:“playerdb”}] } )

然后当我启用身份验证并重新启动mongod时,使用上面的Python代码连接起作用。

多少学习经历。