主要步骤
- 创建管理员用户:在MongoDB的admin数据库中创建管理员用户,使用
createUser
命令。例如:
use admin
db.createUser(
{
user: "adminUser",
pwd: "adminPassword",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
- 开启身份验证:在所有节点(mongos、config server、shard server)的配置文件中添加
security.authorization: enabled
。
- 为各个数据库创建用户:连接到每个需要认证的数据库,使用管理员用户登录后,为该数据库创建普通用户。例如:
use testDB
db.createUser(
{
user: "testUser",
pwd: "testPassword",
roles: [ { role: "readWrite", db: "testDB" } ]
}
)
关键组件
- mongos:作为分片集群的查询路由器,接收客户端请求并转发到相应的分片。需要配置
security.authorization: enabled
来开启身份验证。它会从config server获取认证相关信息。
- config server:存储集群的元数据,包括分片信息、数据库和集合的路由信息等。同样需要
security.authorization: enabled
配置开启认证。它保存了整个集群的用户信息,是身份验证的重要数据存储处。
- shard server:实际存储数据的节点,也需要通过
security.authorization: enabled
开启认证。它从config server获取认证配置,验证客户端请求。
组件在身份验证配置方面的区别
- mongos:主要负责接收客户端请求并转发,自身不存储用户数据,依赖config server获取认证信息。它对客户端请求进行初步认证,然后将请求转发到相应分片。
- config server:存储整个集群的用户信息和认证配置,是认证信息的核心存储组件。其他组件(mongos和shard server)依赖它获取认证相关数据。
- shard server:负责实际的数据存储和读取,根据从config server获取的认证信息对本地数据的访问请求进行验证。在配置上与mongos、config server类似,但功能主要集中在本地数据的访问控制。