设为首页 收藏本站
查看: 1169|回复: 0

[经验分享] Mongodb之权限认证管理

[复制链接]

尚未签到

发表于 2018-10-24 13:34:19 | 显示全部楼层 |阅读模式
  Mongodb默认是不开启认证的,对于数据库来说,这有很大的安全隐患,下面记录下生产中Mongodb权限认证的方法。

一,环境

  阿里云:CentOS Linux>  Mongodb版本: 3.6.2

二,添加超级用户
  Mongodb的权限认证是基于数据库的,要想创建普通用户,必须要通过管理员来操作。
  

   > use admin  > db.createUser(    {
  user: "root",
  pwd: "123456",
  roles: [ { role: "root", db: "admin" } ]
  }
  )
  
#结果如下
  
Successfully added user: {
  "user" : "root",
  "roles" : [
  {
  "role" : "root",
  "db" : "admin"
  }
  ]
  
}
  

  

  查看用户
  

> show users  
{
  "_id" : "admin.root",
  "user" : "root",
  "db" : "admin",
  "roles" : [
  {
  "role" : "root",
  "db" : "admin"
  }
  ]
  
}
  

三,添加普通用户
  

> db.createUser(  {
  user: "test",
  pwd: "123456",
  roles: [ { role: "readWrite", db: "test" }],
  }
  )
  #执行结果
  
Successfully added user: {
  "user" : "test",
  "roles" : [
  {
  "role" : "readWrite",
  "db" : "test"
  },]
  
}
  

  

四,配置Mongodb开启验证
  两种方式,一种是mongodb启动时加入--auth参数,另一种是修改配置文件。这里采用修改配置文件的方式。
  vi  mongo.conf
  

logpath=/mnt/mongodb/logs/mongodb.log  
logappend=false
  
dbpath=/mnt/mongodb/data/db
  
fork=true
  
# Enable the HTTP interface (Defaults to port 28017).
  
#httpinterface=true
  
bind_ip=192.168.1.54
  
port=27017
  
auth=true       #添加auth配置
  

  重启mongodb:
  

ps -ef | grep -v grep | grep mongo | awk '{print $2}' | xargs kill -HUP  
mongod -f /opt/mongodb/etc/mongo.conf
  

  这时再用默认方式登录Mongodb:
  

mongo  
MongoDB shell version v3.6.2
  
connecting to: mongodb://192.168.1.54:27017/test
  
MongoDB server version: 3.6.2
  
> show dbs
  
2018-03-02T11:55:38.884+0800 E QUERY    [thread1] Error: listDatabases failed:{
  "ok" : 0,
  "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0, $db: \"admin\" }",
  "code" : 13,
  "codeName" : "Unauthorized"
  
} :
  
_getErrorWithCode@src/mongo/shell/utils.js:25:13
  
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:65:1
  
shellHelper.show@src/mongo/shell/utils.js:813:19
  
shellHelper@src/mongo/shell/utils.js:703:15
  
@(shellhelp2):1:1
  
>
  

  会提示没有权限操作。这时需要auth方法去认证。
  

> use admin  
switched to db admin
  
> db.auth('root', '123456')
  
1
  

  返回1说明认证通过。同理,认证test则需要进入test数据库中,再执行auth方法
  

> use test  
switched to db test
  
> db.auth('test', '123456')
  
1
  

  当然也可以在mongo客户端连接时指定用户名密码,如下:
  

mongo -u test -p 123456 --authenticationDatabase test  

  参数比较简单,这里就不做说明了。
  最后,介绍下Mongodb中角色的定义:
  角色说明:
  

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

  Mongodb官方关于角色的定义:https://docs.mongodb.com/manual/core/security-built-in-roles/



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-625989-1-1.html 上篇帖子: MongoDB常用脚本配置方法 下篇帖子: MongoDB 3.6 部署实录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表