前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB用户和角色解释系列(下)

MongoDB用户和角色解释系列(下)

作者头像
MongoDB中文社区
修改2019-09-27 18:39:29
9500
修改2019-09-27 18:39:29
举报
文章被收录于专栏:MongoDB中文社区MongoDB中文社区

在前半部分我已经讲了很多理论。但是,我知道,如果这是您第一次处理MongoDB角色和用户问题,可能非常令人困惑。因此,让我们一步一步地通过一个示例来了解这个过程,比如当您新增一个新的3个节点副本集,并将安全选项标志设置为true,之后运行该副本集时,这个过程您将怎样操作。同时,我们还将看到使用诸如Studio 3T(用于MongoDB的IDE)这样的可视化界面管理用户和角色是多么容易。

修改mongod.conf配置文件

security:

authorization: enabled

keyFile: /var/lib/rs.key

replication:

replSetName: 'studio3trs'

在三台服务器上面运行mongod服务(Ubuntu 16.04)

$ systemctl start mongod.service

连接其中一台服务器

vagrant@primary:~$ mongo MongoDB shell version v3.4.16 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.16 Welcome to the MongoDB shell. For interactive help, type "help".

更全面的文档,请参阅:

http://docs.mongodb.org/

有疑问? 尝试互助——

http://groups.google.com/group/mongodb-user

首先初始化副本集:

代码语言:javascript
复制
> rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "192.168.60.10:27017",
"ok" : 1
}
studio3trs:SECONDARY>
studio3trs:PRIMARY>

创建第一个用户

代码语言:javascript
复制
> use admin
switched to db admin
db.createUser(
{ user : 'juan',
pwd : 'juanpwd',
roles : [ { role : 'userAdminAnyDatabase', db : 'admin' } ]
}
)
Successfully added user: {
"user" : "juan",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}

通过Studio 3T中的point and click向导,添加第一个用户很容易完成。如前所述,第一步是选择要创建用户的数据库,然后单击“Users”按钮,填写所需的数据,并将角色授予它。

延伸阅读:阅读我们《在Studio 3T中创建新用户管理》的深入指南。 参考网址:https://studio3t.com/knowledge-base/articles/create-mongodb-user/#add-the-new-user

MongoDB中文社区(微信公众号:mongoing-mongoing)
MongoDB中文社区(微信公众号:mongoing-mongoing)

用新用户进行登陆

>db.auth('juan','juanpwd') 1

给“test”数据库创建一个dbAdmin用户

代码语言:javascript
复制
> use admin
switched to db admin
db.createUser({ user : 'dbadminuser', pwd : 'dbadminuserpwd', roles : [ { role : 'dbAdmin', db : 'test' } ] })
Successfully added user: {
"user" : "dbadminuser",
"roles" : [
{
"role" : "dbAdmin",
"db" : "test"
}
]
}

创建一个角色,其中包含对’people’集合赋予’find’、’insert’、’update’和’remove’的操作权限,并且对’address’集合只有’find’的操作权限,它们都适用于测试数据库。

代码语言:javascript
复制
> use admin
switched to db admin

db.createRole({ role : 'testuser', privileges : [ { resource : { db : 'test', collection : 'people' }, actions : [ 'find', 'insert', 'update', 'remove' ] }, { resource : { db : 'test', collection : 'address' }, actions : [ 'find' ] } ], roles : [] })
{
"role" : "testuser",
"privileges" : [
{
"resource" : {
"db" : "test",
"collection" : "people"
},
"actions" : [
"find",
"insert",
"update",
"remove"
]
},
{
"resource" : {
"db" : "test",
"collection" : "address"
},
"actions" : [
"find"
]
}
],
"roles" : [ ]
}

在Studio 3T中创建MongoDB角色非常简单。选择数据库,单击“Roles”按钮,填写数据,就可以了。

延伸阅读:获取《角色管理器中可用的所有特权》的概述文章。 参考网址:https://studio3t.com/knowledge-base/articles/role-manager/

现在,我们将用如下角色来创建一个用户:

