MongoDB - 设置数据库的用户名和密码(开启登录密码认证)
我之前写过一篇文章介绍如何在 Linux 环境下进行 MongoDB 数据库的安装和使用(点击跳转)。但是默认情况下,启动的 MongoDB 没有登录密码,在生产环境中这是非常不安全的。
(4)然后根据 PID 杀死对应的进程:
(5)编辑 mongodb.conf 文件:
(6)在里面添加 auth=true 后保存退出:
(7)然后执行如下命令重新启动 MongoDB 实例即可:
(2)连上后进行认证登录,如果结果返回 1 则说明正确连接:
MongoDB 其实也可以开启登录密码验证,但是不同于 MySQL、Oracle 等关系型数据库,MongoDB 中每一个库都有独立的密码,在哪一个库中创建用户就要在哪一个库中验证密码。下面通过样例进行演示。
1,创建一个超级用户
(1)首先进入 mongodb 文件夹,并连接上 mongodb 服务器实例:
cd /usr/local/mongodb ./mongo --port 24017
(2)执行如下命令,在 admin 库中创建一个超级用户(对所有数据库都有读写权限):
MongoDB 中内置角色说明:
- read:提供读取所有非系统的集合(数据库)
- readWrite:提供读写所有非系统的集合(数据库)和读取所有角色的所有权限
- dbAdmin:提供执行管理任务的功能,例如与架构相关的任务,索引编制,收集统计信息。此角色不授予用户和角色管理权限。
- dbOwner:提供对数据库执行任何管理操作的功能。此角色组合了readWrite,dbAdmin 和 userAdmin 角色授予的权限。
- userAdmin :提供在当前数据库上创建和修改角色和用户的功能。由于 userAdmin 角色允许用户向任何用户(包括他们自己)授予任何权限,因此该角色还间接提供对数据库的超级用户访问权限,或者,如果作用于管理数据库,则提供对群集的访问权限。
- clusterAdmin :提供最佳的集群管理访问。此角色组合了 clusterManager,clusterMonitor 和 hostManager 角色授予的权限。此外,该角色还提供了 dropDatabase 操作。
- readAnyDatabase :仅在 admin 数据库中使用,提供所有数据库的读权限。
- readWriteAnyDatabase :仅在 admin 数据库中使用,提供所有数据库的读写权限
- userAdminAnyDatabase :仅在 admin 数据库中使用,提供与 userAdmin 相同的用户管理操作访问权限,允许用户向任何用户(包括他们自己)授予任何权限,因此该角色还间接提供超级用户访问权限。
- dbAdminAnyDatabase :仅在 admin 数据库中使用,提供与 dbAdmin 相同的数据库管理操作访问权限,该角色还在整个群集上提供 listDatabases 操作。
- root:仅在 admin 数据库中使用,提供超级权限
db.createUser( { user: "root", pwd: "123", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ] } )

(3)退出实例,执行如下命令查看 mongodb 进程:
ps aux |grep mongodb

(4)然后根据 PID 杀死对应的进程:
kill -15 22671
(5)编辑 mongodb.conf 文件:
vi mongodb.conf
(6)在里面添加 auth=true 后保存退出:
dbpath=/usr/local/mongodb/data/db #数据文件存放目录 logpath=/usr/local/mongodb/data/log/mongodb.log #日志文件存放目录 logappend=true #开启日志追加添加日志 port=24017 #端口,默认27017,可以自定义 bind_ip=0.0.0.0 #本地监听IP,0.0.0.0表示允许所有IP fork=true #以守护程序的方式启用,即在后台运行 auth=true #权限验证
(7)然后执行如下命令重新启动 MongoDB 实例即可:
./mongod --config mongodb.conf
2,使用用户登录
(1)再次连接 mongodb 服务器:./mongo --port 24017
(2)连上后进行认证登录,如果结果返回 1 则说明正确连接:
use admin db.auth('root','123')

(3)当然我们也可以直接一开始就使用用户密码进行连接:
./mongo --port 24017 -u "root" --authenticationDatabase "admin" -p "123"
附:创建一个普通用户
下面命令创建一个用户名为 tester 的普通用户,该用户可以读写数据库 test, 只读数据库 reporting。
use admin db.createUser( { user: "tester", pwd: "123", roles: [ { role: "readWrite", db: "test" }, { role: "read", db: "reporting" } ] } )