当前位置: > > > MongoDB - 设置数据库的用户名和密码(开启登录密码认证)

MongoDB - 设置数据库的用户名和密码(开启登录密码认证)

    我之前写过一篇文章介绍如何在 Linux 环境下进行 MongoDB 数据库的安装和使用(点击跳转)。但是默认情况下,启动的 MongoDB 没有登录密码,在生产环境中这是非常不安全的。
    MongoDB 其实也可以开启登录密码验证,但是不同于 MySQLOracle 等关系型数据库,MongoDB 中每一个库都有独立的密码,在哪一个库中创建用户就要在哪一个库中验证密码。下面通过样例进行演示。

1,创建一个超级用户

(1)首先进入 mongodb 文件夹,并连接上 mongodb 服务器实例:
cd /usr/local/mongodb
./mongo --port 24017

(2)执行如下命令,在 admin 库中创建一个超级用户(对所有数据库都有读写权限):
MongoDB 中内置角色说明:
  • read:提供读取所有非系统的集合(数据库)
  • readWrite:提供读写所有非系统的集合(数据库)和读取所有角色的所有权限
  • dbAdmin:提供执行管理任务的功能,例如与架构相关的任务,索引编制,收集统计信息。此角色不授予用户和角色管理权限。
  • dbOwner:提供对数据库执行任何管理操作的功能。此角色组合了readWritedbAdminuserAdmin 角色授予的权限。
  • userAdmin :提供在当前数据库上创建和修改角色和用户的功能。由于 userAdmin 角色允许用户向任何用户(包括他们自己)授予任何权限,因此该角色还间接提供对数据库的超级用户访问权限,或者,如果作用于管理数据库,则提供对群集的访问权限。
  • clusterAdmin :提供最佳的集群管理访问。此角色组合了 clusterManagerclusterMonitorhostManager 角色授予的权限。此外,该角色还提供了 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" } ]
  }
)
评论0