mongodb权限管理(转)

Mongodb 数据库默认情况下是没有访问控制的,整个数据库对外是开发的,只要能连上数据库,则可以进行任何操作,这会对数据带来很大的风险。当然,我们可以启用mongodb的访问控制,只让通过认证的用户才能对数据库进行角色范围内的操作。

启用访问控制可以通过在启动 mongodb 时指定 --auth 参数来设置,另外还涉及到创建用户 db.createUser 操作以及一些角色的定义,我们先来看这部分内容。

db.createUser() 用法


db.createUser({

user: "$USERNAME",

pwd: "$PASSWROD",

roles: [

{ role: "$ROLE_NAME", db: "$DBNAME"}

]

})

参数说明:

  • user 是用户名
  • pwd 是密码
  • role 来指定用户的角色
  • db 来指定所属的数据库
  • roles 是用户所有角色的集合

Mongodb 预定义角色

Mongodb 中预定义了一些角色,把这些角色赋予给适当的用户上,用户就只能进行角色范围内的操作。

  • 数据库用户角色 (所有数据库都有)

    • read 用户可以读取当前数据库的数据
    • readWrite 用户可以读写当前数据库的数据
  • 数据库管理角色(所有数据库都有)
    • dbAdmin 管理员用户但不能对用户和角色管理授权
    • dbOwner 数据库所有者可进行任何管理任务
    • userAdmin 可以管理当前数据的用户和角色
  • 集群管理角色(admin数据库可用)
    • clusterAdmin 集群所有管理权限,是 clusterManager , clusterMonitorhostManager 合集
    • clusterManager 集群管理和监控
    • clusterMonitor 集群监控,只读的
    • hostManager 监控和管理服务器
  • 备份和恢复角色(admin数据库可用)
    • backup
    • restore
  • 所有数据库角色(admin数据库可用)
    • readAnyDatabase 读取所有数据库
    • readWriteAnyDatabase 读写所有数据库
    • userAdminAnyDatabase 所有数据库的 userAdmin 权限
    • dbAdminAnyDatabase 所有数据库的 dbAdmin 权限
  • 超级角色(admin数据库可用)
    • root 超级用户
  • 内部角色
    • __system 所有操作权限

更多预定于角色的信息请参看:https://docs.mongodb.com/manual/core/security-built-in-roles/

启用访问控制的步骤

1, 启动 mongodb 实例,关闭 访问控制

不带 --auth


./mongod

2, 连接上 mongodb 实例


./mongo

3,创建用户管理员

在 admin 数据库中添加一个 具有 userAdminAnyDatabase 角色的用户作为用户管理用户。下面的例子中创建了 admin 为用户管理员。


> use admin

switched to db admin

> db.createUser({

... user: "admin",

... pwd: "admin",

... roles: [

... { role: "userAdminAnyDatabase", db: "admin"}

... ]

... })

Successfully added user: {

"user" : "admin",

"roles" : [

{

"role" : "userAdminAnyDatabase",

"db" : "admin"

}

]

}

>

退出连接

4,重启数据库启用访问控制

命令行启动,只需要添加 --auth 参数


./mongo --auth

或者sudo vim /etc/mongod.conf

2.4

auth = true

2.6以上

security:

    authorization: enabled

5,使用管理用户连接,有两种方法

  • 使用命令行 ./mongo -u "$USERNAME" -p "$PASSWROD" --authenticationDatabase "admin"
  • 使用 db.auth()

我们使用第二种


>

> use admin

switched to db admin

> db.auth("admin", "admin")

1

>

1 表示认证成功

6, 为某个数据库创建独立用户

以下为 test 数据库 创建具有读写权限的用户 test

admin 用户由于只有 userAdminAnyDatabase 权限,所以没有 test 数据的读写权限,所以,为了读写 test 数据库,我们需要创建一个用户。先看一下直接用 admin 会报什么错误


> use test

> show collections

2017-01-13T13:49:17.691+0800 E QUERY    [thread1] Error: listCollections failed: {

"ok" : 0,

"errmsg" : "not authorized on test to execute command { listCollections: 1.0, filter: {} }",

"code" : 13

} :

[email protected]/mongo/shell/utils.js:25:13

[email protected]/mongo/shell/db.js:773:1

[email protected]/mongo/shell/db.js:785:19

[email protected]/mongo/shell/db.js:796:16

[email protected]/mongo/shell/utils.js:754:9

[email protected]/mongo/shell/utils.js:651:15

@(shellhelp2):1:1

我们直接使用 show collections , 则报错:not authorized on test to execute command ,意思是没有权限。


> use test

switched to db test

> db.createUser({

... user: "test",

... pwd: "test",

... roles: [

... { role: "readWrite", db: "test"}

... ]

... })

Successfully added user: {

"user" : "test",

"roles" : [

{

"role" : "readWrite",

"db" : "test"

}

]

}

>

然后我们使用 db.auth(“test”, “test”), 再执行命令 则没有报错


