MongoDB 3.0 安全权限访问控制,在添加用户上面3.0版本和之前的版本有很大的区别,这里就说明下3.0的添加用户的方法。

创建第一个用户(该用户需要有grant权限,即:账号管理的授权权限)

1.以非auth认证方式启动数据库:
[mongodb@hadoop1 ~]$ mongod --dbpath=/mongodb/data --logpath=/mongodb/log/trace.log --logappend --port=27017 --fork
[mongodb@hadoop1 ~]$ mongo
MongoDB shell version: 3.2.4
connecting to: test
> show dbs
local 0.000GB #当前只有一个local库,admin库是不存在的
> 2.在指定的数据库下创建用户
> use admin #帐号是跟着库走的,所以要在指定库里创建用户,必须也在指定库里验证(auth)
switched to db admin
> db.createUser(
... {
... user: "dba",
... pwd: "dba",
... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
... }
... );
> user: 用户名
pwd: 密码
roles:指定用户的角色,可以用一个空数组给新用户设定空角色;在roles字段,可以指
定内置角色和用户定义的角色。 role里的角色 可以选: 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
7. 内部角色:__system

  

  刚建立了拥有userAdminAnyDatabase 角色的第一个用户"dba".可以通过这个角色来创建、删除用户

开启auth认证方式启动数据库

[mongodb@hadoop1 ~]$ mongod --dbpath=/mongodb/data --logpath=/mongodb/log/trace.log --logappend  --auth --port=27017 --fork
[mongodb@hadoop1 ~]$ mongo
MongoDB shell version: 3.2.4
connecting to: test
> use admin #因为是在admin下面添加的帐号,所以要到admin下面验证(连接)。
switched to db admin
> show dbs;
2016-03-27T10:44:27.039-0400 E QUERY [thread1] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
"code" : 13
} > db.auth('dba','dba'); #相当于输入用户名/密码验证(连接)
1
> show dbs;
admin 0.000GB
local 0.000GB
>

创建两个测试用户

