我已经接管了未记录的 Mongo 4.4.8 集群(PSA)。我正在努力整理它并彻底测试。
\n原始连接字符串:
\nMONGODB_URI=mongodb://${USER}:${PASS}@10.0.0.3:27017,10.0.0.6:27017,10.0.0.2:27017/bud?replicaSet=bud-replica&authSource=admin\nRun Code Online (Sandbox Code Playgroud)\n我已启用本地主机和套接字连接。我可以从 cmdline 登录
\nmongo -u ${USER} -p ${PASS}\nMongoDB shell version v4.4.8\nconnecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb\nImplicit session: session { "id" : UUID("492e331b-417e-458a-83c7-9db6eaae0869") }\nMongoDB server version: 4.4.8\nRun Code Online (Sandbox Code Playgroud)\n我可以将 db 切换到bud并执行查询。但如果我只是跑
\nmongo\nRun Code Online (Sandbox Code Playgroud)\n那么使用相同凭据的身份验证将不起作用:
\nbud-replica:PRIMARY> db.auth('admin','admin');\nError: Authentication failed.\n0\nRun Code Online (Sandbox Code Playgroud)\n我尝试搜索用户,但显示没有:
\nbud-replica:PRIMARY> db.getUsers()\n[ ]\nbud-replica:PRIMARY> use bud\nswitched to db bud\nbud-replica:PRIMARY> db.getUsers()\n[ ]\nRun Code Online (Sandbox Code Playgroud)\n这是mongod.conf安全部分:
security:\n authorization: enabled\n keyFile: "/etc/bud-rs"\nRun Code Online (Sandbox Code Playgroud)\n最后我需要在做实验之前导出数据。尽管命令行界面看起来相似,但 mongoexport 无法获取数据,无论我设置用户/密码还是跳过这些参数。
\nmongoexport -h localhost --db=bud -u ${USER} -p ${PASS} -c=accidents --jsonArray > accidents.json\n2021-08-25T19:30:30.631+0200 could not connect to server: connection() error occured during connection handshake: auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-1": (AuthenticationFailed) Authentication failed.\nmongoexport -h localhost --db=bud -u ${USER} -p ${PASS} -c=accidents --jsonArray --authenticationDatabase \xe2\x80\x9cadmin\xe2\x80\x9d > accidents.json\n2021-08-25T19:36:18.738+0200 could not connect to server: connection() error occured during connection handshake: auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-1": (AuthenticationFailed) Authentication failed.\nroot@10:~# mongoexport -h localhost --db=bud -u ${USER} -p ${PASS} -c=accidents --jsonArray --authenticationDatabase \xe2\x80\x9cbud\xe2\x80\x9d > accidents.json\n2021-08-25T19:38:21.174+0200 could not connect to server: connection() error occured during connection handshake: auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-1": (AuthenticationFailed) Authentication failed.\nRun Code Online (Sandbox Code Playgroud)\n我真的很困惑,我没能在 Google 或 SO 上找到解决方案。
\n第二个相关问题:
\n如果我需要创建新用户,我应该在所有副本上创建还是自动同步?
\n第一次更新
\n这是解决方法,但我的问题仍然有效。我想明白。
\nroot@10:~# mongoexport --db=bud -u ${USER} -p ${PASS} -c=accidents --jsonArray "mongodb://admin:admin@10.0.0.3:27017/bud?authSource=admin" > accidents.json\n2021-08-25T20:46:54.777+0200 connected to: mongodb://[**REDACTED**]@10.0.0.3:27017/bud?authSource=admin\n2021-08-25T20:46:55.778+0200 [........................] bud.accidents 0/4379 (0.0%)\n2021-08-25T20:46:56.497+0200 [########################] bud.accidents 4379/4379 (100.0%)\n2021-08-25T20:46:56.497+0200 exported 4379 records\nRun Code Online (Sandbox Code Playgroud)\n第二次更新
\nbud-replica:PRIMARY> use admin\nbud-replica:PRIMARY> show collections\nsystem.keys\nsystem.users\nsystem.version\nbud-replica:PRIMARY> db.system.users.find()\n{ "_id" : "admin.admin", "userId" : UUID("769e4f5c-6f46-4153-857e-47d7d8730066"), "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "32/AP4019eome36j8n\nRun Code Online (Sandbox Code Playgroud)\n
Joe*_*Joe 82
用户凭证是在管理数据库中创建的。
use admin与mongo shell连接时,运行前切换db.auth
authSource=admin在连接字符串中使用的 mongoexport 命令有效。
添加--authenticationDatabase=admin到另一个命令行以指示它也使用管理数据库进行身份验证。
小智 14
下面的整个示例命令对我有用。
Mongodb 版本:5.xx,也适用于 Mongodb 版本:8.xx
mongodump --authenticationDatabase=admin --uri mongodb://username:password@mongodb-host/db-name?ssl=false&authSource=admin
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55218 次 |
| 最近记录: |