ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MongoDB部署使用密钥文件进行身份验证的副本集

2022-05-16 14:34:02  阅读:248  来源: 互联网

标签:mongod 副本 mongo admin MongoDB 身份验证 192.168 密钥 keyfile


1.副本集架构

 

成员 IP
1 192.168.137.110
2 192.168.137.111
3 192.168.137.112

·副本集成员之间,使用内部身份验证的方式保证安全性

·客户端和副本之间使用基于角色的访问控制

 

2.创建keyfile

使用keyfile身份验证,副本集中的每个mongod实例都使用keyfile的内容作为共享密码,用于对部署中的其他成员进行身份验证。只有具有正确密钥文件的mongod实例才能加入副本集。

在其中一个节点生成,拷贝到其它节点即可。

$ openssl rand -base64 756 -out /usr/local/mongodb/mongo.keyfile
$ chmod 400 /usr/local/mongodb/mongo.keyfile

 

3.将步骤1中生成的keyfile拷贝到其它成员

注意,要将keyfile文件的属主改成mongodb的安装用户,通常是mongod。

 

4.开启访问控制后启动所有成员节点

启动前,修改配置,开启访问控制:

# vi /etc/mongod.conf
security:
  authorization: enabled
  keyFile: /usr/local/mongodb/mongo.keyfile
  
replication:
  replSetName: <replicaSetName>
net:
   bindIp: localhost,<hostname(s)|ip address(es)>

然后启动mongodb实例

比如:

mongod --config <path-to-config-file>

  

systemctl restart mongod.servicesystemctl status mongod.service

  

5.通过本地接口登录到其中一个节点

使用mongo本地登录。

因为还没有创建用户,只能通过本地接口登录;在创建第一个用户之后,本地接口就会被关闭。

 

6.初始化副本集

> config = {
  _id : "rs0", 
  members : [
    {_id:0, host:"192.168.137.110:27017"},
    {_id:1, host:"192.168.137.111:27017"},
    {_id:2, host:"192.168.137.112:27017"},
  ]
}
> rs.initiate(config)               //初始化副本集
{
    "ok" : 1,     //返回ok:1成功,返回ok:0失败
    "operationTime" : Timestamp(1611042829, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1611042829, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}

rs.initiate()会触发选举,并选举出一个成员为primary。

 

7.创建管理用户

创建第一个用户后,本地接口就会被关闭。

第一个用户必须具有create其它用户的权限,授予userAdminAnyDatabase角色。

admin = db.getSiblingDB("admin")
admin.createUser(
  {
    user: "fred",
    pwd: passwordPrompt(), // or cleartext password
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

  

8.管理员登录验证

mongo -u "fred" -p  --authenticationDatabase "admin"

  

或者先执行mongo,在mongoshell中执行:

db.getSiblingDB("admin").auth("fred", passwordPrompt()) // or cleartext password9.创建集群管理员

  

9.创建集群管理员

db.getSiblingDB("admin").createUser(
  {
    "user" : "ravi",
    "pwd" : passwordPrompt(),     // or cleartext password
    roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]
  }
)

  

10.创建普通用户

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:mongod,副本,mongo,admin,MongoDB,身份验证,192.168,密钥,keyfile
来源: https://www.cnblogs.com/abclife/p/16270677.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有