如何在 mongodb 配置文件中设置授权?

Posted

技术标签:

【中文标题】如何在 mongodb 配置文件中设置授权?【英文标题】:How to set authorization in mongodb config file? 【发布时间】:2014-10-09 02:43:52 【问题描述】:

我在服务器中运行mongod.exe,并在cmd.exe 中使用此选项:

mongod.exe --dbpath=path --auth

现在,如何在配置文件中执行此操作? 我的mongod.cfg

dbpath=D:\Program Files\MongoDB 2.6 Standard\data

security=
authorization= enabled

我得到这个错误:

解析 INI 配置文件时出错:未知选项安全性。

【问题讨论】:

Configuration File Options 我读了这个并使用 YAML 。但得到很多错误。我认为这适用于 unix 基础系统而不是 windows 它的工作。 dbpath=D:\Program Files\MongoDB 2.6 Standard\data auth=true docs.mongodb.org/manual/administration/configuration 【参考方案1】:

对于 mongod 2.4 版(ini 配置文件)

auth = true

https://docs.mongodb.com/v2.4/reference/configuration-options/#auth

对于 mongod 版本 2.6+(yaml 配置文件)

security:
    authorization: enabled

https://docs.mongodb.com/v3.2/reference/configuration-options/#security.authorization https://docs.mongodb.com/v3.0/reference/configuration-options/#security.authorization https://docs.mongodb.com/v2.6/reference/configuration-options/#security.authorization

【讨论】:

我在 v3.2.18 上遇到了问题。 --auth 工作的地方.. 但 security:authorization: enabled 没有,给了 UserNotFound。有什么想法吗? @codesmarter,你确定你的配置文件正在被使用吗?例如您在启动 mongod 时指定了 -f--config 选项,或者如果使用系统默认安装,则将配置文件放在正确的位置?您还可以检查您是否正在针对正确的数据库进行身份验证,并且该数据库具有您期望的用户(例如检查 db.getUsers() 的输出)。 谢谢,你说得对,配置是从不同的数据库中读取的。 如其他答案所述,正确的配置用引号括起来"enabled" @CarloRodríguez,作为 YAML,在这种情况下引号应该无关紧要。另见:***.com/questions/19109912/…【参考方案2】:

mongodb 3.2 版

这是正确的配置

security:
  authorization: "enabled"

使用引号,因为根据文档,该值是一个字符串

【讨论】:

在 3.2 中正确的做法,在 mongo.cfg 中设置这个值。 但这仍然无法解决我的问题***.com/questions/41973998/…【参考方案3】:
security:
   authorization: "enabled"

如上所述,这是正确的,需要注意的一点是,如果它仍然不起作用,请确保您没有使用选项卡作为授权行,它不会起作用,您只需要使用空格即可。

【讨论】:

没错,但是您必须检查日志,告诉您正在处理的 YAML 错误(解析 YAML 时出错)。还有一件事 - 从字符串授权开始有 2 个空格,如果没有,则 yaml 中的错误【参考方案4】:

只需要说一下

auth=true

您不需要任何其他选项!

【讨论】:

我更改了配置文件并将您的配置放入auth=true,当我执行mongo 时,我获得了免费访问权限。我需要做任何其他配置吗? 你能在更新后完全分享 mongod.cfg 吗?【参考方案5】:

如果你使用 YAML

security:
  authorization: "enabled"

为 2.6 或更高版本工作。

但如果你不使用 YAML。

auth: true

我正在使用 mongodb v3.0.2、v3.6.5、v4.0.3,这两个文件都可以正常工作。

INI 配置

# mongodb.conf

# Where to store the data.
dbpath=/var/lib/mongodb

#where to log
logpath=/var/log/mongodb/mongodb.log

logappend=true

bind_ip = 0.0.0.0
port = 27017

journal=true
auth = true

YAML 配置

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# Where and how to store data.
storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0


# how the process runs
processManagement:
  timeZoneInfo: /usr/share/zoneinfo

security:
  authorization: "enabled"

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options:

#auditLog:

#snmp:

【讨论】:

【参考方案6】:

在 DigitalOcean 上,您获得 3.6.3 版本,但带有 2.* 样式的配置文件。这在阅读上面所有的 cmets 时会让人感到困惑。

因此,与其遵循 DigitalOcean 安装 MongoDB 指南 (this one),不如阅读官方 MongoDB 指南 (this one)

【讨论】:

【参考方案7】:

他们聚会真的迟到了。

对我来说,以上都不起作用(在 Windows 上,在 Linux 上,“授权:启用”只要权限正确就可以正常工作)。 最终使用第三方服务管理器使用 --dbpath 和 --auth 选项创建了我自己的服务。像魅力一样工作。

我完全知道这不是一个直接的答案,但我希望这会对某人有所帮助。

不过,我不能使用“C:\Program Files\MongoDB\4.2\Server\data”文件夹。没有写权限。

【讨论】:

这不是答案。请把它作为一个新问题。【参考方案8】:
db.adminCommand(
    
        setParameter: 1, 
        security.authorization: "enabled" 
    
);

【讨论】:

【参考方案9】:

对我而言,导致故障/错误的关键因素已在 Robert Walters 响应中注明 - 在配置文件中使用 TAB。

将此更改为 4 个空格可解决问题,同时保持配置文件看起来整洁/可读。

【讨论】:

请不要将答案作为感谢其他用户的方式。简单地重申他的答案本身并不是一个答案。

以上是关于如何在 mongodb 配置文件中设置授权?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring 配置文件中设置 WebSSOProfileConsumerImpl

如何在 Nuxt 配置中设置 .env 文件路径?

如何在 INI 配置文件中设置布尔值?

如何在 PyCharm 中设置 ipython 配置文件

如何在 NestJS 中设置类似 Angular 的配置环境文件?

如何在模块导入/配置中设置 .env 变量