一 基础
1 mongodb本身启动是无认证的,是不安全的。
2 mongodb开启验证是需要消耗资源的,这点对于短链接尤为明显
二 验证机制
1 MONGODB-CR v3.0以下
2 SCRAM-SHA-1 v3.0以上mongodb
三 研发建立模型
一个spring 建立链接示例
spring.data.mongodb.uri=mongodb://root(userName):root(password)@localhost(ip地址):27017(端口号)/gis(collections/数据库)?authSource=admin&authMechanism=SCRAM-SHA-1
四 如何创建用户认证
1 mongodb需要以auth参数方式启动
2 创建具体用户->用户和角色绑定
db.createUser(
{ user: "username",
pwd: "password",
roles: [ { role: "role", db: "dbname" }, { role: "role", db: "dbname" }]}
3 Built-In Roles(内置常用角色,内置的一部分):
read:只读账户 ->切换目标库
readwrite:读写用户 ->切换目标库
readAnyDatabase:超级只读用户->切换admin库
readwriteAnyDatabase: 超级读写用户->切换admin库
root:超级账户->切换admin库
4 账户信息存储在admin.system.users集合中
五 常用命令
1 db.system.users.find().pretty();//查看所有用户
2 db.system.users.remove({user:""});//从当前数据库删除指定用户
3 db.removeUser(username);//删除指定用户,对于所有DB
六 架构-用户
1 对于 mongos集群,用户存储在全局admin库中
2 对于 副本集集群,用户存储在各自primary的admin库中
七 权限补充问题
1 内置的role只能实现基于db级别的权限控制,如果需要控制collections,需要创建单独的role
下面是一个案例
db.createRole(
{
role:"testrole",//角色名称
privileges: [ // 权限集
{
resource:
{
db:"jhr",
collection:""
},
actions: [ "find", "insert", "remove","update" ] //角色可进行的操作,注意这里是一个数组
}
],
roles: [] // 是否继承其他的角色,如果指定了其他角色那么新创建的角色自动继承对应其他角色的所有权限,该参数必须显示指定
}
)