管理 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 的管理员用户的密码时,可以采用以下方式进行重置。
- 以服务器管理员修改 MongoDB 启动配置,注释禁用“登录认证”属性
# security:
# authorization: enabled
- 重启 MongoDB 进程,进入 admin 库,修改管理员密码
use admin
db.changeUserPassword('root', 'newPassword')
- 修改 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"}]})
注
角色
backup
和restore
是 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