MongoDb身份认证(Linux系统的讲解) 您所在的位置:网站首页 立体拼图图纸 MongoDb身份认证(Linux系统的讲解)

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

2024-06-18 10:07| 来源: 网络整理| 查看: 265

前言

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

认证方法 用户名,密码验证 创建用户

MongoDB 提供了 addUser 方法,该方法包含三个参数:

user - 字符串,表示用户名password - 字符串,对应的密码readOnly - boolean,可选参数,默认值为 false,表示是否是只读用户

示例:

db.addUser("guest", "pass", true)

修改用户密码: db.addUser(“guest”, “newpass”)

删除用户: db.removeUser(“guest”)

更复杂的使用方式请参考官方文档

可以将 MongoDB 的用户分为两类:超级用户和数据库用户。超级用户拥有最大权限,可以对所有数据库进行任意操作,超级用户储存在 admin 数据库中,刚安装的 MongoDB 中 admin 数据库是空的;数据库用户存储在单个数据库中,只能访问对应的数据库。另外,用户信息保存在 db.system.users 中。

关于用户和权限有以下特性:

数据库是由超级用户来创建的,一个数据库可以包含多个用户,一个用户只能在一个数据库下,不同数据库中的用户可以同名如果在 admin 数据库中不存在用户,即使 mongod 启动时添加了 –auth 参数,此时不进行任何认证还是可以做任何操作在 admin 数据库创建的用户具有超级权限,可以对 MongoDB 系统内的任何数据库的数据对象进行操作特定数据库比如 test1 下的用户 test_user1,不能够访问其他数据库 test2,但是可以访问本数据库下其他用户创建的数据不同数据库中同名的用户不能够登录其他数据库。比如数据库 test1 和 test2 都有用户 test_user,以 test_user 登录 test1 后,不能够登录到 test2 进行数据库操作 查看用户信息 查看单个用户 db.getUser('userName'); 查看所有用户信息 > db.getUsers() [ { "_id" : "admin.root", "userId" : UUID("54d7c5a9-511c-4517-986b-fa82e3040314"), "user" : "root", "db" : "admin", "roles" : [ { "role" : "dbOwner", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } ] > 给Mongdb创建一个用户管理员

1、先进入【admin】数据库,使用use admin

2、使用db.createUser( userObj , writeConcern )创建用户

db.createUser({ user:"myadmin", pwd:"xxxxxx", 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

可以使用命令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 "数据库名"

连接成功之后再认证

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

db.auth 验证成功打印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 用户认证的步骤:

在要启用认证的数据库中创建对应的用户如果 admin 中没有用户,则必须在 admin 中添加用户,否则即使使用 –auth 的方式启动 MongoDB,认证方式也无效,默认会拥有超级权限以认证方式,即 –auth 参数的方式启动 MongoDB 数据库用数据库对应的用户登录数据库,比如:mongo 127.0.0.1/test -u test_user -p pasword 本文转自

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

MongoDB用户和身份验证



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有