博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mongodb之权限认证管理
阅读量:6496 次
发布时间:2019-06-24

本文共 2712 字,大约阅读时间需要 9 分钟。

Mongodb默认是不开启认证的,对于数据库来说,这有很大的安全隐患,下面记录下生产中Mongodb权限认证的方法。

一,环境

阿里云:CentOS Linux release 7.4.1708 (Core)

Mongodb版本: 3.6.2

二,添加超级用户

Mongodb的权限认证是基于数据库的,要想创建普通用户,必须要通过管理员来操作。

> use admin   > db.createUser(    {        user: "root",        pwd: "123456",        roles: [ { role: "root", db: "admin" } ]   }  ) #结果如下Successfully added user: {    "user" : "root",    "roles" : [        {            "role" : "root",            "db" : "admin"        }    ]}

查看用户

> show users{    "_id" : "admin.root",    "user" : "root",    "db" : "admin",    "roles" : [        {            "role" : "root",            "db" : "admin"        }    ]}

三,添加普通用户

> db.createUser(   {     user: "test",     pwd: "123456",     roles: [ { role: "readWrite", db: "test" }],   } ) #执行结果Successfully added user: {    "user" : "test",    "roles" : [        {            "role" : "readWrite",            "db" : "test"        },]}

四,配置Mongodb开启验证

两种方式,一种是mongodb启动时加入--auth参数,另一种是修改配置文件。这里采用修改配置文件的方式。

vi mongo.conf

logpath=/mnt/mongodb/logs/mongodb.loglogappend=falsedbpath=/mnt/mongodb/data/dbfork=true# Enable the HTTP interface (Defaults to port 28017).#httpinterface=truebind_ip=192.168.1.54port=27017auth=true       #添加auth配置

重启mongodb:

ps -ef | grep -v grep | grep mongo | awk '{print $2}' | xargs kill -HUPmongod -f /opt/mongodb/etc/mongo.conf

这时再用默认方式登录Mongodb:

mongoMongoDB shell version v3.6.2connecting to: mongodb://192.168.1.54:27017/testMongoDB server version: 3.6.2> show dbs2018-03-02T11:55:38.884+0800 E QUERY    [thread1] Error: listDatabases failed:{    "ok" : 0,    "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0, $db: \"admin\" }",    "code" : 13,    "codeName" : "Unauthorized"} :_getErrorWithCode@src/mongo/shell/utils.js:25:13Mongo.prototype.getDBs@src/mongo/shell/mongo.js:65:1shellHelper.show@src/mongo/shell/utils.js:813:19shellHelper@src/mongo/shell/utils.js:703:15@(shellhelp2):1:1>

会提示没有权限操作。这时需要auth方法去认证。

> use adminswitched to db admin> db.auth('root', '123456')1

返回1说明认证通过。同理,认证test则需要进入test数据库中,再执行auth方法

> use testswitched to db test> db.auth('test', '123456')1

当然也可以在mongo客户端连接时指定用户名密码,如下:

mongo -u test -p 123456 --authenticationDatabase test

参数比较简单,这里就不做说明了。

最后,介绍下Mongodb中角色的定义:
角色说明:

read:允许用户读取指定数据库 readWrite:允许用户读写指定数据库 dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限 readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限 userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 root:只在admin数据库中可用。超级账号,超级权限

Mongodb官方关于角色的定义:

转载于:https://blog.51cto.com/hld1992/2074619

你可能感兴趣的文章
Linux常用命令
查看>>
【重磅】云栖社区2017年度内容特辑
查看>>
Java WEB开发时struts标签 显示set内容
查看>>
spring-data-elasticsearch 概述及入门(二)
查看>>
Solr启动和结束命令
查看>>
1.12 xshell密钥认证
查看>>
3.2 用户组管理
查看>>
awk
查看>>
AliOS Things SMP系统及其在esp32上实现示例
查看>>
VMware虚拟机出现“需要整合虚拟机磁盘”的解决方法
查看>>
ibatis 动态查询
查看>>
汇编语言之实验一
查看>>
09、Modules - Directory根据目录加载模块文件
查看>>
观影识人生
查看>>
The Little Prince-12/12
查看>>
git 调用 Beyond Compare
查看>>
ECMAScript 5 —— Function 类型 (一)
查看>>
SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)[转]
查看>>
android实现图片识别的几种方法
查看>>
bzoj1030[JSOI2007]文本生成器
查看>>