1、创建用户
1.1、语法格式:
1.1.1、格式及例子
>db.createUser(
{ user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>",
db: "<database>" '
} | "<role>",
...
]
}
)
例子:
>use admin
>db.createUser(
{
user:'user',
pwd :'123',
customData:{"desc":"This user is for administrators"},
roles:[
{
role:'userAdminAnyDatabase',db:'admin'
}
]
}
)
1.1.1、结构详解:
user :用户名 --必须项
pwd :密码 --必须项
customData :用于描述账户信息 --非必须项
roles :指定用户的角色,可以用一个空数组给新用户设定空角色;在roles字段,可以指定内置角色和用户定义的角色。--必须项(可以为空集合)
role里的角色可以选:
1.1.1.1、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
1.1.1.2、具体角色:
Read :允许用户读取指定数据库
readWrite :允许用户读写指定数据库
backup,retore :在进行备份、恢复时可以单独指定的角色,在db.createUser()方法中roles里面的db必须写成是admin库,要不然会报错
dbAdmin :允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin :允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin :只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase :只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限,
dbAdminAnyDatabase :只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root :只在admin数据库中可用。超级账号,超级权限 1.2、创建具体权限的用户例子:
1.2.1、创建超级管理员用户
use admin
db.createUser({user:'root',pwd:'123', roles:[{role:'root', db:'admin'}]}) 1.2.2、创建用户管理员账户(能查询其他库集合,但不能查询集合内容
use admin
db.createUser({user:'userAdmin',pwd:'123', roles:[{role:'userAdminAnyDatabase', db:'admin'}]}) 1.2.3、创建访问任意库读写的账户
use admin
db.createUser({user:'rwUser',pwd:'123', roles:[{role:'readWriteAnyDatabase', db:'admin'}]}) 1.2.4、创建只对test库有读写权限的用户
use test
db.createUser({user:'testUser',pwd:'123',roles:[{role:'readWrite',db:'test'}]}) 1.2.5、创建用于备份时的用户,如若是恢复权限,则将backup换为restore即可
use admin
db.createUser({user:"bkUser",pwd:"123",roles:[{role:"backup",db:"admin"}]})
注:新建backup账户时,roles里面的db必须是admin,要不然会报错,如下:
>db.createUser({user:"bkUser2",pwd:"123",roles:[{role:"backup",db:"test"}]})
Error: couldn't add user: No role named backup@test 1.3、验证新建用户:
用户在哪个库新建授权,则需要在哪个库进行auth验证
>db ---查看当前所在库
test
>db.createUser({user:'test1',pwd:'test1',roles:[{role:'readWrite',db:'test'},{role:'read',db:'Johnny'})})
>use Johnny
Johnny
>db.auth('test1','test1')
Error:Authentication failed.
0 ---表示auth验证失败
>use test
>db.auth('test1','test1')
1 ---表示验证成功
所以,
特别注意:
用户在哪个库创建,就必须要在哪个库auth认证,并在mongo登录时也要先连接认证库
1.4、查询用户:
1.4.1、查询实例中所有的用户信息
>use admin
>db.system.users.find().pretty() ---将所有用户信息查询出来 1.4.2、显示某一库下的所有用户
>use test
>show users ---显示在此库授权的用户信息 1.4.3、查询指定用户的相关信息:
>db
Johnny
>db.getUser("jianlong") ---需要在用户所在库才能执行此命令并获得信息,查询到的信息和“show user”一样,只是可以指定用户罢了
{
"_id" : "Johnny.jianlong",
"user" : "jianlong",
"db" : "Johnny",
"roles" : [
{
"role" : "readWrite",
"db" : "test"
},
{
"role" : "readWrite",
"db" : "Johnny"
}
]
}
> use tt
switched to db tt
> db.getUser("jianlong") ---在账户非授权库进行用户信息查询则会提示NULL
null
#2、修改用户
2.1、语法格式
db.updateUser(
"<username>",
{
customData : { <any information> },
roles : [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
pwd: "<cleartext password>"
},
writeConcern: { <write concern> }
)
2.2、结构详解
username:要修改的用户的用户名 --必须项
update部分: ----必须项(至少其中一项)
customData:描述性信息
roles:修改的角色们
role:角色名
db :数据库
pwd:用户对应的密码
writeConcern:用来指定mongod对写操作的回执行为
2.3、例子
2.3.1、修改用户权限,但会覆盖原先的所有权限
例:
> db.updateUser("root",
{
roles:[
{ role:"readWriteAnyDatabase",
db:"admin"
}
]
}
) 2.3.2、修改用户权限,不会覆盖原权限信息,只新增权限:
> use Johnny
switched to db Johnny
> db.grantRolesToUser(
"jianlong",
[
{
role:'readWrite',
db:'test'
}
]
) ---
> show users;
{
"_id" : "Johnny.jianlong",
"user" : "jianlong",
"db" : "Johnny",
"roles" : [
{
"role" : "readWrite",
"db" : "test"
},
{
"role" : "readWrite",
"db" : "Johnny"
}
]
}
>use tt
> db.grantRolesToUser(
"jianlong",
[
{
role:'read',
db:'tt'
}
]
)
Error: Could not find user jianlong@tt
---不能在用户非授权库进行用户的权限添加,否则会报错,即表现出账户随库走的特点 2.3.3、修改用户密码:
db.changeUserPassword(“username","newPasswd")
例子:
> use tt
switched to db tt
> db.changeUserPassword("tuser","123456")
---注意要在账户所在授权库执行此命令
#3、删除用户
>db.dropUser("test1")
#4、用户自定义角色Role
4.1、语法格式:
>db.createRole(
{
role: "<name>",
privileges: [
{ resource: { <resource> }, actions: [ "<action>", ... ] },
...
],
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
]
}
)
4.2、结构解析:
role:自定义的角色名称 --必须项
privileges:配置具体对象的权限 ----必须项
resource:角色拥有的资源(collection)
action:对某集合的find,insert等权限
roles:继承其他角色权限
role:要继承的角色名称
db:数据库
官方网站上的一句话:
Except for roles created in the admin database, a role can only include privileges that apply to its database and can only inherit from other roles in its database.
翻译:除了admin库里的role以外,自定义角色拥有的权限只能应用到本库并且也只能从本库的角色进行权限继承(如果理解有误还望指点)
测试结果:虽然配置角色权限时不能映射其他库的对象权限,但是角色可以跨库授权给用户(如果你不明白这句话,没关系,咱直接上实验) 4.3、例子:
4.3.1、创建角色
db.createRole(
{
role:"SenderHis_Read",
privileges:[
{
resource:{
db:"APP_MSG_GW",
collection:"SenderHis"
},
actions:["find"]
}
],
roles:[
{
role:"read",
db:"admin"
}
]
}
)
4.3.2、如果想在此角色上添加其他库中集合的查询权限则会报错:
> db.grantPrivilegesToRole(
"SenderHis_Read",
[
{
resource:{
db:"APP_SUPERPROXY",
collection:"SenderHis"
},
actions:["find"]
}
]
)
{
"Message":"Roles on the ‘APP_MSG_GW‘ database cannot be granted privileges that target other databases or the cluster"
}
4.3.3、"官方网站上的一句话"验证测试
4.3.3.1、在APP_SUPERPROXY库上另建一角色
db.createRole(
{
role:"MONITOR_Read",
privileges:[
{
resource:{
db:"APP_SUPERPROXY",
collection:"MONITOR"
},
actions:["find"]
}
],
roles:[]
}
)
4.3.3.2、此时可以将两个角色同时授权给APP_MSG_GW库下的一个用户,使其拥有两个库中某些集合的查询权限
>use APP_MSG_GW
>show users;
{
"_id" : "APP_MSG_GW.zbx_Moniter",
"user" : "zbx_Moniter",
"db" : "APP_MSG_GW",
"customData" : {
"desc" : "zabbix monitor account"
},
"roles" : [
{
"role" : "MONITOR_Read",
"db" : "APP_SUPERPROXY"
},
{
"role" : "SenderHis_Read",
"db" : "APP_MSG_GW"
}
]
}
4.3.3.3、查看角色的具体privilege(权限):
>db.getRole("SenderHis_Read",{showPrivileges:true})
另一参数:showBuiltinRoles
#5、创建执行eval()命令的权限
5.1、官网地址:https://docs.mongodb.com/manual/reference/command/eval/#access-control
5.2、说明:
比如你想在Python脚本中调用写好的mongo存储函数(存于system.js系统表中),如果你只是拥有普通权限
,那么执行的时候就会报错,就算是你用root账号去连接mongo来执行命令也没用
5.3、解决办法:
5.3.1、创建一个角色,拥有anyResource的anyAction的权限,之后赋角色给用户即可:
db.createRole(
{
role:"excute_eval_system",
privileges:[
{
resource:{
anyResource:true
},
actions:["anyAction"]
}
]
}
)
5.3.2、术语解析:
anyAction:
Allows any action on a resource.Do not assign this action unless it is absolutely necessary.
anyResource:
The internal resource anyResource gives access to every resource in the system and is intended for internal use.
Do not use this resource, other than in exceptional circumstances.
The syntax for this resource is {anyResource: true }.
5.3.3、注意事项:
除非必须要外部调用eval,否则请慎重创建此角色且赋给用户

  

MongoDB用户权限操作语法及示例的更多相关文章

  1. T-Sql(七)用户权限操作(grant)

    一般数据库的权限操作我们很少用,除非一些大型的项目,需要给数据库配置不同的用户及权限,防患于未然,今天我们就来了解下t-sql中配置用户权限操作. 先看示例代码: --创建登录名 create log ...

  2. MongoDB用户权限管理配置

    MongoDB系列第一课:MongDB简介 MongoDB系列第二课:MongDB环境搭建 MongoDB系列第三课:MongDB用户管理 MongoDB系列第四课:MongoDB数据库.集合.文档的 ...

  3. mysql用户权限操作

    mysql用户权限操作1.创建用户mysql -urootcreate database zabbix default charset utf8;grant all on zabbix.* to za ...

  4. MongoDB用户权限认证

    关于用户的认证及权限 用户是跟着库创建的,在哪个库创建的什么权限的什么用户,只对此库有相应权限(除超级管理员以外). 官网文档:https://docs.mongodb.com/master/refe ...

  5. [MongoDB] 用户权限管理

    在新环境按照原来的步骤新装了MongoDB,结果出现了一些错误,才发现版本升到了2.6.1,用户权限相关的内容全部改掉了. 现在使用Role来管理用户,有一些内置的Role,也可以自定义Role. 内 ...

  6. mongodb用户权限管理(二)

    数据库 分配用户权限 有了创建语法,和参数说明,接下来开始实践. 注意,还有一点,账号是跟着数据库绑定的,在那个库里授权,就在那个库里验证(auth) 否则会失败 创建 账号管理授权权限 的账号 &g ...

  7. mongodb的权限操作

    一.开启权限认证 1.windows下的mongodb开启权限认证 C:\Users\Administrator>sc delete MongoDB //原来创建的服务如果没有开启 则删除 [S ...

  8. django用户权限操作

    第一步:创建数据库和超级管理员,为了比较方便使用(里面有些的是没用的),额外新增 chioces , per_method , argument_list # 用户权限# 建立一个权限表,将映射关系存 ...

  9. mysqli用户权限操作

    此操作指令在 mysql 的数据库中 所以要 use mysql 查询mysqli中所有用户的权限 select host,user form user;  添加用户 grant all privil ...

随机推荐

  1. Rest Framework:序列化组件

    Django内置的serializers(把对象序列化成json字符串 from django.core import serializers def test(request): book_list ...

  2. vue--axios分装

    封装: import axios from 'axios' axios.defaults.baseURL="http://127.0.0.1:8000/" axios.defaul ...

  3. 转:HTTP协议简介与在python中的使用详解

    1. 使用谷歌/火狐浏览器分析 在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来.而浏览器和服务器之间的传输协议是HTTP,所以: HTML是一种用 ...

  4. python 练习洗牌

    生成随机数需要引入random模块,学习下random模块中常用的几个函数: random.random() 用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.un ...

  5. Scrum 冲刺 第二篇

    Scrum 冲刺 第二篇 每日会议照片 昨天已完成工作 队员 昨日完成任务 黄梓浩 初步完成app项目架构搭建 黄清山 完成部分个人界面模块数据库的接口 邓富荣 完成部分后台首页模块数据库的接口 钟俊 ...

  6. 笔记-CF643E Bear and Destroying Subtrees

    CF643E Bear and Destroying Subtrees 设 \(f_{i,j}\) 表示节点 \(i\) 的子树深度为 \(\le j\) 的概率,\(ch_i\) 表示 \(i\) ...

  7. vue-cli脚手架搭建vue3.0+typescripe项目

    新开个项目,小项目,小.顺手就用vue吧,vue3出来也几个月了,直接上了吧.一年多没用vue了,用的时候也得再熟悉,不如直接干3了! vue官方推荐使用的脚手架是 Vite 和 vue-cli ,延 ...

  8. Springboot mini - Solon详解(四)- Solon的事务传播机制

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

  9. Python 学习笔记 之 02 - 高级特性总结

    切片 语法:  li.[x:y:z]  li为list.tuple等数据类型,x为开始进行切片的位置,y为切片停止的位置(不包含y),z为xy切片后的结果里,每间隔z个元素输出一次结果.  x默认为0 ...

  10. qq获取验证码接口

    测试 获取验证码 import smtplib from email.mime.text import MIMEText from email.utils import formataddr #定义参 ...