步骤总结:

1.先正常启动

2.创建用户,创建数据库病授权用户

3.关闭程序,开启安全,然后启动

4.使用账号和密码连接

  1. 按未开启认证的方式(配置文件中没开启安全选项并且启动命令中不添加 --auth 参数,)来启动MongoDB服务
  2. 使用Mongo客户端登录,然后创建管理用户:
# 切换到admin库
> use admin # 创建系统超级用户 myroot,设置密码12345,设置角色root
> db.createUser({user:"myroot",pwd:"12345",roles:[{"role":"root","db":"admin"}]})
# 或者 db.createUser({user:"myroot",pwd:"12345",roles:["root"]}) # 创建专门用来管理admin库的账号myadmin,只用来作为用户权限的管理
> db.createUser({user:"myadmin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) # 查看已经创建了的用户的情况:
> db.system.users.find() # 删除用户
> db.dropUser("myadmin") # 修改密码
> db.changeUserPassword("myroot", "123456")

提示:

1)本案例创建了两个用户,分别对应超管和专门用来管理用户的角色,事实上,你只需要一个用户即可。如果你对安全要求很高,防止超管泄漏,则不要创建超管用户。

2)和其它数据库(MySQL)一样,权限的管理都差不多一样,也是将用户和权限信息保存到数据库对应的表中。Mongodb存储所有的用户信息在admin 数据库的集合system.users中,保存用户名、密码和数据库信息。

3)如果不指定数据库,则创建的指定的权限的用户在所有的数据库上有效,如 {role:"userAdminAnyDatabase", db:""}

  1. 认证测试
# 切换到admin
> use admin
# 密码输错
> db.auth("myroot","12345")
Error: Authentication failed.
0
# 密码正确
> db.auth("myroot","123456")
1
  1. 创建普通用户

    创建普通用户可以在没有开启认证的时候添加,也可以在开启认证之后添加,但开启认证之后,必须使用有操作admin库的用户登录认证后才能操作。

    底层都是将用户信息保存在了admin数据库的集合system.users中。
# 创建(切换)将来要操作的数据库articledb,
> use articledb
switched to db articledb
# 创建用户,拥有articledb数据库的读写权限readWrite,密码是123456
> db.createUser({user:"bobo", pwd: "123456", roles: [{role:"readWrite",db:"articledb"}]})
# 或者 db.createUser({user: "bobo", pwd: "123456", roles: ["readWrite"]}) # 测试是否可用
> db.auth("bobo","123456")
1

提示:

如果开启了认证后,登录的客户端的用户必须使用admin库的角色,如拥有root角色的myadmin用户,再通过myadmin用户去创建其他角色的用户

  1. 服务端开启认证

    (1)关闭已经启动的服务

    1)使用linux命令杀死进程

    2)在mongo客户端中使用shutdownServer命令来关闭
> use admin
switched to db admin > db.shutdownServer()

需要几个条件:

  • 必须是在 admin库下执行该关闭服务命令。
  • 如果没有开启认证,必须是从 localhost登陆的,才能执行关闭服务命令。
  • 非 localhost的、通过远程登录的,必须有登录且必须登录用户有对admin操作权限才可以。

(2)以开启认证的方式启动服务

有两种方式开启权限认证启动服务:一种是参数方式,一种是配置文件方式。

1)参数方式

在启动时指定参数 --auth ,如:

mongod -f mongod.conf --auth
  1. 配置文件方式

    在mongod.conf配置文件中加入:
vim mongod.conf
security:
  #开启授权认证
authorization: enabled

此时启动就不指定参数 --auth了 ,如:

mongod -f mongod.conf
  1. 客户端连接登录

    有两种认证方式,一种是先登录,在mongo shell中认证;一种是登录时直接认证。

    1)先连接再认证
# mongo --host 192.168.0.253 --port 27017

> use articledb
switched to db articledb
> db.auth("bobo","123456")
1
> db.comment.find()
>

2)连接时直接认证

# 对admin数据库进行登录认证和相关操作:
mongo --host 192.168.0.253 --port 27017 --authenticationDatabase admin -u myroot -p 123456 # 对articledb数据库进行登录认证和相关操作:
mongo --host 192.168.0.253 --port 27017 --authenticationDatabase articledb -u bobo -p 123456

提示:

  • -u :用户名
  • -p :密码
  • --authenticationDatabase :指定连接到哪个库。当登录是指定用户名密码时,必须指定对应的数据库!