> use admin
> db.auth('dba','dba');
> use test #切换到test数据库,这两个用户是在test下创建的
switched to db test
> db.createUser(
... {
... user: "polestar",
... pwd: "polestar",
... roles: [{ role: "read", db: "test" }]
... }
... )
> db.createUser(
... {
... user: "polestar_rw",
... pwd: "polestar",
... roles: [ { role: "readWrite", db: "test" }]
... }
... );
> > show users; #test数据库下只有两个用户
{
"_id" : "test.polestar",
"user" : "polestar",
"db" : "test",
"roles" : [
{
"role" : "read",
"db" : "test"
}
]
}
{
"_id" : "test.polestar_rw",
"user" : "polestar_rw",
"db" : "test",
"roles" : [
{
"role" : "readWrite",
"db" : "test"
}
]
}
>
> use admin; #admin数据库下只有一个用户
switched to db admin
> show users;
{
"_id" : "admin.dba",
"user" : "dba",
"db" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
>

  

  有没有一个超级权限?不仅可以授权,而且也可以对集合进行任意操作?答案是肯定的,只是不建议使用。那就是role角色设置成root。

创建超级权限用户

> use admin;
switched to db admin
> db.auth('dba','dba')
1
> db.createUser(
... {
... user: "root",
... pwd: "root",
... roles: [{ role: "root", db: "admin" }]
... }
... )
> > db.auth('root','root') #超级用户可以垮裤插入、查询
1
> use test
switched to db test
> db.abc.insert({"a":1,"b":2})
WriteResult({ "nInserted" : 1 })
> db.abc.find()
{ "_id" : ObjectId("56f7fa72a219e00610fe75cb"), "a" : 1, "b" : 2 }
>

  因为帐号都是在当前需要授权的数据库下授权的,那要是不在当前数据库下会怎么样?

> use admin
switched to db admin
> db.createUser(
... {
... user: "mgdb",
... pwd: "mgdb",
... roles: [{ role: "readWrite", db: "test" }] #在admin库下创建test库的帐号
... }
... )
> > show users;
{
"_id" : "admin.dba",
"user" : "dba",
"db" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
{
"_id" : "admin.root",
"user" : "root",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
{
"_id" : "admin.mgdb",
"user" : "mgdb",
"db" : "admin",
"roles" : [
{
"role" : "readWrite",
"db" : "test"
}
]
}
> > use test
switched to db test
> db.auth('mgdb','mgdb');
Error: Authentication failed. #在admin下创建的帐号,不能直接在其他库验证,
0
> use admin #只能在帐号创建库下认证,再去其他库进行操作
switched to db admin
> db.auth('mgdb','mgdb');
1
> use test
switched to db test
> db.abc.insert({"a":1111,"b":2222})
WriteResult({ "nInserted" : 1 })
>

Mongodb 3.0 创建用户的更多相关文章

  1. MongoDB使用命令创建用户权错误分析--- 权限不够Error:couldn't add user:command createUser requires authentication

    MongoDB使用命令创建用户权错误分析 错误一:权限不够Error:couldn't add user:command createUser requires authentication. 解决方 ...

  2. mongodb 安装到创建用户,认证auth,httpinterface

    今天花了一天时间来解开这个mongodb的谜团,如果有遇到了其他的问题,可以咨询我. #开始 2.6.10安装方式 不同版本后面设置用户权限方式有所差异#下载这个版本的mongodb mongodb- ...

  3. MongoDB给数据库创建用户

    一.先以非授权的模式启动MongoDB 非授权: linux/Mac : mongod -f /mongodb/etc/mongo.conf windows  : mongod --config c: ...

  4. MongoDB 学习笔记 ---创建用户

    MongoDB安装好了之后,开始学习常用命令 首先,运行MongoDB, 记住,先不用带参数--auth /usr/local/mongodb/bin/mongod -dbpath=/usr/loca ...

  5. jumpserver v0.5.0 创建用户和管理机器

    用户管理-创建用户    data 用户详情 如下 创建用户组 data 资产列表添加资产 jumpserver 的 root 公钥需保持到 后端服务器的 authorized_keys 里, 然后测 ...

  6. mongodb 启动及创建用户

    1. 守护进程启动,参考: https://blog.csdn.net/jj546630576/article/details/81117765 2. 用户管理参考: https://www.cnbl ...

  7. MongoDB3.0 创建用户

    use mydb db.createUser( { "user" : "sa", "pwd": "sa", " ...

  8. mysql8数据库修改root密码,以及创建用户遇到的坑,开启远程登录,用navicat进行mysql的远程连接,mysql8.0默认编码方式,部分参数配置查询命令

    yum 安装MySQL8 echo "删除系统默认或之前可能安装的其他版本的 mysql" for i in $(rpm -qa|grep mysql);do rpm -e $i ...

  9. 多个UID为0的用户如何实现root用户的免密

    文章目录 创建用户 创建用户密码 免密脚本 当前主机用户不是root 当前主机用户是root,远程主机多个用户uid为0 利用shell脚本实现远程主机uid为0的用户只有root一个 多个UID=0 ...

随机推荐

  1. 配置Git Extension免密码发布代码到CSDN

    配置Git Extension免密码发布代码到CSDN [本文默认大家安装了Git以及Git Extension] 今天花费了许多的时间处理这个问题,希望能给大家节约时间.闲话少说:使用ssh验证来p ...

  2. 剑指Offer:面试题3——二维数组中的查找(java实现)

    问题描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:取数组中的元素与 ...

  3. Swift学习—字符串&数组&字典

    字符串 OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC中字符串@"",Swift中字符串"" ...

  4. 洛谷P2320 鬼谷子的钱袋

    P2320 06湖南 鬼谷子的钱袋 171通过 480提交 题目提供者xmyzwls 标签各省省选 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 题目有误 数据需要特判 评测系统太神了 题目 ...

  5. cocos2dx 内存管理机制

    持续更新吧. 刚开始看了一些. 一,CCObject  提供引用计数 1,unsinged int m_uReference; //此为CCOBject的引用计数,初始化为 1: new CCObje ...

  6. js 函数function的几种形式

    //有的时候我们一直都在使用函数,但是却不知道函数使用的正真含义 //其中一个重要的目的是为了提高代码的复用率 //其二函数可以传递参数并有返回值 //函数声明 //不带参数,不带返回值 functi ...

  7. IE CSS HACK

    IE 属性值 HACK .test { background:blue; /*所有浏览器*/ background:yellow\9; /*所有IE浏览器*/ background:green\0; ...

  8. OpenGL函数解析之glLoadIdentity()

    函数原型:void glLoadIdentity(void) 函数说明:调用glLoadIdentity()函数可以恢复初始坐标系,用一个4x4的单位矩阵来代替当前矩阵,实际上就是对当前矩阵进行初始化 ...

  9. select修改原生样式组件

    <div class="select"> <select class="" name=""> <option ...

  10. Flexbox布局详解

    弹性框布局 (flexbox) 添加了级联样式表级别 2 修订版 1 (CSS2.1) 中定义的四个基本布局模式:块布局.内联布局.表格布局和定位布局.使用弹性框布局功能,你可以更加轻松地设计复杂网页 ...