mongdb安全认证详解

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: mongdb安全认证详解

 认证

MongoDB安全认证

简介

MongoDB 默认是没有账号的,可以直接连接,无须身份验证,但实际项目中肯定是要权限验证的,否则后果不堪设想

认证相关操作

docker以auth方式创建MongoDB容器

docker run -itd --name mongo5 -p 27017:27017 mongo:xxx --auth

image.gif


备份数据

mongodump -h 127.0.0.1:27017 -d mydb -o /usr/local

image.gif


恢复数据(在用户认证之后)

mongorestore -h localhost -u root -p 123456 --db mydb /dump/mydb --authenticationDatabase admin

image.gif

基于角色的访问控制相关知识

给用户分配对应数据库的角色

注意:角色为mongdb中固定的不可改

use admin;

image.gif

db.createUser(
{
user: "账号",
pwd: "密码",
roles: [
{ role: "角色", db: "数据库" },
{ role: "角色", db: "数据库" }
]
}
)

image.gif

用户命令

修改密码

db.changeUserPassword( '账号' , '密码' );

image.gif

添加角色

db.grantRolesToUser('用户名',[{ role:'角色名', db:'数据库名'}])

image.gif

删除用户

db.dropUser("用户名")

image.gif

验证用户【返回 1 说明认证成功】

db.auth("账号","密码")

image.gif

内置角色

root    超级账号,超级权限

read   允许用户读取指定数据库

readwrite  允许用户读写指定数据库

dbAdmin    可以读取任何数据库并对库进行清理、修改、压缩,获取统计信息、执行检查等操作

userAdmin  可以在指定数据库里创建、删除和管理用户

readAnyDatabase    可以读取任何数据库中的数据,除了数据库config和local之外

readwriteAnyDatabase   可以读写任何数据库中的数据,除了数据库config和local之外

userAdminAnyDatabase   可以在指定的数据库中创建和修改用户,除了数据库config和local之外

dbAdminAnyDatabase 可以读取任何数据库并对库进行清理、修改、压缩,获取统计信息、执行检查等操作,除了数据库config和local之外

backup 备份数据权限

restore    从备份中恢复数据的权限

mongdb中用户默认对应的角色

数据库用户   read、readwrite

数据库管理角色    dbAdmin、userAdmin

所有数据库角色    readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、 dbAdminAnyDatabase

备份恢复角色 backup、restore

超级用户角色 root

管理员      

创建管理员

MongoDB 服务端开启安全检查之前,至少需要有一个管理员账号,admin 数据库中的用户都被视为管理员

如果 admin 库没有任何用户的话,即使在其他数据库中创建了用户,启用身份验证,

默认的连接方式依然会有超级权限,即仍然可以不验证账号密码照样能进行 CRUD,安全认证相当于无效

进入容器

docker exec -it mongo bash

image.gif

进入终端

mongo

image.gif

进入admin数据库

use admin

image.gif

创建管理员账户

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

image.gif

验证用户添加是否成功

db.auth("root", "xx");

image.gif

如果返回1,则表示成功

管理员登录

客户端管理员以root用户登录,安全认证通过后,拥有对所有数据库的所有权限

进入容器

docker exec -it mongo bash

image.gif

进入终端

mongo

image.gif

以管理员身份登录

use admin

image.gif

switched to db admin

image.gif

db.auth("root","xx")

image.gif

普通用户

创建普通用户

创建mydb数据库并创建两个用户,zhangsan 拥有读写权限,lisi 拥有只读权限测试这两个账户的权限。以超级管理员登录测试权限


> use mydb

switched to db mydb

>  db.c1.insert({name:"testdb1"})

WriteResult({ "nInserted" : 1 })

> db.c2.insert({name:"testdb1"})

WriteResult({ "nInserted" : 1 })

> show tables

c1

c2

> db.c1.find()

{ "_id" : ObjectId("62a00e5c1eb2c6ab85dd5eec"), "name" : "testdb1" }

> db.c1.find({})

{ "_id" : ObjectId("62a00e5c1eb2c6ab85dd5eec"), "name" : "testdb1" }

> show dbs

admin   0.000GB

config   0.000GB

local   0.000GB

mydb    0.001GB

>

普通用户登录

普通用户现在仍然像以前一样进行登录,如下所示直接登录进入 mydb数据库中,登录是成功的,只是登录后日志少了很多东西,

而且执行 show dbs 命令,以及 show tables 等命令都是失败的,即使没有被安全认证的数据库,用户同样操作不了,

这都是因为权限不足,一句话:用户只能在自己权限范围内的数据库中进行操作


> db.auth("zhangsan","123456")

1

> show dbs

mydb 0.001GB

> show tables

c1

c2        

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
6天前
|
NoSQL 安全 MongoDB
MongoDB安全机制:认证、授权与加密
【4月更文挑战第30天】MongoDB提供全面的安全机制,包括认证(用户名/密码、LDAP、Kerberos、x.509证书)、授权(基于角色的访问控制,RBAC)和加密(TLS/SSL、透明数据加密TDE、字段级加密FLE),确保数据保密性、完整性和可用性。通过合理配置这些机制,企业可保障数据安全,应对不断变化的安全威胁。
|
8月前
|
数据库 数据安全/隐私保护
阿里云E-MapReduce集群-开源Ldap密码不安全问题解决方案
社区开源Ldap密码不安全问题解决方案
|
网络协议 关系型数据库 Unix
OushuDB-客户端认证-配置方法
OushuDB-客户端认证-配置方法
68 0
|
存储 NoSQL 安全
MongoDB基本操作(五)——分片集群与安全认证
MongoDB基本操作(五)——分片集群与安全认证
394 0
MongoDB基本操作(五)——分片集群与安全认证
|
安全 Java 关系型数据库
集中式整合之使用数据库数据实现认证|学习笔记
快速学习集中式整合之使用数据库数据实现认证
85 0
集中式整合之使用数据库数据实现认证|学习笔记
|
安全 NoSQL Java
副本集安全认证|学习笔记
快速学习副本集安全认证
135 0
副本集安全认证|学习笔记
|
NoSQL 安全 Shell
MongoDB 安全策略:验证和授权
对于新安装的 MongoDB ,它是没有开启身份验证的。需要进入 admin 数据库,创建一个 root 角色的超级管理员用户。之后再针对具体应用的数据库,使用管理员用户为其创建不同权限的用户,从而做到针对数据库安全的基本保障。
2039 0
|
NoSQL 安全 关系型数据库