我有两个用户,一个具有root角色的用户和另一个在数据库上具有只读角色的用户。当我以root身份登录然后在不退出shell的情况下切换到只读用户,MongoDB允许我运行并执行根级别命令,即使我以只读用户身份登录。要重现此问题,请执行以下操作。
我使用
以root用户身份登录use admin
db.auth("rootUser","Password")
运行show database,show collections等命令。
然后在不退出shell的情况下,我现在以只读用户身份登录
use dbabc
db.auth("readOnlyUser","Password")
现在以此用户身份登录,我可以删除,列出数据库并执行所有其他root操作。我觉得这很危险。我试图重复几次这个问题,它的工作原理。
只读用户按预期工作的唯一时间是当我退出shell然后再次以只读用户身份登录时。请参阅下面的命令执行。
> db.auth("admin","adminPassword")
> show databases
admin 0.000GB
main db 11.843GB
anotherdatab 9.025GB
anotherdata1 0.008GB
local 0.000GB
school 0.734GB
test 0.000GB
> use readonlydb
switched to db readonlydb
> db.auth("readonlyuser","readonlypass")
1
> show databases
admin 0.000GB
maindb 11.843GB
anotherdatab 9.025GB
anotherdata1 0.008GB
local 0.000GB
school 0.734GB
test 0.000GB
答案 0 :(得分:1)
这是我在MongoDB人员的JIRA网站上发布的内容。我不认为这是安全的,但MongoDB喜欢这种方式。
Hi [~sneceesay77],
Thank you for the report. This is expected behavior. You can be logged
in on different databases with several users concurrently in the shell.
In this case, you will have the collective permissions of all authenticated users.
If you do not want to be authenticated on a particular database you can
execute [db.logout()|https://docs.mongodb.com/manual/reference/method/db.logout/]
on the same database.