管理 MongoDB

创建数据库

  • 语法
use DATABASE_NAME

说明:如果数据库不存在,则创建数据库,否则切换到指定数据库。

创建用户

语法

use admin

db.createUser(
  {
    user: "用户名",
    pwd: "密码",
    roles: [ 
        { role: "角色", db: "数据库" } 
        ]
  }
)

示例

  • 示例 1 : 创建超级管理员
use admin

db.createUser(
  {
    user: "root",
    pwd: "root*123",
    roles: [ 
        { role: "root", db: "admin" } 
        ]
  }
)

说明:

创建了一个超级管理,用户名:root 密码:root*123 ,在数据库 admin 上赋予该用户角色 root 权限 。

  • 示例 2 : 创建管理员用户
use admin

db.createUser(
  {
    user: "adminUser",
    pwd: "adminPass",
    roles: [ 
        { role: "userAdminAnyDatabase", db: "admin" } 
        ]
  }
)

说明:

创建了一个管理员用户,用户名:adminUser 密码:adminPass ,在数据库 admin 上赋予该用户角色 userAdminAnyDatabase 权限 。

  • 示例 3 : 创建普通用户
use admin

db.createUser(
  {
    user: "user1",
    pwd: "pwd1",
    roles: [ 
        { role: "readWrite", db: "testdb1" } ,
        { role: "read", db: "testdb2" } ,
        ]
  }
)

说明:

创建了一个普通用户,用户名:user1 密码:pwd1 ,在数据库 testdb1 上赋予该用户角色 readWrite,具有 “读写” 权限 ,同时在数据库 testdb2 上赋予该用户角色 read,具有 “只读” 权限 。

内建角色

  • read :允许用户读取指定数据库
  • readWrite :允许用户读写指定数据库
  • dbAdmin :允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问 system.profile 。
  • userAdmin :允许用户向 system.users 集合写入,可以在指定数据库里创建、删除和管理用户。
  • clusterAdmin :只在 admin 数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase :只在 admin 数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase :只在 admin 数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase :只在 admin 数据库中可用,赋予用户所有数据库的 userAdmin 权限
  • dbAdminAnyDatabase :只在 admin 数据库中可用,赋予用户所有数据库的 dbAdmin 权限。
  • root :只在 admin 数据库中可用。超级账号,超级权限。

修改用户

修改一个用户的角色、密码等信息;

语法

use admin

db.updateUser(
   "<username>",
   {
     roles : [
       { role: "<role>", db: "<database>" } | "<role>",
       ...
     ],
     pwd: "<cleartext password>"
   },
   
)

详细语法参考:https://www.mongodb.com/docs/v3.6/reference/method/db.updateUser/

设置 MongoDB 用户名密码登录

MongoDB 默认可以直接连接,没有身份验证,毫无疑问,这会令服务器产生安全风险,恶意攻击者可以借此入侵数据库,恶意篡改数据。

  • 通过配置文件开启用户名密码登录
security:
   authorization: enabled

说明:将 security.authorization 属性设置为 enabled

重置 MongoDB 管理员密码

当遗忘 MongoDB 的管理员用户的密码时,可以采用以下方式进行重置。

  1. 以服务器管理员修改 MongoDB 启动配置,注释禁用“登录认证”属性
# security:
#    authorization: enabled
  1. 重启 MongoDB 进程,进入 admin 库,修改管理员密码
use admin

db.changeUserPassword('root', 'newPassword')
  1. 修改 MongoDB 启动配置,重新启用“登录认证”属性,然后重启 MongoDB 进程
security:
   authorization: enabled

至此,成功完成重置 MongoDB 管理员密码。

备份数据

创建具有备份权限的管理员用户

此操作只需执行一次。

  • 以系统管理员账号登录进入 mongo db 服务器

    mongo --host 192.168.100.101 --port 27017 -u root   
  • 切换至要备份的目标数据库:testdb ,创建用户

    > use testdb   
    > db.createUser({user:"opadmin_name",pwd:"opadmin_pwd@123",roles:[{role:"backup",db:"admin"},{role:"restore",db:"admin"}]})

角色 backuprestore 是 mongodb 内置的角色,仅具有备份和恢复权限。 查看所有内置角色的命令:

db.runCommand(
	{
		rolesInfo: 1,
		showBuiltinRoles: true
	}
)

参考:https://www.mongodb.com/docs/v5.0/reference/command/rolesInfo/

执行备份命令

  • 进入 mongodb-tools 的安装目录,执行 mongodump 命令

语法

mongodump --host host --port port -d dbname -u username -p password -o bankup_output_dir

> mongodump --host 127.0.0.1 --port 27017 -d testdb -u opadmin_name -p opadmin_pwd@123 -o /data/backup/testdb_`date "+%Y%m%d%H%M%S"`.dump
>
> cd /data/backup/
> zip testdb_20240213203057.dump.zip testdb_20240213203057.dump/*

恢复数据

创建具有备份权限的管理员用户

参考上一步的操作。

执行恢复命令

  • 进入 mongodb-tools 的安装目录,执行 mongodump 命令

语法

mongorestore --host host --port port -d dbname -u username -p password bankup_output_dir

> unzip testdb_20240213203057.dump.zip -d /data/backup/
>    
> mongorestore --host 127.0.0.1 --port 27017 -d testdb -u opadmin_name -p opadmin_pwd@123 -o /data/backup/testdb_20240213203057.dump
最近更新:
发布者: huanghaiquan
扫码咨询