MongoDB(73)如何设置用户权限?

在 MongoDB 中,用户权限是通过角色(roles)来管理的。每个角色集合了对数据库和集合的特定操作权限,通过将角色赋予用户,可以控制用户在数据库中的权限。以下是详细的步骤和代码示例,展示如何设置用户权限。

1. 连接到 MongoDB 实例

使用 mongo 客户端连接到 MongoDB 实例:

bash 复制代码
mongo

2. 切换到 admin 数据库

大多数管理操作,包括创建用户和设置权限,都是在 admin 数据库中完成的:

javascript 复制代码
use admin

3. 创建管理员用户

如果还没有管理员用户,需要先创建一个管理员用户,以便能够执行后续的管理操作:

javascript 复制代码
db.createUser({
  user: "adminUser",
  pwd: "adminPassword",
  roles: [
    { role: "userAdminAnyDatabase", db: "admin" },
    { role: "readWriteAnyDatabase", db: "admin" }
  ]
})

4. 启用身份验证

编辑 MongoDB 配置文件 mongod.conf 来启用身份验证:

yaml 复制代码
security:
  authorization: enabled

重启 MongoDB 服务以应用配置更改:

bash 复制代码
sudo systemctl restart mongod

5. 创建用户和设置权限

切换到需要管理权限的目标数据库,并创建用户和分配角色。

5.1. 创建数据库用户

切换到目标数据库,例如 testdb

javascript 复制代码
use testdb

创建一个具有读写权限的数据库用户:

javascript 复制代码
db.createUser({
  user: "dbUser",
  pwd: "dbPassword",
  roles: [
    { role: "readWrite", db: "testdb" }
  ]
})
5.2. 创建只读用户

创建一个只读用户:

javascript 复制代码
db.createUser({
  user: "readonlyUser",
  pwd: "readonlyPassword",
  roles: [
    { role: "read", db: "testdb" }
  ]
})
5.3. 创建自定义角色

首先切换到 admin 数据库,然后创建自定义角色:

javascript 复制代码
use admin

创建一个自定义角色,例如 customRole,它具有对 testdb 数据库的特定权限:

javascript 复制代码
db.createRole({
  role: "customRole",
  privileges: [
    { resource: { db: "testdb", collection: "" }, actions: [ "find", "update" ] },
    { resource: { db: "testdb", collection: "logs" }, actions: [ "insert", "remove" ] }
  ],
  roles: []
})

将自定义角色赋予用户:

javascript 复制代码
use testdb

db.createUser({
  user: "customUser",
  pwd: "customPassword",
  roles: [
    { role: "customRole", db: "testdb" }
  ]
})

6. 更新现有用户权限

可以使用 updateUser 方法更新现有用户的权限。例如,给现有用户 dbUser 赋予额外的角色:

javascript 复制代码
db.updateUser("dbUser", {
  roles: [
    { role: "readWrite", db: "testdb" },
    { role: "customRole", db: "testdb" }
  ]
})

7. 验证权限

使用新创建的用户连接到 MongoDB 实例,并尝试执行一些操作,以验证权限是否正确:

bash 复制代码
mongo -u "dbUser" -p "dbPassword" --authenticationDatabase "testdb"

在 MongoDB Shell 中:

javascript 复制代码
use testdb

// 读写测试
db.collection_name.insert({ "key": "value" }) // 应该成功
db.collection_name.find()                     // 应该成功
db.collection_name.update({ "key": "value" }, { $set: { "key": "newValue" } }) // 应该成功
db.collection_name.remove({ "key": "newValue" }) // 应该成功

// 自定义角色权限测试
db.logs.insert({ "log": "entry" }) // 应该成功
db.logs.remove({ "log": "entry" }) // 应该成功
db.collection_name.drop() // 失败,如果用户没有删除集合的权限

总结

通过上述步骤,可以在 MongoDB 中创建用户、分配角色和权限,以及验证用户权限。以下是一个完整示例脚本,展示了如何设置用户权限:

bash 复制代码
#!/bin/bash

MONGO_HOST="localhost"
MONGO_PORT="27017"
ADMIN_USER="adminUser"
ADMIN_PASS="adminPassword"

# 管理员用户创建(如果尚未创建)
mongo --host $MONGO_HOST --port $MONGO_PORT admin <<EOF
db.createUser({
  user: "$ADMIN_USER",
  pwd: "$ADMIN_PASS",
  roles: [
    { role: "userAdminAnyDatabase", db: "admin" },
    { role: "readWriteAnyDatabase", db: "admin" }
  ]
})
EOF

# 启用身份验证(编辑 mongod.conf 并重启 MongoDB 服务)
# security:
#   authorization: enabled

# 创建数据库用户
mongo --host $MONGO_HOST --port $MONGO_PORT -u "$ADMIN_USER" -p "$ADMIN_PASS" --authenticationDatabase "admin" testdb <<EOF
db.createUser({
  user: "dbUser",
  pwd: "dbPassword",
  roles: [
    { role: "readWrite", db: "testdb" }
  ]
})
EOF

# 创建只读用户
mongo --host $MONGO_HOST --port $MONGO_PORT -u "$ADMIN_USER" -p "$ADMIN_PASS" --authenticationDatabase "admin" testdb <<EOF
db.createUser({
  user: "readonlyUser",
  pwd: "readonlyPassword",
  roles: [
    { role: "read", db: "testdb" }
  ]
})
EOF

# 创建自定义角色并赋予用户
mongo --host $MONGO_HOST --port $MONGO_PORT -u "$ADMIN_USER" -p "$ADMIN_PASS" --authenticationDatabase "admin" admin <<EOF
db.createRole({
  role: "customRole",
  privileges: [
    { resource: { db: "testdb", collection: "" }, actions: [ "find", "update" ] },
    { resource: { db: "testdb", collection: "logs" }, actions: [ "insert", "remove" ] }
  ],
  roles: []
})
EOF

mongo --host $MONGO_HOST --port $MONGO_PORT -u "$ADMIN_USER" -p "$ADMIN_PASS" --authenticationDatabase "admin" testdb <<EOF
db.createUser({
  user: "customUser",
  pwd: "customPassword",
  roles: [
    { role: "customRole", db: "testdb" }
  ]
})
EOF

通过这些步骤和代码示例,可以在 MongoDB 中精准地设置用户权限,确保数据库的安全性和操作的规范性。

相关推荐
NCIN EXPE1 分钟前
redis 使用
数据库·redis·缓存
MongoDB 数据平台2 分钟前
为编码代理引入 MongoDB 代理技能和插件
数据库·mongodb
极客on之路7 分钟前
mysql explain type 各个字段解释
数据库·mysql
代码雕刻家15 分钟前
MySQL与SQL Server的基本指令
数据库·mysql·sqlserver
lThE ANDE16 分钟前
开启mysql的binlog日志
数据库·mysql
yejqvow1224 分钟前
CSS如何控制placeholder文字的颜色_使用--placeholder伪元素
jvm·数据库·python
oLLI PILO30 分钟前
nacos2.3.0 接入pgsql或其他数据库
数据库
m0_7436239233 分钟前
HTML怎么创建多语言切换器_HTML语言选择下拉结构【指南】
jvm·数据库·python
pele41 分钟前
Angular 表单中基于下拉选择动态启用字段必填校验的完整实现
jvm·数据库·python