3.0版本以前

在mongodb3.0版本以前中,有一个admin数据库, 牵涉到服务器配置层面的操作,需要先切换到admin数据库.即 use admin , 相当于进入超级用户管理模式,mongo的用户是以数据库为单位来建立的, 每个数据库有自己的管理员.我们在设置用户时,需要先在admin数据库下建立管理员---这个管理员登陆后,相当于超级管理员.

命令:db.addUser();

简单参数: db.addUser(用户名,密码,是否只读)

注意: 添加用户后,我们再次退出并登陆,发现依然可以直接读数据库?

原因: mongodb服务器启动时, 默认不是需要认证的.

要让用户生效, 需要启动服务器时,就指定--auth选项.这样, 操作时,就需要认证了.

# 添加用户
> use admin
> db.addUser('admin','admin',false); # 3.0版本更改为createUser(); # 删除用户
> use test
> db.removeUser(用户名); # 3.0版本更改为dropUser();

3.0版本以后

创建管理员

在3.0版本以后,mongodb默认是没有admin这个数据库的,并且创建管理员不再用addUser,而用createUser;

语法说明

{ user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> }, # 任意的数据,一般是用于描述用户管理员的信息
roles: [
{ role: "<role>", db: "<database>" } | "<role>", # 如果是role就是直接指定了角色,并作用于当前的数据库
...
] # roles是必传项,但是可以指定空数组,为空就是不指定任何权限
}

Built-In Roles(内置角色):

  1. 数据库用户角色:read、readWrite;
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  4. 备份恢复角色:backup、restore;
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超级用户角色:root

    这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
  7. 内部角色:__system

    PS:关于每个角色所拥有的操作权限可以点击上面的内置角色链接查看详情。

官方Example

use products # mongoDB的权限设置是以库为单位的,必选要先选择库
db.createUser(
{ "user" : "accountAdmin01",
"pwd": "cleartext password",
"customData" : { employeeId: 12345 },
"roles" : [ { role: "clusterAdmin", db: "admin" },
{ role: "readAnyDatabase", db: "admin" },
"readWrite"
] },
{ w: "majority" , wtimeout: 5000 } ) # readWrite 适用于products库,clusterAdmin与readAnyDatabase角色适用于admin库

