Mongodb空密码可连接安全性问题

记一次踩坑,系统扫漏洞发现有一些空密码用户,test,web,admin等,但经过查询并没有发现这些用户。用navicat远程连接的时候,填好库名,不填写用户名和密码,测试也可以连通(但不会能查询和操作)。

后来查询到,mongodb默认是连接test库,但是没有认证是无法执行命令行的。

因为mongodb默认情况下,连接和和操作是不需要授权验证的,而且连接和身份认证不同,即使设置了认证,依然可以连接到库,只是无法操作和查看任何数据。

身份认证也就是每次操作时的du.auth('username','password')的操作。

为了保证安全问题

所以mongodb要设置身份认证,

启动mongodb服务要带上-auth命令,要求操作需要认证,也可以在mongod.conf文件里修改,很多相关的博客讲过。

绑定可连接的ip,可以修改端口号防止有人尝试性连接。

修改mongod.conf里的设置ip bind_ip=localhost,172.XXX.XXX.XXX,如果可以让任何人可以连接就设置成0.0.0.0。

设置防火墙,不让公网访问或者限制ip访问。

 

### 使用用户名和密码连接MongoDB 的方法 为了实现通过用户名和密码安全地连接MongoDB 数据库,可以按照以下方式构建 Connection URI 并使用它来建立数据库连接。 以下是基于提供的引用以及标准实践的一个完整示例: #### 构建带有认证的 MongoDB 连接字符串 当需要提供用户名和密码时,MongoDB 支持一种特定格式的 URI 字符串用于身份验证。URI 格式的结构如下所示[^1]: `mongodb://<username>:<password>@<hostname>/<dbname>` 其中 `<username>` 是登录名,`<password>` 是对应的密码,而 `<hostname>` 则表示目标主机地址或 IP 地址,最后 `<dbname>` 表明要使用的具体数据库名称。 如果存在多个副本集成员或者分片集群,则可以在 hostname 部分指定多台服务器并用逗号隔开;另外还可以附加一些选项参数以进一步配置客户端行为,比如设置读偏好、写关注级别等等[^2]。 #### Java 中利用 Spring Data MongoDB 实现带账号密码连接 假如项目里已经引入了 Spring Boot 和其官方支持的数据访问框架——Spring Data MongoDB,在这种情况下可以通过 `application.properties` 文件定义上述提到的那种形式化的 connection string 来完成初始化工作[^3]。 下面是一个简单的例子展示如何在应用程序属性文件中声明这样的链接信息: ```properties spring.data.mongodb.uri=mongodb://myUser:myPass@mongo.example.com/myDatabase?authSource=admin&ssl=true ``` 这里需要注意的是增加了两个额外查询参数: - **authSource**: 定义执行用户授权操作所在的管理数据库,默认通常设为 admin; - **ssl**: 启用了 TLS/SSL 加密传输层保护机制。 对于更复杂的场景下可能还需要考虑其他因素如超时设定等细节处理。 #### Python 示例代码片段 (pymongo 库) 除了 Java 外部依赖之外,Python 社区也广泛采用 PyMongo 作为驱动程序之一来进行交互开发。下面是另一个关于怎样借助该工具包创建具备基本安全性保障条件下的会话实例演示: ```python from pymongo import MongoClient client = MongoClient('mongodb://myUser:myPass@mongo.example.com/myDatabase') db = client['myDatabase'] collection = db['testCollection'] document_count = collection.count_documents({}) print(f"Number of documents in testCollection: {document_count}") ``` 以上脚本展示了从远程受控资源获取集合对象之后简单统计文档数量的过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值