注册

Mongodb常用的身份验证方式

对于 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 --sslCAFile 参数启用身份验证并启用 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