MongoDB 单实例节点主机的用户和权限一般操作步骤的更多相关文章

  1. MongoDB 副本集的用户和权限一般操作步骤

    步骤总结: 在主节点上添加超管用户,副本集会自动同步 按照仲裁者.副本节点.主节点的先后顺序关闭所有节点服务 创建副本集认证的key文件,复制到每个服务所在目录 修改每个服务的配置文件,增加参数 启动 ...

  2. MongoDB 分片集群的用户和权限一般操作步骤

    步骤总结: 按照mongos路由.配置副本集服务,分片副本集服务的先后顺序关闭所有节点服务 创建副本集认证的key文件,复制到每个服务所在目录 修改每个服务的配置文件,增加参数 启动每个服务 创建账号 ...

  3. Linux下MongoDB单实例的安装和配置详解

    推荐网站 MongoDB官网:http://www.mongodb.org/ MongoDB学习网站:http://www.runoob.com/mongodb 一.创建MongoDB的资源目录和安装 ...

  4. linux 添加用户、权限

    # useradd –d /usr/sam -m sam 此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户主目录所在的父目录). 假 ...

  5. 【shiro】2.spring整合shiro,注解控制shiro用户/角色/权限And/OR,没有权限跳转到固定页面

    这几天粗浅的把shiro整合到spring中,并且注解控制shiro用户/角色/权限And/OR 步骤: 1.首先maven搭建web项目 2.创建数据库 user/role/authority 其中 ...

  6. Linux 新建用户、用户组,给用户分配权限

    注:内容来自网络 Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对 ...

  7. mysql的用户访问权限规划

    看了mysql的关于用户权限和安全的管理,感觉看起来还是不太好理解,首先mysql的连接方式是需要核对三个要素:user.passwd. host.而且这个user和passwd并不是o上面的user ...

  8. linux添加用户、权限

    # useradd –d /usr/sam -m sam 此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户主目录所在的父目录). 假 ...

  9. spring security中动态更新用户的权限

    在程序的执行过程中,有时有这么一种需求,需要动态的更新某些角色的权限或某些人对应的权限,当前在线的用户拥有这个角色或拥有这个权限时,在不退出系统的情况下,需要动态的改变的他所拥有的权限. 需求:张三 ...

随机推荐

  1. AtCoder Beginner Contest 247 E - Max Min // 容斥原理

    原题链接:E - Max Min (atcoder.jp) 题意: 给定一个数组,求满足最大值为X且最小值为Y的区间个数. 思路:容斥原理 因为必须要包含端点,直接求是不容易的.因此考虑去求不一定包含 ...

  2. 20220722-Java可变参数

    Java可变参数总结 来源:B站韩顺平老师的Java入门教学 代码示例如下: public void f(String str,int... nums){ 方法体; } 代码示例如下: public ...

  3. java实现wordCount的map

    打开IDEA,File--new --Project,新建一个项目 我们已经安装好了maven,不用白不用 这里不要选用骨架,Next.在写上Groupid,Next. 写上项目名称,finish.o ...

  4. 5.25 NOI 模拟

    \(T1\)旅行计划 不\(sb\)的题 比较显然转化成求一个点到所有点的最短路和 考虑我们非树边很少,那么可以把非树边连接的点看做是关键点,那么我们可以预处理每个关键点之间的最短路 我们每次询问,对 ...

  5. pat链表专题训练+搜索专题

    本期题目包括: 1074:https://pintia.cn/problem-sets/994805342720868352/problems/994805394512134144 1052:http ...

  6. 手把手教你 Apache DolphinScheduler 本地开发环境搭建 | 中英文视频教程

    点击上方 蓝字关注我们 最近,一些小伙伴反馈对小海豚的本地开发环境搭建过程不太了解,这不就有活跃的贡献者送来新鲜的视频教程!在此感谢@Tianqi-Dotes 的细致讲解 贡献者还贴心地录制了中英文两 ...

  7. Luogu1064 金明的预算方案 (有依赖的背包)

    枚举多个状态 #include <iostream> #include <cstdio> #include <cstring> #include <algor ...

  8. Luogu1880 [NOI1995]石子合并 (区间DP)

    一个1A主席树的男人,沦落到褪水DP举步维艰 #include <iostream> #include <cstdio> #include <cstring> #i ...

  9. java学习第七天注解.day19

    注解 可以使用注解来修饰类中的成员信息 "注解,可以看作是对 一个 类/方法 的一个扩展的模版 元注解 注解:用来贴在类/方法/变量等之上的一个标记,第三方程序可以通过这个标记赋予一定功能 ...

  10. spring boot 中英文官方文档

    中文文档:http://oopsguy.com/documents/springboot-docs/1.5.4/index.html#boot-features 英文官方文档:https://docs ...