浅析MongoDB之安全认证
MongoDB是一款非关系型数据库,具有高性能、高可扩展性和易于开发等优点,在应用开发中得到了广泛应用。然而,由于MongoDB默认没有开启安全认证,使得安全性问题暴露出来,容易受到攻击。为了保证数据库安全,必须对MongoDB进行安全认证。本文就着重介绍了MongoDB的安全认证方案,以及如何实现安全认证、如何在不同类型的MongoDB集群中实现安全认证。
安全认证方案
MongoDB提供了两种安全认证方案:基于角色的访问控制(RBAC)和Kerberos认证。其中,RBAC方案适用于大多数应用场景,包括验证用户的用户名和密码。而Kerberos方案是适用于企业环境下的高安全性认证。
实现安全认证
创建管理员用户
MongoDB默认没有管理员用户,需要创建管理员用户。创建管理员用户的代码如下:
use admin
db.createUser({
user: "admin",
pwd: "password",
roles:[{role: "userAdminAnyDatabase", db: "admin"}]
})
其中,admin
是管理员用户,password
是管理员用户的密码,userAdminAnyDatabase
是用来管理所有数据库的角色。
创建普通用户
需要创建普通用户来对指定的数据库集合进行读写操作。创建普通用户的代码如下:
use test
db.createUser({
user: "test",
pwd: "testpasswd",
roles:[{role: "readWrite", db: "test"}]
})
其中,test
是普通用户,testpasswd
是普通用户的密码,readWrite
是用来对数据库读写操作的角色。
开启安全认证
在配置文件中将security.authorization
设置为enabled
,并重启MongoDB服务器即可开启安全认证。
针对不同类型的MongoDB集群实现安全认证
单节点MongoDB
在单节点MongoDB上配置安全认证,将security.authorization
设置为enabled
即可。
副本集MongoDB
在MongoDB副本集中,如果任意一个节点关闭了安全认证,那么就可能受到攻击。因此,在副本集MongoDB中,必须确认所有节点都已经开启安全认证。在每个节点上,使security.authorization
设置为enabled
,并重启MongoDB服务器。
分片集群MongoDB
在分片集群MongoDB中,每个分片都必须开启安全认证。在启动MongoDB时,使用mongos --auth
选项来启用安全认证。每个分片上必须创建管理员用户和普通用户,并将这些用户配置到mongos
的配置文件中。
示例说明
示例一
假设我们有一个MongoDB数据库,数据库名为testdb
。我们需要对该数据库进行安全认证,具体步骤如下:
- 创建管理员用户
use admin
db.createUser({
user: "admin",
pwd: "password",
roles:[{role: "userAdminAnyDatabase", db: "admin"}]
})
- 创建普通用户
use testdb
db.createUser({
user: "testuser",
pwd: "testpasswd",
roles:[{role: "readWrite", db: "testdb"}]
})
- 开启安全认证
将mongod
的配置文件中的security.authorization
设置为enabled
,并重启MongoDB服务器。
示例二
假设我们有一个分片集群MongoDB,具有三个分片。我们需要对这个分片集群进行安全认证,具体步骤如下:
- 在每个分片上创建管理员用户和普通用户
use admin
db.createUser({
user: "admin",
pwd: "password",
roles:[{role: "userAdminAnyDatabase", db: "admin"}]
})
use testdb
db.createUser({
user: "testuser",
pwd: "testpasswd",
roles:[{role: "readWrite", db: "testdb"}]
})
- 将这些用户配置到
mongos
的配置文件中,并使mongos
开启安全认证
sharding:
configDB: configdb/localhost:27017
clusterRole: shardsvr
security:
authorization: enabled
internalSecurity:
clusterAuthMode: keyFile
在security
中设置authorization
为enabled
,在internalSecurity
中设置对MongoDB集群的安全认证方式为keyFile。
- 重启MongoDB集群
sudo service mongod stop
sudo service mongod start
sudo service mongos stop
sudo service mongos start