writeConcern文档(官方说明

  • w选项:允许的值分别是 1、0、大于1的值、"majority"、;
  • j选项:确保mongod实例写数据到磁盘上的journal(日志),这可以确保mongd以外关闭不会丢失数据。设置true启用。
  • wtimeout:指定一个时间限制,以毫秒为单位。wtimeout只适用于w值大于1。
use shop;
db.createUser({
user:'admin',
pwd:'zhouzhou123',
roles:['dbOwner']
})

只要新加了一个用户,admin数据库就会重新存在;

mongo --host xxx -u admin -p zhouzhou123 --authenticationDatabase shop # 用新创建的用户登录

# 查看当前用户在shop数据库的权限
use shop;
db.runCommand(
{
usersInfo:"shopzhouzhou",
showPrivileges:true
}
) # 查看用户信息
db.runCommand({usersInfo:"userName"}) # 创建一个不受访问限制的超级用户
use admin
db.createUser(
{
user:"superuser",
pwd:"pwd",
roles:["root"]
}
)

认证用户

> use test
> db.auth(用户名,密码); #注意是以库为单位,必须先选择库;

删除用户

# 删除用户
> use test
> db.dropUser('用户名');

修改用户密码

> use test
> db.changeUserPassword(用户名, 新密码); # 修改密码和用户信息
db.runCommand(
{
updateUser:"username",
pwd:"xxx",
customData:{title:"xxx"}
}
)

权限规则

参考: http://blog.csdn.net/kk185800961/article/details/45619863

【mongoDB运维篇①】用户管理的更多相关文章

  1. 【mongoDB运维篇④】Shard 分片集群

    简述 为何要分片 减少单机请求数,降低单机负载,提高总负载 减少单机的存储空间,提高总存空间. 常见的mongodb sharding 服务器架构 要构建一个 MongoDB Sharding Clu ...

  2. 【mongoDB运维篇②】备份与恢复(导入与导出)

    导入/导出可以操作的是本地的mongodb服务器,也可以是远程的服务器 所以,都有如下通用选项: -h host 主机 --port port 端口 -u username 用户名 -p passwd ...

  3. 【mongoDB运维篇③】replication set复制集

    介绍 replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性,总结下来有以下好处: 数据备份与恢复 读写分离 MongoDB 复制集的结构以及基本概念 正如上图所示,Mon ...

  4. Liunx运维(七)-用户管理及用户信息查询命令

    文档目录: 一.useradd:创建用户 二.usermod:修改用户信息 三.userdel:删除用户 四.groupadd:创建新的用户组 五.groupdel:删除用户组 六.passwd:修改 ...

  5. Linux 用户篇——用户管理命令之id、whoami、su、chage

    一.浅谈id.whoami.su.chage 本篇是续写上一篇<Linux 用户篇——用户管理命令之useradd.passwd.userdel.usermod>. (1)id命令 命令格 ...

  6. Flume实战案例运维篇

    Flume实战案例运维篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Flume概述 1>.什么是Flume Flume是一个分布式.可靠.高可用的海量日志聚合系统,支 ...

  7. python自动化运维篇

    1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...

  8. MongoDB 运维实总结

    一.MongoDB 集群简介 MongoDB是一个基于分布式文件存储的数据库,其目的在于为WEB应用提供可扩展的高性能数据存储解决方案.下面将以3台机器介绍最常见的集群方案.具体介绍,可以查看官网 h ...

  9. IT运维队伍的管理

    如何建设一支能够解决问题.创造价值.有活力的.不断进取的IT运维团队,并带领这支团队,充分发挥这个团队的优势力量,是运维业务有效开展的关键.运维 策略是直接体现运维业务的经济价值所在.好的运维措施.方 ...

随机推荐

  1. 通信协议之HTTP,UDP,TCP协议

    1.UDP,TCP,HTTP之间的关系 tcp/ip是个协议组,它可以分为4个层次,即网路接口层,网络层,传输层,以及应用层, 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协 ...

  2. Microsoft Visual Studio Ultimate 2015 Preview使用笔记

    1.内存好象存在泄露问题

  3. STM32 ucosii 串口接收数据 遇到的问题及解决思路

    写一个程序,用到了ucos ii ,串口在中断中接收数据(一包数据 8个字节 包含: 1byte包头 5byte数据 1byte校验和 1byte 包尾 ) ,数据由上位机每隔500ms发送一次,在串 ...

  4. gif修改背景透明

    1.用ImageReady打开,将选中所有帧,右键选择“恢复为背景”. 2.打开“颜色板”,点击左下角的惊叹号,用吸色器点击背景,颜色板自动选中了背景色,将其映射为透明. 3.文件->将优化结果 ...

  5. github客户端创建仓库

    1.在github上创建立自己项目仓库 登录后,在github首页,点击页面右下角“New Repository” 填写项目信息: project name: project description  ...

  6. MySQL存储过程、函数和游标

    这里我新建了两个表,一个users和test CREATE TABLE users( username ), pwd ) ); CREATE TABLE test( id INT, username ...

  7. iOS中 @synthesize 和 @dynamic

    今天写点过时的东西,我记得  这个是xcode 4 那个年代的事情了,没想到有时候大家还会被问到.可能目的就是看看你是从是么时候才开始接触iOS的. 在声明property属性后,有2种实现选择 @s ...

  8. 常见的装置与其在Linux当中的档名

    需要特别留意的是硬盘机(不论是IDE/SCSI/U盘都一样),每个磁碟机的磁盘分区(partition)不同时, 其磁碟档名还会改变呢!下一小节我们会介绍磁盘分区的相关概念啦!需要特别注意的是磁带机的 ...

  9. C#: Create a WebRequest with HTTPClient

    http://www.cnblogs.com/shanyou/archive/2012/03/21/2410739.html http://msdn.microsoft.com/zh-cn/libra ...

  10. ora-28002 the password will expire解决办法

    Oracle11g R2数据库提示ORA-28002: the password will expire within 5 days,是说密码过期,将Oracle密码设置成永不过期就可以了,不过并不推 ...