【问题标题】:MongoDB create replica set with authentication enabledMongoDB 创建启用身份验证的副本集
【发布时间】:2021-02-09 23:20:33
【问题描述】:

我有一个在 windows 上运行的 monogDB 副本集,我正在尝试向他们添加用户和身份验证。

use admin
db.createUser(
  {
    user: "admin",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ]
  }
);
exit;

mongo --port 27017 -u admin -p password --authenticationDatabase admin
use test
db.createUser(
    {
      user: "tester",
      pwd: "password",
      roles: [
         { role: "read", db: "test1" },
         { role: "read", db: "test2" },
         { role: "read", db: "test3" },
         { role: "readWrite", db: "test" }
      ]
    }
);

创建用户后,我将所有三个副本节点的 cfg 文件修改为授权:启用。重新启动服务并尝试登录服务器。 我可以与用户一起输入,但所有节点都将状态更改为“其他”,如果我将授权更改为未标记(# - 就像它一样),副本集工作正常,但我创建的用户不起作用。

有什么建议吗?

或者有人知道创建启用身份验证的副本集的实际步骤吗?

【问题讨论】:

  • 是的。这些步骤在文档中。
  • 没有找到副本集+认证的步骤sir

标签: mongodb


【解决方案1】:

通常你会反其道而行之。首先启用身份验证,然后创建用户。通常所有用户都只在admin 数据库中创建。

无论如何,关于您的问题:当您启用身份验证时,节点也必须在内部进行身份验证,即当一个副本集成员连接到另一个副本集成员时。

Internal/Membership Authentication

简单的方法是为此使用密钥文件。

首先创建密钥文件:

openssl rand -base64 756 > <path-to-keyfile>

如果您没有 openSSL,您可以从 OpenSSL for Windows 下载它。然后将此密钥文件复制到每个副本集成员。

将此选项添加到 MongoDB 配置文件中:

security:
  authorization: enabled 
  keyFile: <path-to-keyfile>

重启 MongoDB 服务,它应该可以工作了。

另请参阅Deploy Replica Set With Keyfile AuthenticationUpdate Replica Set to Keyfile AuthenticationUpdate Replica Set to Keyfile Authentication (No Downtime)

【讨论】:

  • 好的,这可行,但仍然可以在没有用户和密码的情况下进入实例。副本集正在工作 + 我能够与用户一起进入节点。但我也可以像 mongo --port 27017 甚至远程 mongo --host x.x.x.x 一样进入。如何禁用它?
  • 您可以随时连接而无需密码。但是,您不能执行任何命令(除了db.help() 等无害命令)
  • 是的,你说得对,谢谢!最后一件事,每当副本集从主节点更改为辅助节点时,我尝试从辅助节点执行简单的查找命令,它会一次又一次地要求我执行 rs.secondaryOk(),这正常吗?
  • 您需要连接到副本集,而不是连接到单个节点。见docs.mongodb.com/manual/mongo/#connect-to-a-mongodb-replica-set
  • 哦,所以一旦我的应用程序通过连接字符串而不是直接连接它不会导致问题?顺便说一句,如何在 windows 中生成密钥文件,这个站点无法下载,目前我从 linux 机器生成了一个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 1970-01-01
  • 2020-06-01
  • 2013-10-27
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多