验证 mongodb 副本集
Authenticate mongodb replica set
我有 4 个 mongodb 运行ning(副本集)实例,每个实例都有以下 mongodb.conf
文件:
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /root/mongodata/log/mongod.log
# Where and how to store data.
storage:
dbPath: /root/mongodata/db1 # also have db2 and so on for rest of the instances
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /root/mongodata/db1/mongod.pid # location of pidfile, different for 4 instances
# network interfaces
net:
port: 30000 #port different for 4 different instances
bindIp: 12.123.321.432(example ip, same for all 4 .conf files)
# security
security:
KeyFile: /path to my keyfile location
# authorization: enabled
#operationProfiling:
replication:
replSetName: testReplica #have this same for all 4
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
我还创建了一个用于内部身份验证的密钥文件,如下所示:
openssl rand -base64 756 > <path-to-keyfile>
chmod 400 <path-to-keyfile>
所有实例都运行ning后我打开mongoShell如下:
mongo --host 12.123.321.432 --port 30000
我可以打开 shell 但是当我尝试创建用户时,出现以下异常:
2016-12-22T20:55:38.396-0500 E QUERY [thread1] Error: couldn't add user: not authorized on test to execute command { createUser: "root", pwd: "xxx", roles: [ { role: "root", db: "admin" } ], digestPassword: false, writeConcern: { w: "majority", wtimeout: 30000.0 } } :
_getErrorWithCode@src/mongo/shell/utils.js:23:13
DB.prototype.createUser@src/mongo/shell/db.js:1230:11
@(shell):1:1
我试过切换到管理数据库,但仍然说未授权,我也试过 运行 rs.initiate() 命令来定义主数据库和辅助数据库,说未授权。我读过,即使我在禁用身份验证的情况下启动 mongod
,通过 keyfile
的内部身份验证也会强制进行基于角色的身份验证。我在这里错过了什么,我将如何解决?提前致谢。
错误信息显示您没有执行该命令的权限。
在.conf文件中设置keyfile参数后,mongo需要使用auth用户登录。
所以如果你没有root用户。
- 启动 mongod 没有授权配置(不要设置 keyfile 并禁用
security.authorization
)
- 创建使用 root 角色
db.createUser({user:"root",pwd:"rootpassword",roles:[{role:"root",db:"admin"}]})
如果您有 root 用户,您应该使用 db.auth()
或以 root 权限登录 mongo,以执行 rs.conf()
命令。
mongo --port portnumber -u root -p --authenticationDatabase admin
或使用命令登录后 mongo --port portnumber
db.auth("root", "rootpassword")
ps。 KeyFile用于副本集内部通信安全。
我有 4 个 mongodb 运行ning(副本集)实例,每个实例都有以下 mongodb.conf
文件:
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /root/mongodata/log/mongod.log
# Where and how to store data.
storage:
dbPath: /root/mongodata/db1 # also have db2 and so on for rest of the instances
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /root/mongodata/db1/mongod.pid # location of pidfile, different for 4 instances
# network interfaces
net:
port: 30000 #port different for 4 different instances
bindIp: 12.123.321.432(example ip, same for all 4 .conf files)
# security
security:
KeyFile: /path to my keyfile location
# authorization: enabled
#operationProfiling:
replication:
replSetName: testReplica #have this same for all 4
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
我还创建了一个用于内部身份验证的密钥文件,如下所示:
openssl rand -base64 756 > <path-to-keyfile>
chmod 400 <path-to-keyfile>
所有实例都运行ning后我打开mongoShell如下:
mongo --host 12.123.321.432 --port 30000
我可以打开 shell 但是当我尝试创建用户时,出现以下异常:
2016-12-22T20:55:38.396-0500 E QUERY [thread1] Error: couldn't add user: not authorized on test to execute command { createUser: "root", pwd: "xxx", roles: [ { role: "root", db: "admin" } ], digestPassword: false, writeConcern: { w: "majority", wtimeout: 30000.0 } } :
_getErrorWithCode@src/mongo/shell/utils.js:23:13
DB.prototype.createUser@src/mongo/shell/db.js:1230:11
@(shell):1:1
我试过切换到管理数据库,但仍然说未授权,我也试过 运行 rs.initiate() 命令来定义主数据库和辅助数据库,说未授权。我读过,即使我在禁用身份验证的情况下启动 mongod
,通过 keyfile
的内部身份验证也会强制进行基于角色的身份验证。我在这里错过了什么,我将如何解决?提前致谢。
错误信息显示您没有执行该命令的权限。
在.conf文件中设置keyfile参数后,mongo需要使用auth用户登录。
所以如果你没有root用户。
- 启动 mongod 没有授权配置(不要设置 keyfile 并禁用
security.authorization
) - 创建使用 root 角色
db.createUser({user:"root",pwd:"rootpassword",roles:[{role:"root",db:"admin"}]})
如果您有 root 用户,您应该使用 db.auth()
或以 root 权限登录 mongo,以执行 rs.conf()
命令。
mongo --port portnumber -u root -p --authenticationDatabase admin
或使用命令登录后 mongo --port portnumber
db.auth("root", "rootpassword")
ps。 KeyFile用于副本集内部通信安全。