专栏首页运维经验分享mongo的身份验证和授权

mongo的身份验证和授权

mongo的身份验证和授权

问题来源

刚装好的mongo,准备登陆进去测一把的,结果就给我报这个错,鄙人是新手,还不太清楚这个,现学一下~

Mongo的身份验证

在上一篇安装mongo的博客中(https://www.cnblogs.com/tuhooo/p/9673685.html),提供了一个简单的配置文件,其中有个选项是

auth=true

这里的意思是开启身份验证,有用户,密码,角色,权限之类的东西,如果把auth设为false的话,那么mongo就相当于裸奔了,谁都可以连进来。如果服务器安全性挺高的,裸奔倒也不是问题。但是现在的版本还是推荐把这个auth给打开。

认证、授权和用户

身份认证:验证用户的身份,你是谁

授权:判定用户在通过了身份验证的数据库上可以进行那些操作,比如读,写,只读,只写等

auth=true会禁止对数据库的匿名访问。

Mongo中用户的信息在system.users集合中,改集合存在于管理数据库中(我这里的是admin),它存储了用户id,密码和创建该集合所面向的数据库以及对用户授权的权限。

在打印的用户信息的第一行中,"user" : "tuhooo", "db" : "admin",表示了tuhooo这个用户及其关联的数据库"admin",它们两个唯一标识了Mongo中的一个用户。如果两个用户具有相同名称,但是关联到了不同的数据库,那么它们被认为是两个不同的用户。

在用户信息的倒数第二行:"roles" : [ { "role" : "read", "db" : "admin" }, { "role" : "userAdminAnyDatabase", "db" : "admin" } ]表明了tuhooo在这个用户可以有不同数据库的不同权限(这里只有一个库,因为我还没来得及建测试库)。如果两个用户具有相同的名称但是关联到了不同的数据库,那么它们被认为是两个不同的用户。

小结:

用户名和关联的数据库唯一标识了Mongo中的一个用户。

一个用户可以在不同数据库中具有不同授权级别的多个角色。

Mongo中的角色

Mongo中可用的角色有以下:

read

提供了对指定数据库所有集合的只读访问。

readWrite

提供了指定数据库中对任意集合的读写访问。

dbAdmin

用户可以在指定数据库中执行管理操作,使用ensureIndex、dropIndexes、reIndex、indexStats管理索引、重命名集合、创建集合等。

userAdmin

用户可以对指定数据库的system.users集合进行readWrite操作。它还启用了对已有用户的权限进行修改或者创建用户的功能,实际上指定了数据库的超级用户角色。

clusterAdmin

使得用户可以对修改或显示与整个系统有关的信息的管理操作授予访问权限。clusterAdmin只适用于管理数据库。

readAnyDatabase

使得用户可以读取Mongo环境中的任意数据库。

readWriteAnyDatabase

类似于readWrite,只不过它适用于所有数据库。

userAdminAnyDatabase

类似于userAdmin,只不过它适用于所有数据库。

dbAdminAnyDatabase

类似于dbAdmin,只不过它适用于所有数据库。

其他角色

从2.6版本开始,一个用户管理员还可以通过提供集合级别以及命令级别的访问权限来创建遵循最小权限策略的用户定义的角色。用户定义的角色仅作用于创建它的数据库中,并且被数据库和角色名称的组合唯一标识。所有用户定义的角色都被存储在system.roles集合中。

几个常见操作

登陆mongo

上图是我登陆的过程,刚用mongo连接进去了,然后直接:

db.auth("tuhooo", "123456")

居然给我报错,只有切换到admin库,然后在这个库下面才能做登陆。

切记切换到admin进行登陆操作。

创建用户并授权

// 客户端连接
$ mongo
// 切换到admin库
> use admin
// 创建用户
> db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
   }
 )
// 登陆, 只有登陆后才能进行其他操作
> db.auth("myUserAdmin", "abc123")
// 授予角色, 可以根据前面的介绍以及个人需要来授予
> db.grantRolesToUser("myUserAdmin", [ { role: "read", db: "admin" } ])
// 查看状态
> db.stats()

以上就是这样了~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MongoDB 设置用户名密码登录

    2018年06月08日 10:22:47 Liu-YanLin 阅读数:16801

    拓荒者
  • MongoDB数据库、集合分片操作

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    拓荒者
  • MongoDB认证和授权

    MongodDB存储所有的用户信息在admin数据库的集合system.users中,保存数据库、密码和数据库信息。MongoDB默认不启用权限认证,只要能连接...

    拓荒者
  • 数据运营系列(一):生存分析与用户行为如何联系起来

    生存分析主要用于医学研究,比如医疗方案对病人寿命的影响。后面用来探究所感兴趣的事件的发生的时间的统计方法。比如产品的寿命分析、工程中的失败时间分析等等。这里病人...

    木东居士
  • python flask web基本结构 登录模块 常用

    flask-login werkzeug itsdangerous flask-mail flask-bootstrap flask-wtf

    用户5760343
  • Frame在自动化中的处理

    在自动化中,如果一个元素定位不到,那么最大可能是在iframe中,我们先了解frame。frame是html中的框架,在html中,所谓框架就是可以在同一个浏...

    无涯WuYa
  • Ps回调函数.拦截驱动模块原理+实现.

    主要是讲解.内核中如何拦截模块加载的. 需要熟悉.内核回调的设置 PE知识. ShellCode

    IBinary
  • mongodb之用户权限

    db.createUser({user:'test',pwd:'123456',roles:[{role:'readWrite',db:'unittest'}]...

    拓荒者
  • vn.py2-行情记录的使用

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    钱塘小甲子
  • Python: 将TXT文件写入MySQ

    安装MySQLdb时,报错缺少Visual C++ 9.0。解决方法:下载并安装MySQL-python 1.2.5 . https://pypi.python...

    py3study

扫码关注云+社区

领取腾讯云代金券