mongodb的访问控制

  

内建角色,具体参考:https://docs.mongodb.com/manual/reference/built-in-roles

  

阅读:允许用户读取指定数据库
读写:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建,删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建,删除和管理用户
clusterAdmin:只在管理数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在管理数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在管理数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在管理数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在管理数据库中可用,赋予用户所有数据库的dbAdmin权限。
根:只在管理数据库中可用。超级账号,超级权限

  

用户文件在管理库下的system.users表里,默认MongoDB没有访问密码,不太安全

  

1。添加数据库管理员用户adminUser和普通用户herrywen

  
 <代码> mongo——端口27017
  使用管理
  db.createUser (
  {
  用户:“adminUser”,
  pwd:“adminPass”,
  角色:[{角色:“userAdminAnyDatabase”, db:“admin”}]
  }
  )
  
  使用herrywen
  db.createUser (
  {
  用户:“herrywen”,
  pwd:“herrywen”,
  角色:[{角色:“读写”,db: " herrywen "},
  {角色:“读”,db:“admin”}]
  }
  ) 
  

2。在192.168.255.134增加配置文件,开启验证

  
 <代码>猫/etc/mongod.conf
  安全:
  授权:启用 
  

3。重启mongdb服务
<代码> systemctl重启mongdb

  

4。测试看下是否可以访问了

  
 <代码> [root@worker1 ~] # mongo——主机192.168.255.134端口27017 - u adminUser - p adminPass——authenticationDatabase“admin”
  MongoDB shell版本v4.2.1
  连接mongodb://192.168.255.134:27017 ? authSource=admin&压缩机=disabled& gssapiServiceName=mongodb
  会话隐含的会话:{" id ": UUID (f5114890-0b2e-43a2-8a60-a8b265e68a44)}
  MongoDB服务器版本:4.2.1。准备
  MongoDB企业比;使用管理;
  转向数据库管理
  MongoDB企业比;显示集合;
  system.users
  system.version
  MongoDB企业比;退出
  再见 
  

5。如果直接登陆,在切换管理库时,提示没有任何权限。需要使用db.auth()进行验证

  
 <代码> [root@worker1 ~] # mongo——主机192.168.255.134端口27017
  MongoDB shell版本v4.2.1
  连接mongodb://192.168.255.134:27017 ?压缩机=disabled& gssapiServiceName=mongodb
  会话隐含的会话:{" id ": UUID (“9 bcb1b37 - 7 - cfa - 4等于off - 8947 - 6 - d633eee01be ")}
  MongoDB服务器版本:4.2.1。准备
  MongoDB企业比;使用管理
  转向数据库管理
  MongoDB企业比;显示集合;
  警告:无法运行listCollections,试图通过解析connectionStatus近似集合的名字
  MongoDB企业比;显示集合;
  警告:无法运行listCollections,试图通过解析connectionStatus近似集合的名字
  MongoDB企业比;db.auth (“adminUser”、“adminPass”)
  1
  MongoDB企业比;显示集合;
  system.users
  system.version  
  

6。直接登陆herrywen库

  
 <代码> [root@worker1 ~] # mongo——主机192.168.255.134端口27017 - u herrywen - p herrywen——authenticationDatabase“herrywen”
  MongoDB shell版本v4.2.1
  连接mongodb://192.168.255.134:27017 ? authSource=herrywen&压缩机=disabled& gssapiServiceName=mongodb
  会话隐含的会话:{" id ": UUID (“9 d906997 - 681 - 43 - b4 b541 dbe5d197cd1f ")}
  MongoDB服务器版本:4.2.1。准备
  MongoDB企业比;使用herrywen
  切换到db herrywen
  MongoDB企业比;显示集合;
  MongoDB企业比;db.test3。插入({标题:“MongoDB”,
  …描述:“你好,世界”,
  …:“herrywen”,
  …url:“http://www.51cto.com”,
  …标签:[“mongodb”、“数据库”、“NoSQL”),
  …喜欢:100})
  WriteResult ({“nInserted”: 1})
  MongoDB企业比;显示集合; 
  

7。给adminUser用户增加对herrywen库的读写权限

  
 <代码>使用管理
  db。grantRolesToUser (“adminUser”,[{角色:“读写”,db:“herrywen”}))
  .pretty db.system.users.find () (); 
  

8。给herrywen用户增加herrywen1库的读写权限和管理数据库的读权限

  
 <代码> herrywen使用
  db。grantRolesToUser (“herrywen”,[{角色:“读写”,db:“herrywen1”},{角色:“读”,db:“admin”}]) 

mongodb的访问控制