MongoDB 是一款非关系型数据库,由于其高效性、灵活性及易用性,越来越受到开发者的青睐。但是,在使用 MongoDB 进行数据存储时,对于数据安全的保护必须重视并加强,否则就可能出现数据泄露或者被篡改等严重后果。本文将介绍 MongoDB 中的数据安全加固措施,包括认证、授权、加密传输等多个方面。
认证
在 MongoDB 中,认证功能需要手动启用,在启用后,数据库才可以设置访问权限。认证主要是通过用户名和密码来验证用户的身份。下面是MongoDB的认证流程:
- 客户端发起连接请求;
- 服务器返回信息验证客户端是否已经进行了认证;
- 客户端发送认证请求,请求内容包含用户名和密码;
- 服务器验证用户身份,如果身份验证成功,则客户端被授权进行特定的操作。
启用认证
启用认证需要对MongoDB进行配置:
- 修改MongoDB配置文件
mongod.cfg
。
security: authorization: enable
- 重启MongoDB
sudo /etc/init.d/mongodb restart
用户添加
在启用了认证之后,才能进行用户的添加和授权操作。下面是在 MongoDB 中创建一个用户的代码:
use admin; db.createUser( { user: "admin", pwd: "password123", roles: [ "root" ] } );
以上代码中,通过 db.createUser()
方法来创建一个名为 admin
的用户,密码为 password123
,并授予 root
角色权限。
验证用户身份
如果默认的认证方式无法满足需求,可以使用自定义认证方式。如下例中,使用自定义认证方式,通过设置 MONGODB-CR
协议的形式验证用户身份。
mongo localhost:28018/admin --eval 'db.auth("admin", "password123", "MONGODB-CR")'
授权
在 MongoDB 中,授权是由角色(Role)来进行的,每个角色具有不同的权限。使用授权功能可以根据不同的需求设定不同的用户角色,通过该方式防止非法越权操作,从而保障数据的安全性。
下面是MongoDB中创建角色的代码:
use admin; db.createRole({role: "ROLE_GENERAL", privileges: [ { resource: { db: "test", collection: "test_collection" }, actions: [ "find", "update"] } ], roles: [] });
在上例中创建了一个名为 ROLE_GENERAL
的角色,该角色具有 test
数据库中test_collection
集合的 find
和 update
操作的权限。
为了使得新创建的角色生效,还需要添加用户并将其授权。下面是MongoDB中为用户授权的代码:
use admin; db.createUser({user: "user_general", pwd: "password_general", roles: [{ role: "ROLE_GENERAL", db: "test"}]});
查看角色列表
可以使用 show roles
命令来查看已经创建的角色列表:
use admin; db.getRoles({showPrivileges:true,showBuiltinRoles:true})
加密传输
在互联网环境下,使用明文进行传输会有被窃听的风险,MongoDB 支持 SSL/TLS 加密,可以使用加密方式传输数据,从而保障数据的安全性。
在MongoDB上启用 SSL ,需要对MongoDB 进行以下配置:
- 生成SSL证书。
openssl req -newkey rsa:2048 -new -x509 -days 365 -nodes -out mongodb-cert.crt -keyout mongodb-cert.key
生成证书后,需要将证书文件放到MongoDB可读取的文件夹。
- 配置MongoDB
net: ssl: mode: requireSSL PEMKeyFile: /path/to/mongodb-cert.key CAFile: /path/to/mongodb-cert.crt allowConnectionsWithoutCertificates: false
以上配置文件中,启用了 requireSSL
模式,使用的证书路径为 /path/to/mongodb-cert.key
和 /path/to/mongodb-cert.crt
。
在SSL模式下访问MongoDB时,需要在连接URL中添加 ssl=true
参数,如下所示:
mongodb://user:password@localhost:27017/my_database?ssl=true
总结
数据安全是现代应用的重要组成部分,MongoDB 提供了对数据安全的支持,包括认证、授权和加密传输等多个方面。在使用 MongoDB 时,应当根据应用的实际需求,设置相应的数据安全措施,从而避免数据泄露和被篡改等问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64586c52968c7c53b0acdff6