mongodb操作之用户篇

0.前言

mongodb作为时下最为热门的数据库,那么其安全验证也是必不可少的,否则一个没有验证的数据库暴露出去,任何人可随意操作,这将是非常危险的。

本篇就mongodb的用户操作及用户验证来作探讨。

1. 安装

老生常谈的话题,网上很多优秀的教程,这里不再细说。

docker面世以来,后端部署和环境搭建已逐渐步入容器化时代,作为一名有追求有作为的程序员,你有必要对前沿的技术有所了解和探讨。

个人推荐使用docker搭建你的mongodb,操作也十分简单。

首先,获取docker官方的mongodb镜像,也可以是第三方源的镜像

docker pull mongo

效果图如下:


其次,启动你的mongo镜像,如下:

 docker run --name mymongo -p 27017:27017 -v /home/mongodb/data:/data/db -d mongo 

简单解释下:

docker run 命令用于启动一个容器, --name mymongo 指定容器的名称为mymongo

-p 27017:27017,将容器内27017端口映射到服务器27017端口

-v /home/mongodb/data:/data/db,指定数据存储目录/home/mongodb/data映射到容器内的/data/db存储目录

-d 守护进程运行

mongo 指定运行的镜像

那么,如何开启验证呢?

也简单,只需要加上--auth即可:

 docker run --name mymongo -p 27017:27017 -v /home/mongodb/data:/data/db -d mongo --auth

至此,一个mongo容器就可以跑起来了,还有更多可操作的地方,不在主题范围内,这里不做详细阐述。

要注意的是,首次启动,或还没有设置用户验证之前,请不要开启验证,后面会讲到。

2. 创建db管理账户

在创建用户之前,我们来看看db用户具体可以有哪些权限:

mongodb用户权限列表:

Read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用。超级账号,超级权限

mongodb有一个用户管理机制,简单描述为,有一个管理用户组,这个组的用户是专门为管理普通用户而设的,暂且称之为管理员。

管理员通常没有数据库的读写权限,只有操作用户的权限, 因此我们只需要赋予管理员userAdminAnyDatabase角色即可

另外管理员账户必须在admin数据库下创建,3.0版本后没有admin数据库,但我们可以手动use一个

use admin

下面我们来创建一个管理账户

首先,要进入mongo,以我本地数据库为例

如图:


如果数据库使用docker搭建的,则需要进入你的mongo容器内去操作。

比如,以我的服务器mongo镜像为例:

切换到admin数据库,创建管理员

进入mongo之后,那么意味着我们可以操作db了。

需要明白的一点是,管理员需要在admin数据库下创建,所以我们得进入admin数据库

使用use命令,即可进入某个数据库,如下:

use admin

切换到admin数据库后,我们可以查看db的用户列表,此时用户列表是空的,因为我们还没有创建db用户

db.system.users.find()
# 此时列表为空

接着,开始创建你的管理员账户,比如,创建一个用户名为super, 密码为superpwd的管理员账户:

db.createUser({ 
          user: ‘super’, 
          pwd: ‘superpwd’, 
          roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });

成功则会提示Successfully

注意:这里使用createUser()方法来创建,addUser()方法已经被废弃

管理员授权

创建管理员后,需要给管理员授权,否则无权限操作用户

授权也十分简单,如下:

db.auth('super','superpwd')

如果结果返回1,则表示授权成功,返回0则表示失败

至此,管理员创建完成。

下面是完整流程:


3. 使用管理员账户创建普通用户

普通用户由管理员创建,并授权。通常需要指定某个数据库来操作。

先看需求

比如,现在我需要创建一个blog数据库,并且给这个数据库添加一个用户,用户名为develop,密码为developpwd,

只有这个用户可以操作这个blog数据库。

管理员账户登录

需要明白一点的是,普通用户需要由管理员创建并授权,所以,我们首先做的就是用管理员账户登录数据库

提示:在管理员账户创建完成后,我们需要重新启动数据库,并开启验证

以docker为例:

# 重新启动,开启验证
docker run --name mymongo -p 27017:27017 -v /home/mongodb/data:/data/db -d mongo --auth

重新启动之后,我们就可以用管理员账户进入mongo,如下:

# 指定用户进入mongo可使用:  mongo admin -u 用户名 -p 密码
mongo admin -u super -p superpwd

进入之后,我们就可以做用户操作了

创建数据库,并创建用户

进入mongo之后,首先切换到blog数据库

use blog
# 没有则会自动创建

紧接着,可以创建develop用户了

db.createUser({
       user: "develop",
       pwd: "developpwd",
       roles: [ { role: "readWrite", db: "blog" } ]
      })
# 指定可访问blog数据库,并给予readWrite(读写)权限

再接着就是给develop用户授权了

db.auth('develop','developpwd')

至此,普通用户develop创建完成。

这时,我们就可以使用develop用户连接blog数据库了,如下;

 mongo mongodb://develop:developpwd@localhost:27017/blog

至此,用户验证处理完成。

4. 一些用户操作命令

提示: 需要使用管理员账户来操作

创建用户

db.createUser({
     user:用户名,
     pwd:密码, 
     roles:[
      { role:权限类型, db:可访问的db}
    ]
})

查看用户列表

db.system.users.find()

查看某个用户信息

db.runCommand({usersInfo:用户名})

修改用户信息

db.runCommand(
  {
    updateUser:用户名,
    pwd:密码,
    customData:{title:"xxx"……}
  }
)

修改用户密码

db.changeUserPassword(‘user’,’pwd’);

删除用户

db.system.users.remove({user:”username”});

本文首发于我的个人站点:http://sinn.boyagirl.com/detail/58d9072cc1a5bd0001672cdc
以及我的github blog:https://github.com/sessionboy/blog

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容