如何为副本集启动身份验证 - MongoDB

irm*_*eza 8 mongodb

没有身份验证的副本集.我想第一次创建它的身份验证.

我做如下:

1- create [administrator user][1]
2- restarting all member with option `auth=true`
3- login as aadministrator to one member of replica set
4- trying to create user "db.addUser(...)"
Run Code Online (Sandbox Code Playgroud)

但是当我想创建用户时,它会抛出异常 couldn't add user: not master at src/mongo/shell/db.js:128

我该怎么办?是否可以在现有副本集中启动安全性或者我应该在设置身份验证后删除副本集并重建它.

小智 5

如果副本集已存在,则需要找到主节点,添加具有“root”角色的用户,并为每个数据库添加具有 admin/writeAndRead/read 角色的用户,和/或为所有数据库添加管理员用户。

use admin

db.createUser({ user: "rootUser", pwd: "rootPass", roles: [ { role: "root", db: "admin" } ] })

db.createUser({ user: "admin", pwd: "adminPass", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })

use otherDb

db.createUser({ user: "rwUser", pwd: "rwUserPass", roles: [{ role: "readWrite", db: "otherDb" }] })
Run Code Online (Sandbox Code Playgroud)

等待同步所有副本节点。在每个 mongod.conf 文件上设置 auth=yes (这将强制每个客户端使用用户名/密码)。

如果您想要(不是必需)添加 keyFile 以在所有副本集之间强制执行额外的安全步骤,您可以创建此文件,在每个节点之间复制并在每个 mongod.conf 文件内启用 keyFile 选项,但这只是强制副本集节点知道它们之间的秘密并开始交谈,而不是针对客户端应用程序。

最后重启主节点等待新的主选举,并继续重启副本集中的所有节点。

用于创建密钥文件的几个有用链接http://docs.mongodb.org/v2.6/tutorial/deploy-replica-set-with-auth/#create-the-key-file-to-be-used- by-each-member-of-the-replica-set 以及 mongodb v2.6 版本的更多详细信息 http://docs.mongodb.org/v2.6/tutorial/deploy-replica-set-with-auth/#创建由副本集的每个成员使用的密钥文件


小智 2

由于您正在配置副本集,我相信您需要使用 keyFile 选项而不是 auth=Yes。一旦启用身份验证,这将允许副本集中的节点相互通信。

检查这个文档。 http://docs.mongodb.org/manual/tutorial/enable-authentication