Mongodb如何开启用户访问控制详解
发布时间 - 2026-01-10 22:47:35 点击率:次前言

Mongodb 数据库默认情况下是没有访问控制的,整个数据库对外是开发的,只要能连上数据库,则可以进行任何操作,这会对数据带来很大的风险。当然,我们可以启用mongodb的访问控制,只让通过认证的用户才能对数据库进行角色范围内的操作。
启用访问控制可以通过在启动 mongodb 时指定 --auth 参数来设置,另外还涉及到创建用户 db.createUser 操作以及一些角色的定义,我们先来看这部分内容。
db.createUser() 用法
db.createUser({
user: "$USERNAME",
pwd: "$PASSWROD",
roles: [
{ role: "$ROLE_NAME", db: "$DBNAME"}
]
})
参数说明:
- user 是用户名
- pwd 是密码
- role 来指定用户的角色
- db 来指定所属的数据库
- roles 是用户所有角色的集合
Mongodb 预定义角色
Mongodb 中预定义了一些角色,把这些角色赋予给适当的用户上,用户就只能进行角色范围内的操作。
1、数据库用户角色 (所有数据库都有)
- read 用户可以读取当前数据库的数据
- readWrite 用户可以读写当前数据库的数据
2、数据库管理角色(所有数据库都有)
- dbAdmin 管理员用户但不能对用户和角色管理授权
- dbOwner 数据库所有者可进行任何管理任务
- userAdmin 可以管理当前数据的用户和角色
3、集群管理角色(admin数据库可用)
- clusterAdmin 集群所有管理权限,是 clusterManager , clusterMonitor, hostManager 合集
- clusterManager 集群管理和监控
- clusterMonitor 集群监控,只读的
- hostManager 监控和管理服务器
4、备份和恢复角色(admin数据库可用)
- backup
- restore
5、所有数据库角色(admin数据库可用)
- readAnyDatabase 读取所有数据库
- readWriteAnyDatabase 读写所有数据库
- userAdminAnyDatabase 所有数据库的 userAdmin 权限
- dbAdminAnyDatabase 所有数据库的 dbAdmin 权限
6、超级角色(admin数据库可用)
- root 超级用户
7、内部角色
- __system 所有操作权限
更多预定于角色的信息请参看:https://docs.mongodb.com/manual/core/security-built-in-roles/
启用访问控制的步骤
1, 启动 mongodb 实例,关闭 访问控制
不带 --auth
./mongod
2, 连接上 mongodb 实例
./mongo
3,创建用户管理员
在 admin 数据库中添加一个 具有 userAdminAnyDatabase 角色的用户作为用户管理用户。下面的例子中创建了 admin 为用户管理员。
> use admin
switched to db admin
> db.createUser({
... user: "admin",
... pwd: "admin",
... roles: [
... { role: "userAdminAnyDatabase", db: "admin"}
... ]
... })
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
>
退出连接
4,重启数据库启用访问控制
命令行启动,只需要添加 --auth 参数
./mongo --auth
5,使用管理用户连接,有两种方法
- 使用命令行
./mongo -u "$USERNAME" -p "$PASSWROD" --authenticationDatabase "admin" - 使用
db.auth()
我们使用第二种
>
> use admin
switched to db admin
> db.auth("admin", "admin")
1
>
1 表示认证成功
6, 为某个数据库创建独立用户
以下为 test 数据库 创建具有读写权限的用户 test
admin 用户由于只有 userAdminAnyDatabase 权限,所以没有 test 数据的读写权限,所以,为了读写 test 数据库,我们需要创建一个用户。先看一下直接用 admin 会报什么错误
> use test
> show collections
2017-01-13T13:49:17.691+0800 E QUERY [thread1] Error: listCollections failed: {
"ok" : 0,
"errmsg" : "not authorized on test to execute command { listCollections: 1.0, filter: {} }",
"code" : 13
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype._getCollectionInfosCommand@src/mongo/shell/db.js:773:1
DB.prototype.getCollectionInfos@src/mongo/shell/db.js:785:19
DB.prototype.getCollectionNames@src/mongo/shell/db.js:796:16
shellHelper.show@src/mongo/shell/utils.js:754:9
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1
我们直接使用 show collections , 则报错:not authorized on test to execute command ,意思是没有权限。
> use test
switched to db test
> db.createUser({
... user: "test",
... pwd: "test",
... roles: [
... { role: "readWrite", db: "test"}
... ]
... })
Successfully added user: {
"user" : "test",
"roles" : [
{
"role" : "readWrite",
"db" : "test"
}
]
}
>
然后我们使用 db.auth(“test”, “test”) , 再执行命令 则没有报错
> db.auth("test", "test")
1
>
> show collections
试着写入一条数据,也是正常的。
> db.t.insert({name:"buzheng"});
WriteResult({ "nInserted" : 1 })
> db.t.find();
{ "_id" : ObjectId("58786c84bf5dd606ddfe1144"), "name" : "buzheng" }
>
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# mongodb
# 访问控制
# 启用访问控制
# mongodb添加访问控制
# MongoDB 3.0+安全权限访问控制详解
# 分布式文档存储数据库之MongoDB备份与恢复的实践详解
# 分布式文档存储数据库之MongoDB分片集群的问题
# 分布式文档存储数据库之MongoDB访问控制的操作方法
# 都有
# 用户可以
# 报错
# 会报
# 命令行
# 我们可以
# 这部
# 可以通过
# 只需要
# 这篇文章
# 有两种
# 涉及到
# 不带
# 则可
# 试着
# 重启
# 但不
# 能对
# 合集
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
js实现点击每个li节点,都弹出其文本值及修改
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
Laravel如何为API编写文档_Laravel API文档生成与维护方法
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
黑客如何通过漏洞一步步攻陷网站服务器?
青岛网站建设如何选择本地服务器?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
Laravel集合Collection怎么用_Laravel集合常用函数详解
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
如何撰写建站申请书?关键要点有哪些?
如何用搬瓦工VPS快速搭建个人网站?
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
微信小程序 input输入框控件详解及实例(多种示例)
如何用y主机助手快速搭建网站?
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
如何快速登录WAP自助建站平台?
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
黑客如何利用漏洞与弱口令入侵网站服务器?
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
Laravel模型事件有哪些_Laravel Model Event生命周期详解
利用 Google AI 进行 YouTube 视频 SEO 描述优化
高防服务器:AI智能防御DDoS攻击与数据安全保障
北京的网站制作公司有哪些,哪个视频网站最好?
JavaScript如何实现错误处理_try...catch如何捕获异常?
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
Laravel如何实现API速率限制?(Rate Limiting教程)
如何快速搭建支持数据库操作的智能建站平台?
javascript读取文本节点方法小结
网站制作壁纸教程视频,电脑壁纸网站?
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
浅析上传头像示例及其注意事项
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
企业网站制作这些问题要关注
HTML 中如何正确使用模板变量为元素的 name 属性赋值
PHP 500报错的快速解决方法
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
JS弹性运动实现方法分析
EditPlus中的正则表达式 实战(1)
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程

