Mongodb常用的身份验证方式

yizhihongxing

对于 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技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 深入分析Mongodb数据的导入导出

    以下是深入分析Mongodb数据的导入导出的完整攻略: 前言 Mongodb是一个流行的NoSQL数据库,它的数据是以BSON(Binary JSON)形式存储的,因此对Mongodb的数据导入导出需要比传统的关系型数据库更加谨慎。本文将针对Mongodb的导入导出进行详细的讲解。 Mongodb数据导出 在终端中使用mongoexport命令导出整个集合的…

    MongoDB 2023年5月16日
    00
  • 开源 5 款超好用的数据库 GUI 带你玩转 MongoDB、Redis、SQL 数据库(推荐)

    开源 5 款超好用的数据库 GUI 带你玩转 MongoDB、Redis、SQL 数据库(推荐) 如今,数据库已经成为了开发中非常重要的一部分,各种数据库的应用也越来越广泛。而在使用数据库的过程中,除了使用命令行管理工具,也有很多 GUI 工具可供选择。在这里,我们推荐了 5 款超好用的开源数据库 GUI 工具,包含 MongoDB、Redis、SQL 数据…

    MongoDB 2023年5月16日
    00
  • 使用批处理实现启动和停止服务的代码分析(net start&net stop)

    以下是使用批处理实现启动和停止服务的完整攻略: 1. 批处理实现启动服务 在Windows操作系统中,我们可以使用net start命令来启动服务。在批处理中添加net start命令,并指定需要启动的服务名称,即可实现启动服务的功能。 例如,我们需要启动Windows更新服务(Windows Update),则可以使用以下批处理代码: @echo off …

    MongoDB 2023年5月16日
    00
  • mongo数据集合属性中存在点号(.)的解决方法

    当Mongo数据库中的数据集合属性中存在点号(.)时,可能会造成一些问题,比如在通过代码或者mongo shell查询该属性时,可能会出现错误提示。这种情况的处理方法如下: 使用引号包围属性名,代码示例如下: db.collection.find({"属性名.属性名":value}) 其中,属性名被引号包围,属性名中的点号(.)不再被解析…

    MongoDB 2023年5月16日
    00
  • MongoDB中唯一索引(Unique)的那些事

    下面是MongoDB中唯一索引的详细讲解和示例说明: 什么是MongoDB中的唯一索引(Unique Index) 在MongoDB中,唯一索引是指制定了某些字段为唯一索引,这些字段的值必须是唯一的。MongoDB中唯一索引可以保证数据的唯一性和完整性,类似于关系型数据库中的唯一约束。 MongoDB中唯一索引的创建方式和其他索引相同,可以在MongoDB的…

    MongoDB 2023年5月16日
    00
  • mongodb 数据库操作详解–创建,切换,删除

    MongoDB数据库操作详解 本文主要介绍MongoDB数据库的基本操作,包括创建、切换和删除数据库,并提供相应的示例说明。 创建数据库 在MongoDB中,如果要创建一个新的数据库,可以使用以下命令: use db_name 例如,我们要创建一个名为“test”的数据库,可以输入以下命令: use test 如果数据库不存在,MongoDB会自动创建该数据…

    MongoDB 2023年5月16日
    00
  • Vercel+MongoDB Atlas部署详细指南

    下面我将详细讲解“Vercel+MongoDB Atlas部署详细指南”的完整攻略,包含两条示例说明。 Vercel+MongoDB Atlas部署详细指南 1. 准备工作 在开始部署之前,需要准备以下工作: 一个 Github 账号。 一份已经上传到 Github 的 Next.js 项目。 一个 MongoDB Atlas 账号。 2. 部署 Next.…

    MongoDB 2023年5月16日
    00
  • mongodb 命令行下及php中insert数据详解

    我来详细讲解一下 “MongoDB命令行下及PHP中insert数据详解” 的攻略,以下是完整的内容: MongoDB命令行下及PHP中insert数据详解 什么是MongoDB? MongoDB是一款开源的、高性能的NoSQL数据库系统,具有很高的可扩展性和可用性。它使用文档表示数据,支持丰富的数据查询和索引,并提供高度可用性和自动分片功能。 在命令行下插…

    MongoDB 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部