> db.auth("test", "test")

1

>

> show collections

试着写入一条数据,也是正常的。


> db.t.insert({name:"buzheng"});

WriteResult({ "nInserted" : 1 })

> db.t.find();

{ "_id" : ObjectId("58786c84bf5dd606ddfe1144"), "name" : "buzheng" }

>

转自https://buzheng.org/2017/20170114-mongodb-enable-access-control.html

时间: 2024-10-12 03:35:29

mongodb权限管理(转)的相关文章

MongoDB权限管理

前几天网友问MongoDB数据库权限方面的问题.当时大致的了解了一下,这周仔细了解了一下.对于一个数据库不可能随意的访问,肯定要有写访问限制. 在了解这个之前首先熟悉下shell客户端.前面的博客也有些打开shell客户端的方法:mongo.关闭数据库引擎的话可以使用db.shutdownServer(). 一.shell命令 MongoDB的shell提供了一些命令,可以从shell提示符执行它们. help<option>:用于为MongoDB的shell命令显示语法帮助.option参数

MongoDB权限管理二

mongodb配置文件如下: [[email protected] ~]# cat /usr/local/mongodb/mongod.cnf bind_ip = 0.0.0.0 logpath=/data/mongodb/logs/mongodb.log logappend = true fork = true #auth = true port = 6068 dbpath=/data/mongodb/data pidfilepath=/data/mongodb/mongod.pid root

Mongodb 权限管理

Mongodb七天总结—权限管理(2)

Mongodb权限管理 版本:Mongodb3.0 说到对数据库我安全问题我们一般就会从以下几点考虑怎么去解决数据库安全的问题. 1.最安全的是物理隔离: 2.网络隔离: 3.防火墙隔离: 4.用户名和密码: 下面我们来说说mongodb的用户名和密码认证: 认证是确定client身份的机制,默认情况下mongodb并没有开启权限认证,我们部署好MGDB之后需要进行,一般常用mongodb权限认证的方式有: 1.auth开启(在启动的时候知道--auth=true) 2.Keyfile开启 怎么

Mongodb增加权限管理

 前言: 随着列式存储理念的成熟,越来越多的开发者开始接纳mongodb,hbase这类大储存的分布式列式数据库.特别是mongodb的这种快速搭建,快速使用特点,使其得到更多人的青睐.本人主要通过官网说明针对mongodb权限配置做一个测试与实践. step1:无验证启动mongod服务 mongod --port 27017 --dbpath /data/db1 step2:客户端mongo无密码连接并设置超级用户(用于admin登录) mongo --port 27017 use admi

MongoDB学习笔记—权限管理

1.MongoDB权限介绍 a 上篇文章中,我们在Linux下配置了MongoDB环境并且将其设置为服务随机器启动而启动,那么接下来这篇文章我们就来简单说一下MongoDB下对登录用户权限的管理. b  MongoDB安装完成后,默认是不需要输入用户名密码即可登录的,但是往往数据库方面我们会处于安全性的考虑而设置用户名密码,本篇文章主要介绍了MongoDB添加管理员/普通用户的方法. c 在我们使用的关系型数据库中,一般都是含有权限控制的,也就是说配置什么用户访问什么数据库,什么数据表,什么用户

MongoDB 学习笔记之 权限管理基础

权限管理基础 MongoDB有很多用户roles,这里只是简单列举下命令的使用,具体的role的含义,请查阅官方文档. https://docs.mongodb.com/manual/reference/built-in-roles/#userAdmin 在启用权限验证之前,需要重启服务,开启auth: 命令使用示例: use admin; #创建用户,这里Mongo 3和Mongo 2用的方法不同了. db.createUser({user: 'sky', pwd: 'CSL', roles:

MongoDB的账户与权限管理及在Python与Java中的登录

本文主要介绍了MongoDB的账户新建,权限管理(简单的),以及在Python,Java和默认客户端中的登陆. 默认的MongoDB是没有账户权限管理的,也就是说,不需要密码即可登陆,即可拥有读写的权限(当然,重启服务还是需要在本机执行).这个对于自己做实验室足够使用的,但是对于开放数据给他人使用时很不安全的,倒不是怕窃取数据,主要是怕某些猪队友一下把db给drop了,如果没有容灾备份哭都来不及.对于MongoDB的权限配置,我看着官方文档和别人的笔记也算是踩过坑的人了,把踩过的坑写出来给大家看

mongodb 2.6.6 权限管理

mongodb2.6的权限管理与2.4有很大不同,网上能看到的文章基本都是基于2.4以下的,很多并不适用.经过一番摸索终于理顺了2.6的权限管理,做下笔记. 我所用的版本是Linux 64-bit,下载地址:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.6.tgz mongodb默认不启用权限管理,访问不需要验证.要开启权限管理功能,启动时增加--auth参数. 启用后,数据库中还没有任何的用户,此时非本机客户端访问会提示错误