代码语言:javascript
复制
> use admin
db.createUser(
{ user : 'testuser',
pwd : 'testuserpwd',
roles : [ 'testuser' ]
}
)
Successfully added user: { "user" : "testuser", "roles" : [ "testuser" ] }

如果您不喜欢在命令行执行此操作,我们还可以通过Studio 3T MongoDB GUI给用户授予角色。

我们也希望能够监控我们的副本集:

代码语言:javascript
复制
> use admin

db.createUser(
{ user : 'monitoruser',
pwd : 'monitoruserpwd',
roles : [ 'clusterMonitor' ]
}
)
Successfully added user: { "user" : "monitoruser", "roles" : [ "clusterMonitor" ] }

现在我们需要一个用户来建立我们的副本集:

代码语言:javascript
复制
> use admin

db.createUser(
{ user : 'clustermanageruser',
pwd : 'clustermanageruserpwd',
roles : [ 'clusterManager' ]
}
)
Successfully added user: { "user" : "clustermanageruser", "roles" : [ "clusterManager" ] }

因此,我们需要给最后一个创建的用户进行身份认证授权,之后创建副本集。

代码语言:javascript
复制
> use admin

db.auth('clustermanageruser','clustermanageruserpwd')
1

用“clustermanageruser”用户连接服务器中一个节点

代码语言:javascript
复制
$ mongo admin -u clustermanageruser --authenticationDatabase admin -p
MongoDB shell version v3.4.16
Enter password:
connecting to: mongodb://127.0.0.1:27017/admin
MongoDB server version: 3.4.16

将剩余节点添加到复制集

代码语言:javascript
复制
studio3trs:PRIMARY> rs.add('secondary:27017')
{ "ok" : 1 }
studio3trs:PRIMARY> rs.addArb('arbiter:27017')
{ "ok" : 1 }
studio3trs:PRIMARY>

检查副本集的状态

studio3trs:PRIMARY> rs.status()

检查“testuser”用户的权限

代码语言:javascript
复制
studio3trs:PRIMARY> use admin
switched to db admin
studio3trs:PRIMARY> db.auth('testuser','testuserpwd')
1
studio3trs:PRIMARY> use test
switched to db test
studio3trs:PRIMARY> db.address.find()
studio3trs:PRIMARY> db.address.insert({ a : 1 })
WriteResult({
"writeError" : {
"code" : 13,
"errmsg" : "not authorized on test to execute command { insert: \"address\", documents: [ { _id: ObjectId('5b7215bcc1c1ef9b446c2c9b'), a: 1.0 } ], ordered: true }"
}
})
studio3trs:PRIMARY>
studio3trs:PRIMARY> db.people.insert({ a : 1 })
WriteResult({ "nInserted" : 1 })
studio3trs:PRIMARY> db.people.update({ a : 1 }, { $set : { b : 2 } })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
studio3trs:PRIMARY> db.people.find({ a : 1 })
{ "_id" : ObjectId("5b7215e5c1c1ef9b446c2c9c"), "a" : 1, "b" : 2 }
studio3trs:PRIMARY> db.people.remove({ a : 1 })
WriteResult({ "nRemoved" : 1 })
studio3trs:PRIMARY> db.people.find({ a : 1 })
studio3trs:PRIMARY>

总结

我们学习了MongoDB用户认证和授权,以及角色和用户的概念,并将角色分配给用户。我们已经知道如何在MongoDB中启用访问控制权限,如何管理用户和角色,以及如何使用localhost异常。我们现在能够使用各种方便的方法连接到数据库。我们讨论了最重要的内置角色,并且知道如何创建自己的自定义角色并将它们分配给用户。最后,我们将逐步介绍如何在一个新的包含三个数据的节点副本集中启用访问控制,如何利用localhost异常创建第一个用户,以及如何为用户创建所需的MongoDB角色。此外,我们还了解了如何通过使用诸如Studio 3T之类的MongoDB IDE来节省管理MongoDB用户管理和角色管理的时间。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Mongoing中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总结
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档