问题描述
在使用 MongoDB 进行查询操作时,可能会遇到 “Failed to authorize” 错误,如下所示:
MongoError: failed to authorize user@database: { ok: 0, errmsg: "not authorized on database to execute command { find: "collection_name", filter: {} }", code: 13, codeName: "Unauthorized" }
这个错误通常出现在需要用户验证的 MongoDB 数据库中,它表示当前用户没有足够的权限执行查询操作。这可能是由于用户没有正确的身份验证凭据或者没有被授权执行该操作。
解决方案
解决 “Failed to authorize” 错误需要遵循以下步骤:
1. 检查用户凭据
首先,需要检查使用的 MongoDB 用户凭据是否正确。可以使用以下命令检查当前用户:
db.runCommand({ connectionStatus: 1 })
如果用户凭据不正确,则需要使用正确的凭据重新连接 MongoDB 数据库。
2. 检查用户权限
如果用户凭据正确,但仍然无法执行查询操作,则需要检查用户是否被授予执行该操作的足够权限。可以使用以下命令检查用户权限:
db.runCommand({ usersInfo: "username" })
其中 “username” 是要检查的用户名。如果用户没有被授权执行查询操作,则需要向管理员请求授权。
3. 检查数据库角色
在 MongoDB 中,可以使用角色来定义用户对数据库的访问权限。如果用户没有被授予执行查询操作的角色,则需要向管理员请求授予该角色。
可以使用以下命令列出用户的角色:
db.runCommand({ rolesInfo: { role: "role_name", db: "database_name" } })
其中 “role_name” 是角色名称,“database_name” 是数据库名称。如果用户没有被授予执行查询操作的角色,则需要向管理员请求授权。
示例代码
以下是一个示例代码,它演示了如何使用正确的凭据和角色执行查询操作:
// javascriptcn.com 代码示例 const MongoClient = require('mongodb').MongoClient; // Connection URL const url = 'mongodb://localhost:27017'; // Database Name const dbName = 'myproject'; // Create a new MongoClient const client = new MongoClient(url, { useUnifiedTopology: true }); // Use connect method to connect to the Server client.connect(function(err) { console.log("Connected successfully to server"); const db = client.db(dbName); // Authenticate user db.authenticate('myuser', 'mypassword', function(err, result) { if (err) throw err; // Check user roles db.runCommand({ rolesInfo: { role: "readWrite", db: "myproject" } }, function(err, result) { if (err) throw err; // Query collection const collection = db.collection('documents'); collection.find({}).toArray(function(err, docs) { if (err) throw err; console.log("Found the following records"); console.log(docs); // Close connection client.close(); }); }); }); });
在这个示例代码中,我们首先使用正确的凭据验证用户身份。然后,我们检查用户是否被授权执行查询操作的角色。最后,我们使用正确的角色执行查询操作。
总结
在使用 MongoDB 进行查询操作时,可能会遇到 “Failed to authorize” 错误。这个错误通常表示当前用户没有足够的权限执行查询操作。解决这个问题需要检查用户凭据、用户权限和数据库角色,并向管理员请求授权。通过正确的凭据和角色,可以轻松地执行 MongoDB 查询操作。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650ec90495b1f8cacd7ce9f1