跳到正文
Kale的数字花园
目录 文章
/3 分钟/3 阅读/0 评论

mongoDB用户操作

默认情况下,MongoDB实例启动运行时是没有启用用户访问权限控制的,也就是说,在实例本机服务器上都可以随意登录实例进行各种操作,MongoDB不会对连接客户端进行用户验证,可以想象这是非常危险的。如果需要强制开启用户访问控制(用户验证),

用户授权

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

mongo权限设计

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

设置密码

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:

创建数据库

  1. use admin
  2. db.auth('admin','123456')
  3. db.createUser({user:"xxx",pwd:"xxx",roles:[{role:"dbOwner",db:"xxxDB"}]})
  4. use xxxDB
  5. db.createCollection("test")

参考文档:

https://mongodb.net.cn/manual/security/

https://www.cnblogs.com/igoodful/p/13706220.html

评论需要登录。生产环境使用 GitHub 登录,本地可前往 登录页 使用开发登录。

还没有评论,来抢沙发。