安全认证


  • 註冊用戶

    1. 前言

    • DBA 在日常的工作中有一项重要的工作就是保障数据库系统的安全。那么确保 MongoDB 运行在一个安全的环境中,并且保证访问它的机器都是可信任的,就成为了最好的方法。
    • MongoDB 提供的基于数据库级别的权限控制,每个数据库都有属于自己的管理者帐号。这一点不同于Mysql之类的数据库,Mysql中的用户是对创建的connection里面的每个数据库都具有操作权限。

    2. 安全认证原理

    • MongoDB是每个数据库都拥有一套属于自己的用户表。例如,有两个db A和B,在A中的用户UserA,在B中是不存在的,更不用说操作权限了。如果开启了安全性检查,只有通过了数据库认证的用户才能执行读写操作。在认证的过程中,MongoDB 将普通的数据作为 admin 数据库处理。admin 数据库中的用户将会视为管理员。在认证之后,管理员就可以读写所有数据库,执行数据库管理级的命令。

    3. 创建超级管理员

    • 在 MongoDB 中有个叫admin的数据库。这个admin数据库提供一个在其他数据库中不可使用的角色。这个角色可以在其他数据库中创建超级管理员。
    <code>#切换到admin数据库
    > use admin
    switched to db admin
    #创建超级管理员账号密码
    > db.createUser(
     {user:"admin",
      pwd:"admin",
      roles:[{role:"userAdminAnyDatabase",db:"admin"}]
     } )
    Successfully added user: {
            "user" : "admin",
            "roles" : [
                    {
                            "role" : "userAdminAnyDatabase",
                            "db" : "admin"
                    }
            ]
    }
    #验证账号密码,正确返回1,错误返回0
    > db.auth("admin","admin")
    1
    #也可以通过查询系统集合检验账号创建情况
    > db.system.users.find();
    { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : {
     "iterationCount" :10000,
     "salt" : "+IgnYVH/lh8ei7MFiazx3A==", 
    "storedKey" : "91QJOByldQaPEARRTMOECea67kg=", 
    "serverKey" : "Hl+EZjqjWOI7p7TMlyQcChcI9p4=" } }, 
    "roles" : [{ "role" : "userAdminAnyDatabase", "db" : "admin" } ]}
    </code>

    4. 配置安全认证

    • MongoDB 默认是没有开启验证的,开启用户验证需要自己去配置,下面我们开始配置工作。
    <code>//修改配置文件,开启验证模式
    D:\mongodb\bin>D:\mongodb\mongo.config
    //添加如下内容后保存退出
    auth=true
    //关闭mongod进程
    D:\mongodb\bin>taskkill /f /t /im mongod.exe
    SUCCESS: The process with PID 1664 (child process of PID 552) has been terminated.
    //启动mongod
    D:\mongodb\bin>mongod -f D:\mongodb\mongo.config
    //登录数据库
    D:\mongodb\bin>mongo
    </code>

    5. 管理员权限设置

    • 验证模式打开后,之前默认的超级管理员权限也就没有了,需要对我们之前创建的超级管理员帐号进行验证之后才能重新获得权限。
    <code>//未进行认证之前这个时候创建帐号会报错
    > use bitest
    switched to db bitest
    //创建数据库管理员帐号会报下面的错误
    //  Error: couldn't add user: notauthorized on bitest to executecommand......
    > db.createUser(
     {user:"biadmin",
      pwd:"biadmin",
      roles:[{role:"dbAdmin",db:"bitest"}]
     } )
    //切换到admin数据库
    > use admin
    switched to db admin
    //账号密码认证
    > db.auth("admin","admin")
    1
    //切换到bitest数据库创建数据库管理员账号
    > use bitest
    switched to db bitest
    //此时创建数据库管理员账号则会成功
    > db.createUser(
     {user:"biadmin",
      pwd:"biadmin",
      roles:[{role:"dbAdmin",db:"bitest"}]
     })
    Successfully added user: {
            "user" : "biadmin",
            "roles" : [
                    {
                            "role" : "dbAdmin",
                            "db" : "bitest"
                    }
            ]
    }
    //对刚创建的账号进行认证
    > db.auth("biadmin","biadmin")
    1
    //能够访问到认证模式打开之前所创建集合
    > show collections
    address
    bitest_database
    person
    person_name_tmp
    testmap
    </code>

    6. 管理员权限范围

    • 超级管理员(仅在admin数据库有效)权限包括:clusterAdmin、readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

    • 普通管理员权限包括:read、readWrite、dbAdmin、userAdmin

    • read:从单词的字面意思就知道了。就是对该数据库具有读的权限,也就是可以使用find函数。简单的列举一些: aggregate checkShardingIndex cloneCollectionAsCapped collStats count dataSize dbHash dbStats distinct filemd5 geoNear geoSearch geoWalk group mapReduce (inline output only.) text (beta feature.)

    • readWriet:具有读写权限。除了read具有的权限外 ,还拥有 insert(), remove(), and update().等。同样列举一些小的出来: cloneCollection (as the target database.) convertToCapped create (and to create collections implicitly.) drop() dropIndexes emptycapped ensureIndex() findAndModify mapReduce (output to a collection.) renameCollection (within the same database.)

    • dbAdmin :对数据库的所有操作权限,另外还有: clean collMod collStats compact convertToCapped create db.createCollection() dbStats drop() dropIndexes ensureIndex() indexStats profile reIndex renameCollection (within a single database.) validate

    • userAdmin:实际上就是对system.users的读写操作权限。

    • 以上四权限存在于一般的数据库中。


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待