mongoDB 启用鉴权设置

前言

默认情况下,mogoDB 是没有鉴权的,也就是只要知道他的地址和服务的端口,任何人都可以连接他并且可以完全控制他。这对于新手上手来说是比较方便的,但是用在线上环境显然就是不可接受的了。实际上 mongoDB 是提供了完整的认证和授权机制的,只是需要对此进行专门设置一下。这里我们就简要的介绍一下。
本文的前提是已经安装了新的 mongoDB 并且还没有设置需要鉴权。mongoDB 的安装请参考 《CentOS7下 RPM 方式安装 mongoDB 4》。

设置管理员账号

首先,默认情况下,mongoDB 是没有管理员账号的,我们将 mongoDB 设置为需要用户认证之前,需要首先增加一个管理员账号。否则就没有办法进入 mongoDB 了。首先通过命令行连接到 mongoDB 交互环境

mongo --port 32937

进入交互环境后,用如下的命令在 admin 数据库中增加一个

use admin
db.createUser(
  {
    user: "admin",
    pwd: "yourpassword",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

设置 mongoDB 启用鉴权

要启用鉴权,可以在命令行启动 mongoDB 的时候增加 --auth 参数。我们是用配置文件的方式启动的,所有直接在配置文件中增加启用鉴权的设置即可。在 /etc//mongod.conf 中增加如下的配置项

security:
  authorization: enabled

然后用如下命令重新启动 mongoDB ,再次访问 mongoDB 就需要用户认证了

systemctl restart mongod

用户认证访问 mongoDB

用户认证可以在命令行连接的时候指定如下所示

mongo --port 32937 -u 'admin' -p 'yourpassword'

这个的主要问题是别人从操作系统的命令历史列表中能完整看到这个命令,从而暴露了密码。

也可以不指定验证信息,连接上 mongoDB 后在做一次认证即可。例如

[root@localhost ~]# mongo --port 32937
MongoDB shell version v4.0.5
connecting to: mongodb://127.0.0.1:32937/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("aa4b9f06-a199-4833-9b12-4bbf6940c68f") }
MongoDB server version: 4.0.5
> use admin
switched to db admin
> db.auth('admin','yourpassword')
1

最后显示了鉴权的结果为 1 ,表示鉴权通过了。可以对数据库进行操作了。

你可能感兴趣的:(mongoDB 启用鉴权设置)