Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过pymongo验证mongodb身份验证的用户名密码?_Python_Mongodb_Authentication - Fatal编程技术网

Python 如何通过pymongo验证mongodb身份验证的用户名密码?

Python 如何通过pymongo验证mongodb身份验证的用户名密码?,python,mongodb,authentication,Python,Mongodb,Authentication,我参考该网站的认证机制示例。我已经创建了一个用户管理员,并使用其凭据为我的“报告”数据库创建了一个用户。现在我需要使用用户名和密码通过pymongo访问相同的内容。我在pythonshell中尝试了以下命令。由于我的身份验证失败,这是正确的方法吗 from pymongo import MongoClient client = MongoClient('localhost') client.reporting.authenticate('reportsUser', '123456', mec

我参考该网站的认证机制示例。我已经创建了一个用户管理员,并使用其凭据为我的“报告”数据库创建了一个用户。现在我需要使用用户名和密码通过pymongo访问相同的内容。我在pythonshell中尝试了以下命令。由于我的身份验证失败,这是正确的方法吗

from pymongo import MongoClient

client = MongoClient('localhost')

client.reporting.authenticate('reportsUser', '123456', mechanism='MONGODB-CR')

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/pymongo/database.py", line 746, in authenticate
    self.connection._cache_credentials(self.name, credentials)
  File "/usr/lib/python2.7/dist-packages/pymongo/mongo_client.py", line 441, in _cache_credentials
    auth.authenticate(credentials, sock_info, self.__simple_command)
  File "/usr/lib/python2.7/dist-packages/pymongo/auth.py", line 214, in authenticate
    auth_func(credentials[1:], sock_info, cmd_func)
  File "/usr/lib/python2.7/dist-packages/pymongo/auth.py", line 194, in _authenticate_mongo_cr
    cmd_func(sock_info, source, query)
  File "/usr/lib/python2.7/dist-packages/pymongo/mongo_client.py", line 607, in __simple_command
    helpers._check_command_response(response, None, msg)
  File "/usr/lib/python2.7/dist-packages/pymongo/helpers.py", line 147, in _check_command_response
    raise OperationFailure(msg % errmsg, code)
pymongo.errors.OperationFailure: command SON([('authenticate', 1), ('user', u'reportsUser'), ('nonce', u'f8158a24f1c61650'), ('key', u'14cea216c54b93bae20acd2e076bb785')]) failed: auth failed
从pymongo导入MongoClient
client=MongoClient('localhost')
client.reporting.authenticate('reportsUser','123456',mechanism='MONGODB-CR')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python2.7/dist packages/pymongo/database.py”,第746行,在“身份验证”中
self.connection.\u缓存\u凭据(self.name、凭据)
文件“/usr/lib/python2.7/dist packages/pymongo/mongo_client.py”,第441行,在缓存中
身份验证(凭证、sock\u信息、self.\u简单\u命令)
文件“/usr/lib/python2.7/dist packages/pymongo/auth.py”,第214行,在authenticate中
身份验证函数(凭据[1:],sock\u info,cmd\u func)
文件“/usr/lib/python2.7/dist packages/pymongo/auth.py”,第194行,在“authenticate\u mongo\u cr”中
cmd_func(sock_信息、源、查询)
文件“/usr/lib/python2.7/dist packages/pymongo/mongo_client.py”,第607行,在简单命令中
帮助程序。\u检查\u命令\u响应(响应,无,消息)
文件“/usr/lib/python2.7/dist packages/pymongo/helpers.py”,第147行,在命令响应中
提升操作失败(消息%errmsg,代码)
pymongo.errors.OperationFailure:命令子([('authenticate',1),('user',u'reportsUser'),('nonce',u'f8158a24f1c61650'),('key',u'14cea216c54b93bae20acd2e076bb785'))失败:身份验证失败

作为参考,您也可以使用URI字符串格式。伪代码如下所示:

pymongo.MongoClient('mongodb://user:password@服务器:端口/')

下面是一个带有auth的简单连接代码块:

import pymongo
conn = pymongo.MongoClient('mongodb://root:pass@localhost:27017/')
db = conn['database']
coll = db['collection']
此处有查询字符串的更多选项:

希望对你有所帮助=看起来你已经有了。快乐编码

这对我有用

在这里,您可以使用身份验证用户名和密码将mongodb连接到python

import pymongo

DATABASE_NAME = "your_database_name"
DATABASE_HOST = "localhost"

DATABASE_USERNAME = "database_username"
DATABASE_PASSWORD = "database_password"

try:
    myclient = pymongo.MongoClient( DATABASE_HOST )
    myclient.test.authenticate( DATABASE_USERNAME , DATABASE_PASSWORD )
    mydb = myclient[DATABASE_NAME]

    print("[+] Database connected!")
except Exception as e:
    print("[+] Database connection error!")
    raise e


默认情况下,Mongodb使用
27017
端口

,只需向提供的解决方案添加更多

我一直使用as-URI连接字符串,并将凭据作为f字符串提供,这有助于减少行数。需要注意的一点是关于密码中的特殊字符,我们使用urllib包进行转换,如下所示

import urllib.parse
from pymongo import MongoClient

host = "localhost"
port = 27017

user_name = "myuser"
pass_word = "Pass@123"  

db_name = "mydb"  # database name to authenticate

# if your password has '@' then you might need to escape hence we are using "urllib.parse.quote_plus()" 
client = MongoClient(f'mongodb://{user_name}:{urllib.parse.quote_plus(pass_word)}@{host}:{port}/{db_name}') 

你添加用户了吗?是否在
--auth
模式下启动mongod?在mongod.conf中启用auth=true并重新启动mongod。还需要什么?将用户添加到数据库报表SUSER是我为报表数据库创建的用户。我需要将其添加到管理员数据库吗?不,管理员数据库用户可以访问所有数据库。您可以在mongo shell中进行身份验证吗?是否可以分两个步骤进行验证,例如,
pymongo.MongoClient(server:port/',ssl=True,ssl\u keyfile=“path to private key”)
,然后,
auth=client.admin.authenticate(mongo\u用户名,mongo\u密码)
?是否可以在URI中不传递用户名和密码的情况下执行此操作?@Shivendra:是的,PyMongo支持在SCRAM-SHA-1模式下进行两步身份验证,如下所述。在我的例子中,uri应该是
mongodb://root:pass@localhost:27017/database
然后通过
db=client.get_database()