默认的情况下(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