如何解决如何将身份验证应用于由容器组成的 mongo 集群?
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ed380b215fe mongo "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:50001->27017/tcp shard1svr1
854d9f579a87 mongo "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:40001->27017/tcp cfgsvr1
7a7cad24246c mongo "docker-entrypoint.s…" 3 hours ago Up About an hour 0.0.0.0:37017->27017/tcp mongos
我已经如上配置了一个 mongo 集群。这是用于创建每个的 docker-compose 文件。
mongos docker-compose.yaml
version: '3'
services:
mongos:
container_name: mongos
image: mongo
command: mongos --configdb cfgrs/192.168.0.3:40001 --bind_ip 0.0.0.0 --port 27017
ports:
- 37017:27017
config server docker-compose.yaml
version: '3'
services:
cfgsvr1:
container_name: cfgsvr1
image: mongo
command: mongod --configsvr --replSet cfgrs --port 27017 --dbpath /data/db
ports:
- 40001:27017
volumes:
- cfgsvr1:/data/db
volumes:
cfgsvr1: {}
shard server docker-compose.yaml
version: '3'
services:
shard1svr1:
container_name: shard1svr1
image: mongo
command: mongod --shardsvr --replSet shard1rs --port 27017 --dbpath /data/db
ports:
- 50001:27017
volumes:
- shard1svr1:/data/db
volumes:
shard1svr1: {}
创建后,我创建了一个管理员帐户,创建了一个特定的数据库,并在特定的数据库中创建了一个用户。
mongos> show dbs
EV 0.761GB
admin 0.000GB
config 0.001GB
elex 0.000GB
sampleData 0.507GB
sampleData2 0.003GB
mongos> show users
mongos> use admin
switched to db admin
mongos> show users
{
"_id" : "admin.admin","userId" : UUID("1b1e25ad-4c54-4110-bafc-cb9643963d11"),"user" : "admin","db" : "admin","roles" : [
{
"role" : "userAdminAnyDatabase","db" : "admin"
}
],"mechanisms" : [
"SCRAM-SHA-1","SCRAM-SHA-256"
]
}
mongos> use elex
switched to db elex
mongos> show users
{
"_id" : "elex.elex","userId" : UUID("8bdba5c5-41fc-4342-a68e-f930134615e9"),"user" : "elex","db" : "elex","roles" : [
{
"role" : "readWrite","db" : "elex"
}
],"SCRAM-SHA-256"
]
}
但是,您可以通过简单的 url 和端口号访问数据库,而无需从外部访问用户 ID 和密码。
mongo "IP:PORT" -u admin -p "pass" --authenticationDatabase admin
设置 authenticationDatabase 仍然没有生效。如何应用身份验证?
解决方法
通常用户是在 'admin' 数据库中创建的,我不知道在另一个数据库中创建它们的任何有用的理由。
在 MongoDB 中,即使没有身份验证,您也可以连接,但是您不能执行任何命令(除了获得帮助和类似的信息)。例如,如果您尝试查询集合,则会收到错误“未验证”
您需要在配置中启用身份验证,看看https://docs.mongodb.com/manual/tutorial/enable-authentication/
在共享集群中您还必须使用内部身份验证,以允许主机可以在内部相互通信,请参阅https://docs.mongodb.com/manual/core/security-internal-authentication/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。