1. MongoDB 授权简介
MongoDB 是一款流行的 NoSQL 数据库,广泛应用于互联网、金融、电商和大数据等场景。但是,如果不注意 MongoDB 的授权策略,就会使数据面临安全隐患。因此,在使用 MongoDB 存储关键数据前,务必仔细了解 MongoDB 的授权模式,并结合实践经验,制定科学可行的 MongoDB 授权策略。
2. MongoDB 授权模式
2.1 根据身份验证方式划分
目前,MongoDB 支持两种身份验证方式:
传统身份验证方式:需要在启动 mongod 实例时使用 --auth 参数指定认证模式,用户认证信息将被保存在 admin 数据库内。
SCRAM-SHA-1 身份验证方式:这是 MongoDB 默认推荐的身份验证方式,使用这种方式进行身份验证时,建议使用证书式身份验证模式(使用 TLS/SSL 协议),这种方式更加安全。
db.createUser({
user: "plainuser",
pwd: "plainpassword",
roles: [{ role: "readWrite", db: "myapp" }]
})
2.2 根据用户角色划分
MongoDB 支持多种角色,可以根据具体的业务场景配置用户对应的角色,以实现数据的访问控制。
read:只读权限,可以查询数据库和集合、执行聚合操作以及 explain 查询计划。
readWrite:读写权限,拥有 read 权限的所有能力。
userAdmin:用户管理权限,可以对当前数据库的用户和角色进行创建、修改和删除操作。
dbAdmin:数据库管理权限,可以对当前数据库进行备份、还原、修复和故障转移等操作。
root:超级管理员权限,可以访问所有数据库。
3. MongoDB 授权策略
3.1 基本授权策略
基本授权策略是最简单的 MongoDB 授权方案,只需要创建一个只有读取和写入权限的用户即可。例如,假设需要建立一个名为 myapp 的数据库,仅允许用户进行读写操作:
use myapp
db.createUser({
user: "myappuser",
pwd: "myapppassword",
roles: [{ role: "readWrite", db: "myapp" }]
})
这样,就可以使用以下命令从客户端连接到 MongoDB 实例:
mongo -u myappuser -p myapppassword --authenticationDatabase myapp
3.2 多用户授权策略
在多用户授权策略中,我们可以配置多个用户,并根据业务需求,授权不同的角色和权限。
例如,假设需要建立一个名为 myapp 的数据库,有两类用户,分别为普通用户(只读权限)和管理员(读写权限)。则可以首先创建一个拥有用户管理权限的管理员用户:
use myapp
db.createUser({
user: "myappadmin",
pwd: "myappadminpwd",
roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
})
然后,在使用管理员用户登录之后,再创建一个普通用户(只读权限):
use myapp
db.createUser({
user: "myappuser",
pwd: "myapppassword",
roles: [{ role: "read", db: "myapp" }]
})
此时,普通用户就可以使用如下命令连接到 MongoDB 实例:
mongo -u myappuser -p myapppassword --authenticationDatabase myapp
3.3 数据库级别和集合级别的授权策略
在 MongoDB 中,可以通过数据库级别和集合级别的授权策略,精细地控制用户对数据库中数据的访问权限。
例如,在创建一个名为 myapp 的数据库时,可以设置如下的授权策略:
use myapp
db.createUser({
user: "myappadmin",
pwd: "myappadminpwd",
roles: [
{ role: "readWrite", db: "myapp" },
{ role: "dbAdmin", db: "myapp" },
{ role: "userAdmin", db: "myapp" }
]
})
这里,管理员用户拥有 readWrite 权限和 dbAdmin、userAdmin 权限,他可以对 myapp 中的所有集合进行读写、备份和恢复操作,还可以创建删除用户。
同时,我们还可以针对 myapp 中的一些敏感集合,例如订单信息(orders)集合,配置如下集合级别的授权策略,仅限于特定角色和用户:
use myapp
db.runCommand({
collMod: "orders",
user: "orderuser",
pwd: "orderpassword",
roles: ["read"]
})
这里,我们创建了一个名为 orderuser 的只读用户,仅限于 orders 集合的读取,保证了数据的安全性。
4. 总结
在使用 MongoDB 存储关键数据时,务必要注意 MongoDB 的授权策略,制定科学可行的 MongoDB 授权方案,以保证数据的安全性。
在 MongoDB 授权方案的设计中,我们可以根据身份验证方式、用户角色、数据库级别和集合级别等多个维度进行相应的授权设置。这将有效地防止非法用户对数据库和集合进行访问。