一、MongoDB安全校验的重要性
每个MongoDB实例中的数据库都可以有许多用户。如果没有开启安全校验,限制用户权限,则每个进到数据库的用户都能任意的对数据库数据进行读,写甚至是读写操作。这样的场景在实际的应用中是非常危险的,容易导致数据丢失,误删等事故,所以数据库服务开启安全校验,十分有必要。
二、MongoDB如何开启安全校验
一旦MongoDB开启了安全检查,则必须是数据库认证用户才有权力对数据进行读,写或读写操作。在进行安全检查之前,一定要至少有一个管理员账号,这是为什么呢?因为只有管理员可以读写任何的数据库,执行特定的管理命令,如为某个数据库添加特定用户,限制读写权限等。
如下图,为admin数据库添加了超级管理员root,密码为1234,方便在数据库开启安全检查后,使用该用户登录后能够进行数据库的管理,添加用户的语法为
db.addUser("用户名","密码",是否只读true|false)
然后为kaiye数据库添加了两个用户,语法分别为
db.addUser("haha","123"):haha用户对kaiye数据库具有读写权限
db.addUser("hehe","123",true):hehe用户对kaiye数据库只有读权限
重启服务端,并在开启服务端命令后面添加 --auth,就启动了MongoDB的安全校验了。
mongod --dbpath=C:\\mymongodb --port 27017 --auth
在服务端开启安全校验后,分别登录haha和hehe用户,进行数据的读写操作,在show collections时,会报无权限的异常。
此时需要使用数据库的用户进行认证登录,语法:db.auth("用户名","密码"),登录刚才添加的hehe用户(添加了只读权限)后,发现只能对数据进行检索查询,却不能进行数据的插入操作,这是因为刚才在为kaiye数据库添加hehe用户时,将addUser()函数的第三个值设置成了true,也就是该用户只有只读权限,所以无法进行写操作。
切换用户,即登录同时具有读写权限的haha用户,会发现既能进行find操作,也能进行insert操作。