美文网首页
MongoDb身份认证(Linux系统的讲解)

MongoDb身份认证(Linux系统的讲解)

作者: 花式开心 | 来源:发表于2018-07-11 16:02 被阅读29次

    前言

    MongoDb在安装之后,默认使用27017端口,也不会提供默认的用户,更不会开启身份认证,这意味着只要有人知道你服务器的ip就可以链接上你的数据库,进行任何操纵,这无疑是,这无异于自家的大门对别人敞开,数据毫无安全性可言,所以这篇文章教大家怎么创建用户并开启安全验证。

    认证方法

    用户名,密码验证

    创建用户
    给Mongdb创建一个用户管理员

    1、先进入【admin】数据库,使用use admin
    2、使用db.createUser( userObj , writeConcern )创建用户

    db.createUser({
        user:"myadmin",
        pwd:"123qwezxc",
        roles:[
            {
                role:"userAdminAnyDatabase",
                db:"admin"
            }
        ]
    })
    

    解释 : 通过上面的代码给【admin】数据库添加了一个拥有【userAdminAnyDatabase】【readWriteAnyDatabase】权限的用户,userAdminAnyDatabase所具有的权限主要是创建用户,给用户授予或撤销角色,readWriteAnyDatabase拥有对数据库拥有读写权限。mondb的官方文档对于角色做了详细的说明,想了解一些可以戳这里

    开启身份验证的两种方式

    1、连接时使用命令参数 --auth

    mongod --auth --port 27017 --dbpath '数据库文件的绝对路径'
    

    2、修改mongod.conf文件

    如果你使用配置文件启动mongodb,在配置文件中加入下列内容,这里有两种写法:

    • YMAL的配置文件格式(mongodb2.6版本之后引入的配置文件格式)
      注意:这里有一个大坑,yaml格式的配置文件,要求是同冒号+空格来分隔键值对,否则会解析错误。(当时折腾了很久)
    security:
      authorization: enabled
    
    image.png
    可以使用命令mongod -f /etc/mongod.conf启动mongodb,如果解析错误,会在终端打印出失败的原因,没有信息说明mongod实例启动成功了!
    • 2.6版本之前的配置文件格式(向后兼容的,所以两种格式的配置可以混用)
    auth=true
    

    以上两种修改方式,大家选择一种即可,修改完之后使用命令sudo service mongod restart 重启服务,再使用命令service mongod status查看服务是不是真的启动了,如果显示mongod start/running说明启动成功。之后就启用了角色访问控制,用户只能访问已被授予权限的数据库资源和操作。

    小贴士:windows用户可以参考如下命令,将mongodb安装为服务,这样就不用每次都去启动mongod实例

    #安装服务
    mongod --config "E:\someSoftWare\MongoDB\mongodb.config" --install --serviceName "mongo"
    #卸载服务
    mongod --dbpath "E:\someSoftWare\data\db" --logpath "E:\someSoftWare\data\log\mongodb.log"  --remove
    #启动服务
    net start mongo
    

    注意:这里config文件的路径要加双引号("),否则会一直提示找不到文件

    使用用户管理员登录数据库

    在连接期间进行身份验证
    mongo --port 27017 -u "登录名" -p "密码" --authenticationDatabase "数据库名"
    

    如果验证失败会在命令行打印如下信息


    image.png
    连接成功之后再认证
    #连接
    mongo --port 27017
    #进入admin数据库
    use admin
    #在admin数据库中认证
    db.auth('用户管理员名称','密码')
    
    image.png

    验证成功打印1,失败打印0.

    使用用户管理员创建其他用户,细化管理。

    给某个数据创建具有读权限的用户
    #给test数据库添加
    db.createUser({
        user:"readUser",
        pwd:'123qwezxc',
        roles:[
            {
                role:"read",
                db:"test"
            }
        ]
    })
    
    创建具有读写权限的用户
    db.createUser({
        user:"readWriteUser",
        pwd:'123qwezxc',
        roles:[
            {
                role:"readWrite",
                db:"test"
            }
        ]
    })
    
    创建具有数据备份权限的用户(只能在admin数据库中添加)
    db.createUser({
        user:"backupUser",
        pwd:'123qwezxc',
        roles:[
            {
                role:"backup",
                db:"admin"
            }
        ]
    })
    

    注意:db只能指定admin,因为backup和restore角色都在admin数据据库中

    创建具有数据备份权限的用户(只能在admin数据库中添加)
    db.createUser({
        user:"restoreUser",
        pwd:'123qwezxc',
        roles:[
            {
                role:"restore",
                db:"admin"
            }
        ]
    })
    

    mongodb系统内置了很多角色,这里就不一一列举了,可以查看mognodb内置角色,创建符合自己需求的用户。

    写在最后

    mongodb的用户角色管理还是相当灵活的,除了系统内置的一些角色,我们还可以使用db.createRole()去定制自己的角色,感兴趣的大家自行了解角色管理

    相关文章

      网友评论

          本文标题:MongoDb身份认证(Linux系统的讲解)

          本文链接:https://www.haomeiwen.com/subject/xyncpftx.html