1. 概念
如果需要mongodb对客户端连接进行认证,首先必须建立用户(user),用db.createUser()建立用户。
建立用户的时候,可以为用户分配一个或多个角色(role),角色用于区分用户的权限。
第一个建立的用户必须是一个用户管理员,他具有管理其他所有用户的权限。
用户一定属于某个数据库(称为该用户的认证数据库),不同的数据库中即使用户名相同,也是不同的用户,也就是说数据库和用户名的组合唯一标识了一个用户。
数据库A的用户如果被赋予了数据库B的某个访问权限,那么该用户就可以访问数据库B。
客户端在练级数据库进行认证时,必须指定该用户所在的认证数据库。
mongodb把所有用户的用户名,密码和认证数据库信息都保存在admin数据库的system.users集合中。
2. 内部认证
如果使用了副本集或者分片集群,那么在集群成员的内部互相认证称为内部认证,如果启用内部认证,则同时也启用了客户端认证。
内部认证可以使用Keyfiles或x.509方式。
如果使用Keyfiles方式,那么keyfile不能有group和other权限。
所有组内成员的keyfile内容必须相同。
3. 角色(role)
角色属于数据库。
每个数据库都有内置的多个user和administration角色,除此之外,admin数据库还有其它的内置角色。
数据库的user类角色包括:read和readWrite
数据库的administration类角色包括:dbAdmin, dbOwner和userAdmin