微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将身份验证应用于由容器组成的 mongo 集群?

如何解决如何将身份验证应用于由容器组成的 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 举报,一经查实,本站将立刻删除。