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