/3 分钟/4 阅读/0 评论
mongoDB用户操作
默认情况下,MongoDB实例启动运行时是没有启用用户访问权限控制的,也就是说,在实例本机服务器上都可以随意登录实例进行各种操作,MongoDB不会对连接客户端进行用户验证,可以想象这是非常危险的。如果需要强制开启用户访问控制(用户验证),
用户授权
默认情况下,MongoDB实例启动运行时是没有启用用户访问权限控制的,也就是说,在实例本机服务器上都可以随意登录实例进行各种操作,MongoDB不会对连接客户端进行用户验证,可以想象这是非常危险的。如果需要强制开启用户访问控制(用户验证),则需要在MongoDB实例启动时使用选项--auth或在指定启动配置文件中添加选项auth=true。
mongo权限设计

- 用户:
- 用于提供客户端连接 MongoDB 的认证账户
- 角色:
- 数据权限的集合,创建用户的时候必须要指定对应的角色,否则用户无法操作数据库,在MongoDB中通过角色对用户授予相应数据库资源的操作权限,每个角色当中的权限可以显式指定,也可以通过继承其他角色的权限,或者两都都存在的权限。
- 权限:
- 权限由指定的数据库资源(resource)以及允许在指定资源上进行的操作(action)组成。
- 资源(resource)包括:数据库、集合、部分集合和集群;
- 操作(action)包括:对资源进行的增、删、改、查(CRUD)操作。
- 权限由指定的数据库资源(resource)以及允许在指定资源上进行的操作(action)组成。
设置密码
1.新增用户
use admin //切换admin数据库

show users //查看所有用户信息
db.getUser("admin001")

创建用户:
use admin
db.createUser
{
user: "root",
pwd: "123",
roles: [
{ role: "admin",
db: "<database>" } | "<role>",
...
]
}
#基本语法说明:
user:用户名
pwd:密码
roles:
role:角色名
db:作用对象
role:root, readWrite,read
db.createUser({user:"admin00",pwd:"123456",roles:[{role:"dbOwner",db:"testDB"}]})
db.testCl.insert({ name: "value" })

2.修改配置文件
在mongo的安装目录下找到配置文件mongo.conf
打开mongo的权限认证
security:
authorization: enabled #注意缩进,缩进参照配置文件其他配置。
3.重启mongo服务
db.shutdownServer() //停止mongo服务
或
mongod -f /mongodb/conf/mongo.conf --shutdown
mongod -f /mongodb/conf/mongo.conf
## 登录验证
use admin
db.auth('admin001','123456')
安全认证成功开启

安全认证开启后再次操作权限需要登录授权
use admin
db.auth('admin001','123456')

root 角色管理的db:

dbOwner角色管理的db:

更新用户
db.updateUser("admin002",{roles:[{role:"manageOpRole",db:"testDB"}]}) #更新用户授权信息
删除用户
db.dropUser("admin002") #删除一个用户

db.dropAllUser() #删除所有用户
修改密码
db.changeUserPassword("admin002", "654321")
角色分类
mongo内置角色

用户自定义角色
添加角色,db.createRole()。MongoDB提供了更新现有用户定义角色的方法
在角色定义时可以包含一个或多个已存在的角色,新创建的角色会继承包含的角色所有的权限。
use admin
db.createRole({role: "manageOpRole",privileges: [{ resource: { cluster: true }, actions: [ "killop"] },{ resource: { db: "", collection: "" }, actions: [ "killCursors" ] }],roles: []})
db.revokeRolesfromRole("manageOpRole",[{role:"readAnyDatabase",db:"admin"}]) #角色移权
授权用户
db.grantRolesToUser("admin002",[{role:"readAnyDatabase",db:"admin"},{role:"manageOpRole",db:"admin"}]) #授权

想实现精细化权限控制又想简化用户管理,原则上建议只给开发创建一个账户,并且使用admin做认证库
extra:
创建数据库
- use admin
- db.auth('admin','123456')
- db.createUser({user:"xxx",pwd:"xxx",roles:[{role:"dbOwner",db:"xxxDB"}]})
- use xxxDB
- db.createCollection("test")
参考文档: