1. 为什么要进行权限管理的设置
刚安装完毕的mongodb默认不使用权限认证方式启动,与MySQL不同,mongodb在安装的时候并没有设置权限,然而公网运行系统需要设置权限以保证数据安全,所以我们要学习mongodb的权限管理
2. mongodb的权限管理方案
MongoDB是没有默认管理员账号,所以要先添加管理员账号,并且mongodb服务器需要在运行的时候开启验证模式
用户只能在用户所在数据库登录(创建用户的数据库),包括管理员账号。
管理员可以管理所有数据库,但是不能直接管理其他数据库,要先认证后才可以。
3. mongodb超级管理员账号的创建
3.1 创建超级用户
进入mongo shell
sudo mongod
使用admin数据库(超级管理员账号必须创建在该数据库上)
use admin
创建超级用户
db.createUser({"user":"python","pwd":"python",roles:[{role:"root",db:"admin"}]})
创建成功会显示如下信息
Successfully added user: { "user" : "python", "roles" : [ role:"root",db:"admin" ] }
退出mongo shell
exit
3.2 以权限认证的方式启动mongodb数据库
sudo mongod --auth
启动之后在启动信息中会有如下信息,说明mongodb以权限认证的方式启动成功
[initandlisten] options: { security: { authorization: "enabled" } }
3.3 登录验证
此时再使用数据库各命令的时候会报权限错误,需要认证才能执行相应操作
use admin
db.auth('python','python')
python用户是创建在admin数据库上的所以必须来到admin数据库上进行认证
认证成功会返回1,失败返回0
4. 创建普通用户
4.1 在使用的数据库上创建普通用户
1.选择需要创建用户的数据库
use test1
创建用户
db.createUser("user":"user1", "pwd":"pwd1", roles:["read"])
#创建普通用户user1,该用户在test1上的权限是只读
db.createUser("user":"user1", "pwd":"pwd1", roles:["readWrite"])
#创建普通用户user1,该用户在test1上的权限是读写
4.2 在admin用户数据库上创建普通用户
use admin
db.createUser({"user":"python1", "pwd":"python1", roles:[{"role":"read","db":"dbname1"},{"role":"readWrite","db":"dbname2"}
]})
在admin上创建python1用户,python1用户的权限有两个,一个再dbname1上的只读,另一个是在dbname2上的读写
4.3 角色说明
user:用户名
pwd:密码
customData: 用于描述账户信息
roles:指定用户的角色,可以用一个空数组给新用户设定空角色;在roles字段,可以指定内置角色和用户定义的角色。
role里的角色可以选:
Built -In Roles(内置角色):
.1. 数据库用户角色: read 、readWrite;
.2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
.3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
.4. 备份恢复角色: backup、 restore ;
.5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
.6. 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
.7. 内部角色:__system
**具体角色:**
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
backup,retore:在进行备份、恢复时可以单独指定的角色,在db.createUser()方法中roles里面的db必须写成是admin库,要不然会 报错
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限,
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
5. 查看创建的用户
show users
{
"_id" : "admin.python",
"user" : "python",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
6. 删除用户
6.1 进入账号数据所在的数据库
use db_name
6.2 删除用户
db.dropUser('python')