mongodb管理学习之keyfile认证

本文详细介绍了MongoDB使用Keyfile进行副本集认证的步骤,包括Keyfile的创建、权限设置、复制到各节点以及配置文件修改。同时,还涵盖了MongoDB的用户管理操作,如创建、删除、更新用户以及查看用户信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、keyfile认证

1创建keyfile(秘钥文件)

1.1要求

(1)通过密钥文件进行身份验证时,副本集中的每个mongo实例都使用密钥文件的内容作为与其他成员进行身份验证的共享密码。

只有拥有正确密钥文件的Mongod实例才能加入副本集。

(2)密钥文件的内容必须在6到1024个字符之间,并且对于副本集的所有成员必须是相同的。

1.2创建

您可以使用您选择的任何方法生成密钥文件。例如,以下操作用于openssl生成用于密钥文件。

主要:key的长度必须是6-1024的base64字符,unix下必须相同组权限,windows下不需要。

1.3更改权限

chmod 600 ./mongodb.key

2将密钥文件复制到每个副本集成员上

将密钥文件复制到托管副本集成员的每个服务器上。确保运行mongod实例的用户是该文件的所有者,并且可以访问密钥文件。

scp name@xx.xx.xx.xx:XXX/mongodb.key  /XXX

3登录到mongs 创建用户

Use admin一定要用admin数据库

db.createUser({user:"admin",pwd:"admin",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})

4关闭分片加副本集的所有成员

5.在每个mongod的配置文件中添加以下内容:

auth=true

keyFile=XXX/mongodb.key

在每个mongos的配置文件中添加以下内容:

keyFile=XXX/mongodb.key

5.从新启动集群,启动顺序为

配置-->分片-->副本

备注:最好创建一个全局权限的账户,不然如果忘记了用户和密码就不太方便了。

二、附件

1.数据库角色

针对Mongodb数据库中的各种角色进行说明

数据库访问

角色名称

拥有权限

read

允许读取指定数据库的角色

readWrite

允许读写指定数据库的角色

数据库管理

角色名称

拥有权限

dbAdmin

允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin

允许管理当前数据库的用户,如创建用户、为用户授权

dbOwner

数据库拥有者(最高),集合了dbAdmin/userAdmin/readWrite角色权限

集群管理

角色名称

拥有权限

clusterAdmin

集群最高管理员,集合clusterManager/clusterMonitor/hostManager角色权限

clusterManager

集群管理角色,允许对分片和副本集集群执行管理操作,如addShard,resync等

clusterMonitor

集群监控角色,允许对分片和副本集集群进行监控,如查看serverStatus

hostManager

节点管理角色,允许监控和管理节点,比如killOp、shutdown操作

备份恢复

角色名称

拥有权限

backup

备份权限,允许执行mongodump操作

restore

恢复权限,允许执行mongoresotre操作

数据库通用角色

角色名称

拥有权限

readAnyDatabase

允许读取所有数据库

readWriteAnyDatabase

允许读写所有数据库

userAdminAnyDatabase

允许管理所有数据库的用户

dbAdminAnyDatabase

允许管理所有数据库

特殊角色

角色名称

拥有权限

root

超级管理员,拥有所有权限

__system

内部角色,用于集群间节点通讯


2.用户管理

添加用户

通过mongo shell终端操作,用户保存在admin数据库system.user集合中

添加普通用户

切换到需要添加用户的db

use xxxx

执行添加

db.createUser(

{

user:"username",

pwd:"password",

roles:[

{role:"read", db:"xxxx"},

{role:"readWrite", db:"test"}

]

}

)











添加超级用户

切换到admin数据库

use admin

执行添加

db.createUser(

    {

        user:"username",

        pwd:"password",

        roles:[

            {role:"root", db:"admin"}

        ]

    }

)

 

 

 

 

 






删除用户

切换到用户授权的db

use xx

执行删除操作

db.dropUser("username")

更新用户

切换到用户授权的db

use xx

执行更新

字段会覆盖原来的内容

db.updateUser("username",{

    pwd:"new password",

    customData:{

        "title":"PHP developer"

    }

})

 

 

 

 

 



更新用户密码

use xx

db.changeUserPassword("username","newpassword")

查看用户信息

use admin

db.getUser("username")

删除用户

切换到用户授权的db

use xx

执行删除操作

db.dropUser("username")


参考资料:

1. https://www.cnblogs.com/wadeyu/p/7928625.html

2. http://www.btfw.org/linux/487.html

3. http://www.jb51.net/article/126447.htm




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值