Nodejs mongodb权限验证问题
Nodejs mongodb权限验证问题
新安装的mongodb,我要用远程连接,所以我在admin数据库里增加了一个用户,但是用这个用户远程连接非admin数据库提示没有权限,网上查了下资料后发现我的操作步骤都没有问题,但是我的mongodb的admin数据库增加用户后用 db.system.users.find() 的结果:
{
"_id" : "admin.root",
"user" : "root",
"db" : "admin",
"credentials" : {
"MONGODB-CR" : "3b91e37c8ea4477ba2e47a9c3f6b2536"
},
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
而网上的是这样的
{ "_id" : ObjectId("4e02a89fb841deb5fda3e5e2"), "user" : "root", "readOnly" : false, "pwd" : "59cf7cc156874cbd35cb00869126f569" }
是mongodb版本的问题吗?
4 回复
Node.js MongoDB 权限验证问题
问题描述
最近我新安装了 MongoDB,并且希望通过远程连接到它。为了实现这一点,我在 admin
数据库中创建了一个用户,但当我尝试使用该用户远程连接到非 admin
数据库时,却收到了权限不足的错误。经过查阅资料,我发现自己的操作步骤并无问题,但与网上的示例结果有所不同。
示例查询结果
在 admin
数据库中,通过以下命令查询用户信息:
db.system.users.find().pretty()
得到的结果如下:
{
"_id" : "admin.root",
"user" : "root",
"db" : "admin",
"credentials" : {
"MONGODB-CR" : "3b91e37c8ea4477ba2e47a9c3f6b2536"
},
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
而网上常见的示例如下:
{
"_id" : ObjectId("4e02a89fb841deb5fda3e5e2"),
"user" : "root",
"readOnly" : false,
"pwd" : "59cf7cc156874cbd35cb00869126f569"
}
分析与解决方法
-
检查 MongoDB 版本:
- 网上的示例可能来自旧版本的 MongoDB。现在的版本(如 4.x)中,用户认证和角色管理已经有所变化。
- 使用的认证机制 (
MONGODB-CR
) 可能与之前的版本不同。
-
正确设置用户角色:
- 需要在非
admin
数据库中为用户分配适当的权限。例如,在test
数据库中创建一个具有读写权限的用户:
use test; db.createUser({ user: "testUser", pwd: "testPassword", roles: [ { role: "readWrite", db: "test" } ] });
- 需要在非
-
Node.js 连接配置:
- 在 Node.js 应用程序中,确保使用正确的用户名、密码以及数据库名称进行连接:
const MongoClient = require('mongodb').MongoClient; const uri = "mongodb://testUser:testPassword[@localhost](/user/localhost):27017/test"; MongoClient.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => { if (err) { console.error(err); return; } console.log("Connected to MongoDB"); client.close(); });
总结
如果你在使用最新版本的 MongoDB 时遇到权限问题,请确保正确地为用户分配角色,并使用最新的认证机制。上述示例展示了如何在非 admin
数据库中创建用户并授予适当的权限,以及如何在 Node.js 应用程序中进行连接。
我的mongodb版本是2.6.1
$ mongo
MongoDB shell version: 2.4.9
connecting to: test
use admin
switched to db admin
db.addUser("admin","password")
{
"user" : "admin",
"readOnly" : false,
"pwd" : "90f500568434c37b61c8c1ce05fdf3ae",
"_id" : ObjectId("513af8cac115e7a6b4bcceb9")
}
addUser succeeded, but cannot wait for replication since we no longer have auth
然后要认证
db.auth("admin","password")
这是我之前做的, 一直没有问题, 不知道你是怎么增加用户的