问题描述
我是 Mongod 的新手,必须起一个集群。 db 以 --replSet=Data 启动,我事先使用 rs.Initiate 创建了集群。但这个问题是关于用户管理的。
这个副本集是用这个命令设置的:
rs.initiate({ _id : "Data",members: [
{ _id: 0,host: "srv1:27017" },{ _id: 1,host: "srv2:27017" },{ _id: 2,host: "srv3:27017",arbiterOnly: true }
})
服务器以 $ /usr/bin/mongod -f /etc/mongod.conf --replSet=rs0
请注意,据我所知,我还没有配置其他节点/将这些节点添加到集群中,但我确实将 keyFile: /etc/mongod/keyfile
分发到了每个服务器。
rs.status
表示它没有运行。
> rs.Status();
{
"ok : 0"
"errmsg" : no replset config has been received","code" : 94,"codename" : "NotYetinitialized"
}
我遇到了一些笔尖问题。
# mongo admin -port 27017
> db.createuser ( {
user : 'mgdb',pwd: 'password',roles: [ { roles: root,db: admin } ]
})
返回正常。
接下来我尝试了,
$ mongo --authenticationDatabase admin --username "mgdb" --password "password"
但出现错误
E QUERY [js] Error authentication Failed.
接下来我尝试查看用户列表,
> show users;
not authorizeed on admin to execute on admin to execute command { UserInfo: 1.0},lsid: { id: UID"xxxxxxxx") }. $db: "admin" } DB.prototy[e.getUsers@.....
所以,我有点失落。几年前我用过MysqL,但从那以后就没有用过。我的 dB 经验很少。
虽然我可以以管理员用户身份连接,但管理员用户似乎没有权限做基本的“显示用户”;
我可以在哪里查看 dB 以找出问题所在?
环境:RHEL 7.6 SELinux Enforcing,MOngdodB 4.2.9
解决方法
在 MongoDB 中,您可以为每个数据库创建用户。通常用户是在数据库 admin
中创建的(我不知道有什么理由在其他地方创建它们):
use admin
db.createUser(...
或
db.getSiblingDB("admin").createUser(...
当您连接到 Mongo 时,您需要指定身份验证数据库,即创建用户的数据库:
mongo --usermame=mgdb --password 'password' --authenticationDatabase admin
见Authentication failure while trying to save to mongodb
要部署分片集群,请查看 Deploy a Sharded Cluster 或 Deploy a Replica Set 教程。