docker 部署
docker run -d \
--name mongo \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=123456 \
-p 27017:27017 \
-v ./local-mongo-data:/data/db \
mongo:latest
或者编写 docker-compose.yaml
文件。如下:
version: '3.1'
services:
mongo:
image: mongo:latest
container_name: mongo
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 123456
ports:
- 27017:27017
volumes:
- ./local-mongo-data:/data/db # 挂载本地目录到容器的数据目录
常用命令
# 登录
mongosh -u root -p --authenticationDatabase admin ## 输入密码
## 查看数据库
show dbs
## 切换数据库
use [dbname]
## 查看表
show tables
## 查看数据
db.[table name].find()
创建用户
1. 连接到 MongoDB
首先,连接到 MongoDB 实例 使用管理员权限
:
bash mongosh -u root -p --authenticationDatabase admin
2. 选择数据库
你可以在任意数据库中创建角色,通常会在 admin
数据库中创建全局角色,或者在某个特定的数据库中创建角色。
use mydatabase // 选择一个特定的数据库,或使用 admin 数据库
3. 创建角色
使用 db.createRole()
方法来创建一个角色。你可以指定该角色的权限、作用域以及可以访问的数据库。
语法:
db.createRole({
role: "roleName", // 角色名称
privileges: [ // 权限数组
{
resource: { db: "databaseName", collection: "collectionName" }, // 权限作用的数据库和集合
actions: [ "action1", "action2" ] // 角色具有的操作权限,如 "find", "insert", "update" 等
}
],
roles: [ // 角色继承其他角色
{ role: "otherRoleName", db: "databaseName" }
]
});
4. 角色权限说明
MongoDB 中的权限可以控制特定的操作(如读取、写入、创建索引等)。以下是一些常见的操作权限:
"find"
:读取文档。"insert"
:插入文档。"update"
:更新文档。"remove"
:删除文档。"createCollection"
:创建集合。"createIndex"
:创建索引。"dropCollection"
:删除集合。"dropIndex"
:删除索引。
5. 示例:创建一个自定义角色
假设我们希望为 mydatabase
创建一个角色,该角色允许用户在该数据库中进行插入和查询操作。我们可以使用以下命令:
db.createRole({
role: "insertAndFindRole", // 角色名称
privileges: [
{
resource: { db: "mydatabase", collection: "" }, // 对 mydatabase 数据库的所有集合进行权限控制
actions: ["find", "insert"] // 该角色具有 "find" 和 "insert" 权限
}
],
roles: [] // 不继承其他角色
});
6. 查看已创建的角色
要查看当前数据库中所有的角色,可以使用以下命令:
show roles
或者查看特定数据库中的角色:
use mydatabase
show roles
7. 将角色授予用户
创建角色后,您可以将角色分配给用户。使用 db.grantRolesToUser()
来给用户分配角色。
db.grantRolesToUser("myuser", [
{ role: "insertAndFindRole", db: "mydatabase" }
]);
或者创建用户
db.createUser({ user: "user", pwd: "123456", roles: [{role: "insertAndFindRole", db: "test" }]})
8. 删除角色
如果你不再需要某个角色,可以使用 db.dropRole()
删除它:
db.dropRole("insertAndFindRole");
常见问题
1. 无法登录 MongoDB
问题描述:
当你创建了 MongoDB 用户后,可能会遇到用户无法登录的问题。
解决方法:
MongoDb的用户是与数据库绑定的,默认使用创建用户时所在的数据库作为认证数据库。如果用户在一个数据库中创建,但在登录时没有正确指定认证数据库,可能会导致认证失败。
为了解决这个问题,可以通过在连接字符串中添加 ?authSource=admin
来明确指定认证数据库。
示例:
如果你在 admin
数据库中创建了用户,但尝试登录其他数据库,可以使用如下连接方式:
mongo -u <username> -p <password> --authenticationDatabase admin --db <your-database>
或者,如果通过 URL 连接:
mongodb://<username>:<password>@localhost:27017/<your-database>?authSource=admin
这样可以确保 MongoDB 正确地在 admin
数据库中进行身份验证。