前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mongo的身份验证和授权

mongo的身份验证和授权

作者头像
拓荒者
发布2019-06-16 11:56:35
1.5K0
发布2019-06-16 11:56:35
举报
文章被收录于专栏:运维经验分享运维经验分享

mongo的身份验证和授权

问题来源

image
image

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

Mongo的身份验证

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

auth=true

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

认证、授权和用户

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

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

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

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

image
image

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

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

小结:

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

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

image
image

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

image
image

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

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

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

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

创建用户并授权

代码语言:javascript
复制
// 客户端连接
$ 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()

以上就是这样了~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mongo的身份验证和授权
  • 问题来源
  • Mongo的身份验证
    • 认证、授权和用户
      • Mongo中的角色
        • read
        • readWrite
        • dbAdmin
        • userAdmin
        • clusterAdmin
        • readAnyDatabase
        • readWriteAnyDatabase
        • userAdminAnyDatabase
        • dbAdminAnyDatabase
        • 其他角色
    • 几个常见操作
      • 登陆mongo
        • 创建用户并授权
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档