MongoDB数据库用户名和密码的设置

本文介绍了MongoDB中用户和权限的基本配置方法,包括如何创建用户、验证用户身份及使用Java代码实现连接验证等关键步骤。
部署运行你感兴趣的模型镜像

今天开始做MongoDB的学习总结,感觉MongoDB的也不是想象中那么难,不过如果熟悉javascript的话,学习MongoDB就更容易上手。

首先是对MongoDB用户和权限的设置,如果不设置用户的话,直接使用mongo命令就可以进入客户端shell界面进行操作了,但是如果没有设置用户的话,总感觉少了点什么,于是经过半天的查找和实践,差不多把用户和权限弄明白了。总结如下:

如果按照以下这个指令安装的话:
mongod --install --dbpath "C:\Program Files\mongodb\data\db" --logpath "C:\Program Files\mongodb\data\log\MongoDB.log"

如下:
c:\Program Files\mongodb\bin>mongod --install --dbpath "C:\Program Files\mongodb\data\db" --logpath "C:\Program Files\mongodb\data\log\MongoDB.log"
Fri Apr 05 13:47:43.164
Fri Apr 05 13:47:43.168 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.
Fri Apr 05 13:47:43.169
Fri Apr 05 13:47:43.169 Trying to install Windows service 'MongoDB'
Fri Apr 05 13:47:43.170 There is already a service named 'MongoDB', aborting
c:\Program Files\mongodb\bin>net start MongoDB
Mongo DB 服服务务已已经经启启动动成成功功。。
c:\Program Files\mongodb\bin>mongo
MongoDB shell version: 2.4.1
connecting to: test
Server has startup warnings:
Fri Apr 05 13:48:02.516 [initandlisten]
Fri Apr 05 13:48:02.516 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary.
Fri Apr 05 13:48:02.516 [initandlisten] **       32 bit builds are limited to less than 2GB of data (or less with --journal).
Fri Apr 05 13:48:02.516 [initandlisten] **       Note that journaling defaults to off for 32 bit and is currently off.
Fri Apr 05 13:48:02.516 [initandlisten] **       See http://dochub.mongodb.org/core/32bit
Fri Apr 05 13:48:02.516 [initandlisten]
show dbs
admin   (empty)
local   0.03125GB
>
可以看到有两个默认的数据库admin和local
实例1:创建一个用户名为root,密码为admin的用户,如下:
> use admin
switched to db admin
db.addUser("root","admin")
{
        "user" : "root",
        "readOnly" : false,
        "pwd" : "bde0d84f6749c235a6b4e36d945eb666",
        "_id" : ObjectId("515e662430d89f61f6991c91")
}
show collections
Fri Apr 05 13:50:36.685 JavaScript execution failed: error: {
        "$err" : "not authorized for query on admin.system.namespaces",
        "code" : 16550
} at src/mongo/shell/query.js:L128
>
说明:使用以上指令show collections的时候,发现报错了。是因为没有权限。做如下操作:
db.auth("root","admin");
1
说明:返回1表示验证成功了,返回0表示验证失败。
此时,输入以下指令:show collections则可以看到admin下的集合了。
> show collections
system.indexes
system.users
> db.system.users.find()
{ "_id" : ObjectId("515e662430d89f61f6991c91"), "user" : "root", "readOnly" : false, "pwd" : "bde0d84f6749c235a6b4e36d945eb666" }
>
实例2:在用户名为root,密码为admin的用户下创建一个student数据库并在student数据库中创建一个stu的集合并插入一个文档,如下:
use student
switched to db student
db.stu.insert({"name":"maoyuanjun","age":25,"sex":"male"})
db.stu.find()
{ "_id" : ObjectId("515e676630d89f61f6991c92"), "name" : "maoyuanjun", "age" : 25, "sex" : "male" }
退出服务器,重新登陆如下:
c:\Program Files\mongodb\bin>mongo
MongoDB shell version: 2.4.1
connecting to: test
> show dbs
Fri Apr 05 13:58:05.420 JavaScript execution failed: listDatabases failed:{ "ok" : 0, "errmsg" : "unauthorized" 
at src/mongo/shell/mongo.js:L46
出错原因:是没有权限。则先判断是否有权限,如下:
> use admin
switched to db admin
> db.auth("root","admin")
1
> show dbs
admin   0.0625GB
local   0.03125GB
student 0.0625GB
>
这时,我们可以看到用户root,密码admin的用户下多了一个student数据库。
实例3:在创建一个用户
c:\Program Files\mongodb\bin>mongo
MongoDB shell version: 2.4.1
connecting to: test
> use admin
switched to db admin
直接添加用户会报错:
> db.addUser("test","123456")
Fri Apr 05 14:01:31.404 JavaScript execution failed: error: { "$err" : "not authorized for query on admin.system.users", "code" : 16550 } at src/mongo/shell/query.js:L128
做权限的判断:
> db.auth("root","admin");
1
> use admin
switched to db admin
> db.addUser("test",123456)
{
        "user" : "test",
        "readOnly" : false,
        "pwd" : "c8ef9e7ab00406e84cfa807ec082f59e",
        "_id" : ObjectId("515e68e2be252e81c5dee198")
}
> show collections
system.indexes
system.users
> db.system.users.find()
{ "_id" : ObjectId("515e662430d89f61f6991c91"), "user" : "root", "readOnly" : fa
lse, "pwd" : "bde0d84f6749c235a6b4e36d945eb666" }
{ "_id" : ObjectId("515e68e2be252e81c5dee198"), "user" : "test", "readOnly" : fa
lse, "pwd" : "c8ef9e7ab00406e84cfa807ec082f59e" }
>
可以看到已经有两个账户了。
以上创建好用户之后,就可以使用java代码来判断连接是否成功了:
package com.MongoDBDemo;


import java.net.UnknownHostException;

import com.mongodb.DB;
import com.mongodb.Mongo;
import com.mongodb.MongoException;

/*
 * MongoDB的连接和关闭
 */
public class MongoDBUtil {
	public static void main(String[] args) {
		Mongo m = null;
		DB db = null;
		try {
			//Mongo(param1, param2):param1为IP地址    param2为端口
			m = new Mongo("127.0.0.1", 27017);
			//根据mongodb数据库的名称获取mongodb对象
			db = m.getDB("admin");
			//校验用户密码是否正确  
            if (!db.authenticate("root", "admin".toCharArray())){  
                System.out.println("连接MongoDB数据库,校验失败!");  
            }else{ 
            	System.out.println("连接MongoDB数据库,校验成功!");  
            }
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (MongoException e) {
			e.printStackTrace();
		}finally{//mongodb连接关闭
			try{
				m.close();
			} catch(Exception ee) {
				ee.printStackTrace();
			}
			m = null;
		}
	}
}

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

MongoDB数据库连接是否需要设置用户名密码,取决于数据库的安全配置。如果MongoDB实例启用了访问控制(即认证功能),则连接时必须提供有效的用户名密码,否则将无法访问数据库资源。MongoDB支持多种认证机制,例如SCRAM-SHA-1、SCRAM-SHA-256、MONGODB-CR等,用户可以通过配置`security.authorization`参数来启用或禁用认证功能[^3]。 在实际应用中,为了确保数据安全,建议在生产环境中始终启用认证功能,并通过SSL/TLS加密连接来保护传输数据[^1]。例如,在Node.js应用中使用MongoDB驱动程序时,可以配置连接池参数如`user``password`来实现认证,同时设置`authSource`参数指定认证数据库。以下是一个典型的Node.js连接示例,展示了如何通过连接池管理MongoDB连接并启用认证: ```javascript var MongoClient = require('mongodb').MongoClient; var url = "mongodb://username:password@localhost:27017/testDB"; // 包含用户名密码的连接字符串 var option = { reconnectTries: 3, auto_reconnect: true, poolSize: 40, connectTimeoutMS: 500, auth: { user: 'yourUsername', password: 'yourPassword' }, authSource: 'admin' // 指定认证数据库 }; function MongoPool() {} var p_db; function initPool(cb) { MongoClient.connect(url, option, function(err, db) { if (err) throw err; p_db = db; if (cb && typeof(cb) == 'function') cb(p_db); }); return MongoPool; } MongoPool.initPool = initPool; function getInstance(cb) { if (!p_db) { initPool(cb); } else { if (cb && typeof(cb) == 'function') cb(p_db); } } MongoPool.getInstance = getInstance; module.exports = MongoPool; ``` 如果尝试连接启用了认证的MongoDB实例但未正确提供用户名密码,可能会遇到类似以下的错误信息: - `ERRO[0047] Cannot connect to MongoDB: connection() error occured during connection handshake: auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-256": (AuthenticationFailed) Authentication failed.`[^4] - `ERRO[0027] Cannot connect to MongoDB: error parsing uri: invalid password: invalid URL escape "%2O"` 这些错误提示表明连接失败的原因可能是认证失败或URI格式错误。因此,在构建连接字符串时,确保用户名密码正确无误,并且特殊字符(如`@`、`%`等)已正确转义,以避免解析错误。例如,如果密码中包含`@`符号,则需要将其替换为`%40`,以确保连接字符串能够被正确解析。 总之,是否需要设置用户名密码取决于MongoDB实例的安全配置。如果启用了认证功能,则必须提供正确的用户名密码以完成连接。同时,合理配置连接参数处理异常情况,有助于提高应用程序的稳定性安全性。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值