zoukankan      html  css  js  c++  java
  • mongo的身份验证和授权

    问题来源

    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

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

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

    小结:

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

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

    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

    上图是我登陆的过程,刚用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()

    以上就是这样了~

  • 相关阅读:
    Orleans is a framework
    修改emlog后台登录路径的方法(转)
    form表单中的 action=./?> 是什么意思
    10 个迅速提升你 Git 水平的提示(转)
    为什么国外程序员爱用苹果Mac电脑?(转)
    Socket 专题
    Android 时间戳简单转化
    Android 常用时间格式转换代码
    Android AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
    Android AlarmManager类的应用(实现闹钟功能)
  • 原文地址:https://www.cnblogs.com/tuhooo/p/9675903.html
Copyright © 2011-2022 走看看