mongodb 系列 ~ mongo 用户验证系列
1 2 3 4 | MongoClientURI connectionString = new MongoClientURI( "mongodb://root:****@dds-bp114e3f1fc441342.mongodb.rds.aliyuncs.com:3717,dds-bp114e3f1fc441341.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-677201" ); // ****替换为root密码 MongoClient client = new MongoClient(connectionString); MongoDatabase database = client.getDatabase( "mydb" ); MongoCollection collection = database.getCollection( "mycoll" ); |
一 基础
1 mongodb本身启动是无认证的,是不安全的。
2 mongodb的版本是3.X,3.X以前的版本授权方式不一样,请注意
3 mongodb开启验证是需要消耗资源的,这点对于短链接尤为明显
二 验证机制
1 MONGODB-CR v3.0以下
2 SCRAM-SHA-1 v3.0以上mongodb
三 研发建立模型
一个spring 建立链接示例
spring.data.mongodb.uri=mongodb://root(userName):root(password)@localhost(ip地址):27017(端口号)/gis(collections/数据库)?authSource=admin&authMechanism=SCRAM-SHA-1
四 如何创建用户认证
1 mongodb启动参数添加auth
2 函数介绍
1 函数 createUser
db.createUser(
{
user: "username",
pwd: "password",
roles: [ { role: "role", db: "dbname" }, { role: "role", db: "dbname" },{ role: "role", db: "dbname" }]。
3 Built-In Roles(内置常用角色):
read:允许用户读取指定数据库 //必须切换到指定库建立
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readwrite:允许用户读写指定数据库 //必须切换到指定库建立
readwriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
root:只在admin数据库中可用。超级账号,超级权限 // DBA账号
五 常用命令
背景 root用户 admin下进行
1 db.system.users.find().pretty();//查看所有用户
2 db.system.users.remove({user:""});//从当前数据库删除指定用户
3 db.removeUser(username);//删除指定用户,对于所有DB
六 分批存储用户
1 对于 mongos集群,用户存储在全局admin库中
2 对于 副本集集群,用户存储在各自primary的admin库中
请记住,这两者之间的用户是不一样的
七 用户验证相关问题
1 hive抽取验证集群相关问题
1 需要指定config库只读
db.createUser({user:"XXX",pwd:"XX",roles:[{"role":"read","db":"ZZ"},{"role":"read","db":"config"}]})
2 添加MongoDB的SplitVector命令实现并发数据迁移,授权给该用户
添加角色:
db.createRole({role: "hadoopSplitVector",privileges: [{resource: {db: "dbname",collection: "collection"},actions: ["splitVector"]}],roles:[]})
//这里要注意,如果需要多个集合,都需要指出
3 进行user更新
db.updateUser("xxx",{roles: [{role:"read",db:"dbname"},{"role":"read","db":"config"},{role:"hadoopSplitVector", db:"dbname"}]})
2 无法通过mongos创建用户
报错 Error: couldn't add user: mongos specified a different config database string : stored
解决办法: 这时config三点已经处于不一致状态,需要同步config数据
3 对于 SCRAM-SHA-1 引起的性能消耗问题
分析 对于验证导致性能消耗问题比较严重的大多在于PHP的场景,频繁短链接的断开与建立,每次都需要验证,验证消耗性能
解决办法:
1 client : authMechanism='MONGODB-CR'(未验证)
2 采用连接池 或者去掉短链接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2018-09-03 消息推送与同步协议的思考
2018-09-03 SyncML 同步协议 感谢 周鹏(我只是做一个备份)
2018-09-03 四种常见的 POST 提交数据方式对应的content-type取值
2018-09-03 亿级日PV的魅族云同步的核心协议与架构实践
2018-09-03 云端同步的架构实践和协议细节