Mongodb用户安全认证

时间:2021-01-24 14:23:30

默认的情况下(mongod -dbpath="D:\PATH\mongodb4me"),服务端是没有开启安全认证的,客户端程序可以随意操作数据库,操作用户,这样对于数据库来说是不安全的,Mongodb3.2.4提供了如下的用户角色,对应不同操作权限:

    1. 数据库用户角色:read、readWrite;
    2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
    3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
    4. 备份恢复角色:backup、restore;
    5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    6. 超级用户角色:root  

    7. 内部角色:__system

* dbOwner 、userAdmin、userAdminAnyDatabase 这几个角色间接或直接提供了系统超级用户的访问

*这个角色拥有分配角色和用户的权限,但不能查写

1.在服务端不开启安全认证的情况下,先创建一个用户

1.1 切换到admin数据(切换到哪个数据库,就代表创建的用户属于哪个数据库) use admin

1.2 输入创建用户的命令

db.createUser(
{
user: "root",
pwd: "root",
roles: ["root","userAdminAnyDatabase"]
}
)

代表创建了一个用户名和密码都是root的用户,角色是root和userAdminAnyDatabase


2.服务端开启安全认证

mongod -dbpath="D:\PATH\mongodb4me" --auth

3.重新登录客户端 

exit 

mongo localhost:27017


此时输入db.createCollection,db.system.users.find(),show collections,show dbs这些操作数据库或者用户的命令都不能使用了,因为没有权限。


4.认证,成功后可以获得相应权限

use admin 切换到admin数据库

db.auth("root","root"); 提示1则代表认证成功了。


*也可以直接使用账号密码登录数据库

mongo --port 27017 -u root -p root --authenticationDatabase admin