mongodb 认证(authentication)
认证与授权是紧密关联的,但是认证不同于授权。认证是确认一个用户的身份,允许用户登录数据库,而授权是赋予认证的用户各种权限,是用户有访问的不同资源和进行各种操作的权限。
1. mongodb认证机制
mongodb提供多种认证机制:
- SCRAM (Default)
- MongoDB Challenge and Response (MONGODB-CR) (3.6版本弃用)
- x.509 Certificate Authentication
企业版特有的认证机制:
2. mongodb认证
客户端认证(用户认证)
客户端认证是对连接到mongd或mongos的客户端进行认证确认
1 通过mongo shell认证
在命令行连接mongod或mongos实例时,使用如下参数:–username,–password,–authenticationDatabase
直接在命令行连接mongd或mongos,然后在mongo shell中切换到认证数据库后运行authenticate命令或db.auth()方法
2 在编程语言的驱动中认证
参考驱动文档
Internal Authentication(集群数据库成员间认证)
在集群部署中,除了对客户端进行认证,集群中各成员的数据库实例间也需要进行认证(Internal Authentication)。如果开启了Internal Authentication,客户端认证也会被开启,连接数据库是必须进行客户端认证。
Internal Authentication 方法:
* keyfile
* x.509
3. 创建用户
use admin
switched to db admin
db.createUser(
... {
... user: 'admin',
... pwd: 'admin',
... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
... }
... )
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
4. 内置角色:
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三个角色,就间接或直接提供了系统超级用户的访问)
5. 每个角色具体权限:
1. read:允许用户读取指定数据库
2. readWrite:允许用户读写指定数据库
3. dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
4. userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
5. clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。