MongoDb的权限控制
-
在 MongoDB 里确认一个用户的方式是某一数据库的某一用户,即A库的user1用户和B库的user1用户是两个用户。
-
注意:在 admin 的数据库中创建的用户是超级管理员,登陆后可以操作任何的数据库。
-
MongoDB使用RBAC权限模型。
-
MongoDB可以使用多种认证机制,如:
- SRAM(基于【用户名:密码】的形式,不需要重启的动态认证方式)(默认)
- x.509 证书认证(数字证书)
- LDAP代理身份认证
- Kerberos身份认证
show dbs; --查看所有数据库
use admin; --切换到admin数据库
-- 创建用户并指定角色,和可以访问的数据库
-- 注意创建的角色只能在创建的库登录,创建用户的这个数据库称为该用户的认证数据库
db.createUser({
user:'user',
pwd:'passwd',
roles:[
{
role:'userAdminAnyDatabase',
db:'admin'
}
]
})
- Mongo提供了一些默认的角色。
权限 | 描述 |
---|---|
read | 提供读取所有非系统集合的数据权限。 |
readWrite | 提供read角色和修改所有非系统集合的数据权限。 |
dbAdmin | 提供数据库管理的能力,例如与模式相关的任务、索引和收集统计信息。此角色不授予用户和角色管理权限。 |
dbOwner | 提供该数据库下所有权限操作能力。 |
userAdmin | 提供该数据库下用户和权限的创建和修改的操作能力。可以创建dbOwner权限。 |
clusterAdmin | 提供最大的集群管理访问。 |
clusterManager | 提供对集群的管理和监控操作。具有此角色的用户可以访问config 和local 数据库,分别用于分片和复制。 |
clusterMonitor | 提供对监控工具的只读访问。 |
hostManager | 提供监控和管理能力。 |
backup | 数据备份能力。 |
restore | 数据恢复能力。 |
readAnyDatabase | 与read相同但作用与全部数据库。 |
readWriteAnyDatabase | 同上。 |
userAdminAnyDatabase | 同上。 |
dbAdminAnyDatabase | 同上。 |
root | 超级管理员,简而言之,畅通无阻。 |
-
当然也可以手动创建一个角色
-
当创建了一个具有用户管理员权限的账户后,即可修改配置文件中的auth字段为true,启用权限认证。
更新用户:
db.updateUser(
"username",
{
pwd: 'password', // 或者使用passwordPrompt()后置密文输入密码
customData: { title: "Senior Manager" }
}
)
删除用户:
MongoDB的权限信息控制维护在System.user集合中,只需要删除对应的用户文档即可。