资讯专栏INFORMATION COLUMN

单台MongoDB如何设置鉴权

qylost / 2126人阅读

摘要:缺省是没有设置鉴权的,业界大部分使用的项目也没有设置访问权限。本文介绍如何在单台服务器上设置鉴权。类似的,为规划用户鉴权时,至少要规划两种角色用户管理员和数据库用户。缺省方式下是不进行鉴权检查的。

MongoDB 缺省是没有设置鉴权的,业界大部分使用 MongoDB 的项目也没有设置访问权限。这就意味着只要知道 MongoDB 服务器的端口,任何能访问到这台服务器的人都可以查询和操作 MongoDB 数据库的内容。在一些项目当中,这种使用方式会被看成是一种安全漏洞。

本文介绍如何在单台 MongoDB 服务器上设置鉴权。设置完后,MongoDB 客户端必须用正确的用户名和密码登录,才能在指定的数据库中操作。

首先介绍下 MongoDB 的用户和权限。每个数据库都有自己的用户,创建用户的命令是db.createUser()(文档),当你创建一个用户时,该用户就属于你当前所在的数据库。

每个用户包含三个要素:用户名、密码和角色列表。下面是一个例子:

{
    user: "dbuser",
    pwd : "dbpass",
    roles: ["readWrite", "clusterAdmin"]
}

这个例子表示一个名为dbuser的用户,它在当前的数据库中拥有 readWrite 和 clusterAdmin 两个角色。

MongoDB 内置了很多角色,但要注意,不是每个数据库的内置角色都一样。其中 admin 数据库就包含了一些其他数据库所没有的角色。

熟悉 Oracle 的童鞋们都知道,数据库用户有两种,一种是管理员,用来管理用户,一种是普通用户,用来访问数据。类似的,为 MongoDB 规划用户鉴权时,至少要规划两种角色:用户管理员和数据库用户。如果搭建了分片或主从,可能还会要规划数据库架构管理员的角色,它们专门用来调整数据库的分布式架构。

在创建用户之前,我们首先要修改 MongoDB 的启动方式。缺省方式下 MongoDB 是不进行鉴权检查的。我们只要在运行 MongoDB 的命令后面加上一个 --auth 参数即可,例如:

mongod --dbpath ./db1 --port 20000 --auth
如何创建用户管理员

用户管理员是第一个要创建的用户。在没有创建任何用户之前,你可以随意创建用户;但数据库中一旦有了用户,那么未登录的客户端就没有权限做任何操作了,除非使用db.auth(username, password)方法登录。

用户管理员的角色名叫 userAdminAnyDatabase,这个角色只能在 admin 数据库中创建。下面是一个例子:

> use admin
switched to db admin
> db.createUser({user:"root",pwd:"root123",roles:["userAdminAnyDatabase"]})
Successfully added user: { "user" : "root", "roles" : [ "userAdminAnyDatabase" ] }

这个例子创建了一个名为 root 的用户管理员。创建完了这个用户之后,我们应该马上以该用户的身份登录:

> db.auth("root","root123")
1

db.auth() 方法返回 1 表示登录成功。接下来我们为指定的数据库创建访问所需的账号。

如何创建数据库用户

首先保证你已经以用户管理员的身份登录 admin 数据库。然后用 use 命令切换到目标数据库,同样用 db.createUser() 命令来创建用户,其中角色名为 “readWrite”。

  

普通的数据库用户角色有两种,read 和 readWrite。顾名思义,前者只能读取数据不能修改,后者可以读取和修改。

下面是一个例子:

> use test
switched to db test
> db.createUser({user:"testuser",pwd:"testpass",roles:["readWrite"]})
Successfully added user: { "user" : "testuser", "roles" : [ "readWrite" ] }
> db.auth("testuser","testpass")
1

这样 MongoDB 的数据安全性就得到保障了,没有登录的客户端将无法执行任何命令。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/18743.html

相关文章

  • MongoDB主从和分片如何设置鉴权

    摘要:在前面一篇文章中,我介绍了如何在单台上设置鉴权,以防范对数据未经授权的访问。本文介绍在配置了主从和分片的情况下,如何为数据库添加鉴权。创建用户并赋予合适的角色这点参考前面的单台如何设置鉴权即可,使用客户端连上数据库,创建用户,过程完全一样。 在前面一篇文章中,我介绍了如何在单台 MongoDB 上设置鉴权,以防范对数据未经授权的访问。本文介绍在配置了主从(Replica Set)和分片...

    wslongchen 评论0 收藏0
  • MySQL成勒索新目标,数据服务基线安全问题迫在眉睫

    摘要:推荐理由基线安全问题往往可能会造成黑客劫持数据而勒索,另外基线安全问题已经成了漏洞之外入侵服务器的主要途径,特别是弱口令等情况。 推荐理由: 基线安全问题往往可能会造成黑客劫持数据而勒索,另外基线安全问题已经成了Web漏洞之外入侵服务器的主要途径,特别是弱口令等情况。这篇文章针对这一问题我觉得给大家打了预防针,如何避免MySQL成为下个数据勒索目标,所以在此推荐给大家,希望对大家有所帮...

    mumumu 评论0 收藏0
  • 如何利用秒级监控进行mongodb故障排查

    摘要:而阿里云自研的秒级监控系统已经可以做到秒点的真秒级粒度,全量指标采集无一疏漏甚至对曾经没有出现过的指标进行自动采集,实时数据展示。最后,秒级监控已经在阿里云控制台开放,云的用户可以自主进行监控开启,体验秒级监控带来的高清体验。 在我们平时的数据库使用当中,监控系统,作为排查故障,告警故障的重要辅助系统,对dba、运维、业务开发同学进行问题诊断、排查、分析有着重要的作用。并且一个监控系统...

    miguel.jiang 评论0 收藏0
  • 如何利用秒级监控进行mongodb故障排查

    摘要:而阿里云自研的秒级监控系统已经可以做到秒点的真秒级粒度,全量指标采集无一疏漏甚至对曾经没有出现过的指标进行自动采集,实时数据展示。最后,秒级监控已经在阿里云控制台开放,云的用户可以自主进行监控开启,体验秒级监控带来的高清体验。 在我们平时的数据库使用当中,监控系统,作为排查故障,告警故障的重要辅助系统,对dba、运维、业务开发同学进行问题诊断、排查、分析有着重要的作用。并且一个监控系统...

    kyanag 评论0 收藏0
  • 如何利用秒级监控进行mongodb故障排查

    摘要:而阿里云自研的秒级监控系统已经可以做到秒点的真秒级粒度,全量指标采集无一疏漏甚至对曾经没有出现过的指标进行自动采集,实时数据展示。最后,秒级监控已经在阿里云控制台开放,云的用户可以自主进行监控开启,体验秒级监控带来的高清体验。 在我们平时的数据库使用当中,监控系统,作为排查故障,告警故障的重要辅助系统,对dba、运维、业务开发同学进行问题诊断、排查、分析有着重要的作用。并且一个监控系统...

    Taonce 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<