为mongo_orm添加用户到mongo数据库的说明

你不希望你的Web应用程序使用你的数据库管理员用户访问数据库。此外,你希望它只访问 一个具体的 数据库 - 也许你有额外的数据库在你的mongo实例中运行。

先决条件。

mongo_orm 希望将数据库配置作为环境变量或作为你项目中的 config/database.yml 文件。

config/database.yml文件看起来像这样。

数据库_url: mongodb://janet:test@hostname:27017
DB_name: dbname

而27017是mongo的默认端口号--如果你把它设置成其他的,请改变它。

用户是 "Janet"

而密码在这个例子中是 "test"。

在mongo实例上创建一个新用户,使用mongo控制台

登录到你的mongo实例。运行命令mongo。

蒙哥

(我假设你的mongo实例在默认端口绑定到localhost)。

这将给你一个mongo控制台。

重要的是!你需要改变到管理数据库来进行认证

使用管理

db.auth("admin","")

将改为你设置的管理密码。请无视WordPress改变引号的愚蠢习惯。 这些都应该是正常的双引号.

重要的是。做到 不是 改变数据库为目标数据库,以创建新的用户!留在管理数据库上!

db.createUser(

{

用户。"janet"。

pwd:"test",

角色。[{ role: "readWrite", db: "dbname" }]。

passwordDigestor:"服务器"。

机制。[“SCRAM-SHA-1″,”SCRAM-SHA-256”]

}

)

注意:两种机制都需要!如果你只指定SCRAM-SHA-256,mongo orm将无法登录。

passwordDigestor必须是 "服务器"。它 不能 为真。请注意,mongo控制台和mongo API之间似乎有区别。(在mongo API中,你会使用digestPassword: true

这将给用户janet和密码测试提供dbname的读写角色。

在此阅读更多关于角色的信息.

删除一个用户

使用管理

db.dropUser("janet")

调试

https://github.com/Studio3T/robomongo/issues/1041

Robo T3似乎不能正常创建用户,使用我上面的控制台方法。

(然而,它能够创建数据库)。

形象

正如对话中所说,你不能通过Robo T3或Mongo控制台使用digestPassword。请使用 passwordDigestor:"server "代替。在任何情况下,Robo T3似乎不能正确创建用户 - 使用控制台。

db.serverStatus()

如果这个命令给你。

> db.serverStatus()

{

"ok" : 0。

"errmsg" : "命令serverStatus需要认证"。

"代码":13。

"codeName" : "Unauthorized"

}

那么你就没有登录--当你登录时,它将显示一长串关于你的服务器的信息。

太多的用户被认证了

2019-02-09T13:53:09.972+0000 E QUERY [js] Error: couldn't add user: too many users are authenticated

_getErrorWithCode@src/mongo/shell/utils.js:25:13

DB.prototype.createUser@src/mongo/shell/db.js:1491:15

如果你开始以其他用户身份认证来测试登录,就会发生这种情况。从控制台退出,再次登录,在创建新用户之前只以管理员身份认证一次。

认证失败

信息。'域名。1,代码。11,认证失败。

如果mongo orm不能认证,你会从mongo orm得到这个错误代码。抵制简单地以管理员身份使用数据库的冲动。重新阅读我在这里给出的信息。确保。

  • 你使用mongo控制台创建新用户
  • 你已经指定了SCRAM-SHA-1
  • 该用户在管理数据库中被创建("使用管理" !!)
  • 你已经正确设置了角色