对于 Mongodb 常用的身份验证方式,主要有以下两种:
1. SCRAM-SHA
SCRAM-SHA 是一种新的身份验证机制,它基于 Salted Challenge Response Authentication Mechanism(SCRAM)协议,提供更安全的密码验证。SCRAM-SHA 分为 SCRAM-SHA-1 和 SCRAM-SHA-256 两种方式。在 MongoDB 4.0 及之后的版本中默认使用 SCRAM-SHA-256 方式验证。
配置 SCRAM-SHA-256 验证
1.启用身份验证功能
在启动 MongoDB 时,需使用 --auth
参数启用身份验证功能。
2.创建超级管理员账户
> use admin
> db.createUser(
... {
... user: "admin",
... pwd: "123456",
... roles: [ { role: "root", db: "admin" } ]
... }
... )
3.为普通用户授予角色
在创建用户时,需确保用户具备在相关数据库上执行所需的操作的角色。下面的示例创建了一个名为 user1,密码为 123456 的用户,并将其授予 readWriteAnyDatabase 权限。
> use test
> db.createUser(
... {
... user: "user1",
... pwd: "123456",
... roles: [ { role: "readWriteAnyDatabase", db: "admin" } ]
... }
... )
SCRAM-SHA-1 验证配置方法与 SCRAM-SHA-256 类似,在此不再赘述。
2. X.509
X.509 是一种公钥基础结构(PKI)标准,是使用数字证书进行身份验证的协议。与 SCRAM-SHA 不同,X.509 不需要使用用户名/密码验证方式,而是使用数字证书完成身份验证。
配置 X.509 验证
1.生成或获取证书
首先需要获取或生成证书,可以使用自签名证书或颁发机构(CA)证书。
2.启用身份验证功能
在启动 MongoDB 时,使用 --auth --sslMode requireSSL --sslPEMKeyFile <pem_file> --sslCAFile <ca_file>
参数启用身份验证并启用 SSL/TLS 加密。
3.将客户端证书添加到数据库中
> use admin
> db.runCommand({
... createUser: "CN=myClient,OU=client",
... roles: [
... {role: "readWrite", db: "myDatabase"}
... ],
... userSource: "$external"
... })
此示例中,CN=myClient,OU=client 为证书的公用名称(Common Name,CN)和组织单位(Organizational Unit,OU)。需要根据实际证书信息进行替换。
4.配置 MongoDB 实例,使其接受客户端证书
在配置文件中添加以下配置,使 MongoDB 实例接受客户端证书。
net:
# ...
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/rootCA.pem
示例
使用 openssl 命令生成自签名证书
$ openssl req -newkey rsa:2048 -nodes -keyout mongodb.key -x509 -days 365 -out mongodb.crt
将证书拼接成 pem 格式
$ cat mongodb.crt mongodb.key > mongodb.pem
启动 MongoDB 并启用身份验证与 SSL/TLS 加密
$ mongod --auth --sslMode requireSSL --sslPEMKeyFile /path/to/mongodb.pem --sslCAFile /path/to/rootCA.pem
创建用户并授予角色
> use admin
> db.runCommand({
... createUser: "CN=myClient,OU=client",
... roles: [
... {role: "readWrite", db: "test"}
... ],
... userSource: "$external"
...})
使用证书连接 MongoDB 实例
$ mongo --ssl --sslPEMKeyFile /path/to/mongodb.pem --host localhost --username 'CN=myClient,OU=client' --authenticationMechanism MONGODB-X509
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mongodb常用的身份验证方式 - Python技术站