我必须在 MongoDB 服务器中创建一个新用户并授予它对单个数据库的只读权限。请注意,我不是这里的管理员。
我与我的用户连接并执行了以下代码:
db.createUser({user: "newuser", pwd: "mypassword", roles: [{role: "read", db: "mydatabase"}]})
然后我开始测试,我发现
newuser
我可以使用 Robo3T 和 Mongo Shell(mongo
命令)来连接这个新创建的用户。- 我可以读取
mydatabase
数据库 - 我仍然
WRITE
可以在这个数据库中自由地(插入、更新等) - 我可以从服务器中的其他数据库中读取任何内容(我没有尝试写)。
- 我可以使用 Robo3t 和 Mongo Shell 连接此数据库而无需传递用户名和密码
- 我可以通过提供错误的用户名和密码来强制进行错误的身份验证(通过时)
当我执行db.runCommand({connectionStatus : 1})
时,我得到这个输出:
{
"authInfo" : {
"authenticatedUsers" : [
{
"user" : "newuser",
"db" : "mydatabase"
}
],
"authenticatedUserRoles" : [
{
"role" : "read",
"db" : "mydatabase"
}
]
},
"ok" : 1,
...
}
使用 Mongo Shell 我连接这个命令(但也传递--authenticationDatabase
):
mongo --host mongodb://servers:ports/mydatabase?replicaSet=myreplicaset --username newuser --password mypassword
所以我的问题是非常基本的,我猜。
- 为什么我可以在不进行身份验证的情况下连接?
- 为什么我仍然可以用这个只读用户写?
- 为什么我仍然可以使用该用户访问其他数据库?
提前致谢!
@编辑:
我想知道它是否与此有关:
https://docs.mongodb.com/manual/tutorial/enable-authentication/
我见过一些人(检查一下)说忘记启用访问控制。由于我不是这个数据库的管理员,所以我仍然很困惑(我不是一个很有经验的用户)