首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用用户名和密码保护MongoDB

如何使用用户名和密码保护MongoDB
EN

Stack Overflow用户
提问于 2011-02-03 07:35:52
回答 18查看 504K关注 0票数 416

我想为我的MongoDB实例设置用户名和密码身份验证,这样任何远程访问都会询问用户名和密码。我尝试了MongoDB站点上的教程,并执行了以下操作:

use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');

在那之后,我退出并再次运行mongo。而且我不需要密码就能访问它。即使我远程连接到数据库,也不会提示我输入用户名和密码。

更新这里是我最终使用的解决方案

1) At the mongo command line, set the administrator:

    use admin;
    db.addUser('admin','123456');

2) Shutdown the server and exit

    db.shutdownServer();
    exit

3) Restart mongod with --auth

  $ sudo ./mongodb/bin/mongod --auth --dbpath /mnt/db/

4) Run mongo again in 2 ways:

   i) run mongo first then login:

        $ ./mongodb/bin/mongo localhost:27017
        use admin
        db.auth('admin','123456');

  ii) run & login to mongo in command line.

        $ ./mongodb/bin/mongo localhost:27017/admin -u admin -p 123456

用户名和密码对mongodumpmongoexport的作用相同。

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2011-02-03 07:54:40

在设置用户后,您需要使用--auth选项启动mongod

从MongoDB站点:

使用--auth选项运行数据库(

进程)以启用安全性。在使用--auth启动服务器之前,您必须已将用户添加到管理员数据库,或者从本地主机界面添加第一个用户。

MongoDB Authentication

票数 133
EN

Stack Overflow用户

发布于 2017-03-21 22:25:25

这里有这么多复杂/令人困惑的答案。

这是从v3.4开始的。

简短的回答。

1)不带访问控制启动MongoDB。

mongod --dbpath /data/db

2)连接实例。

mongo

3)创建用户。

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)

4)停止MongoDB实例,并使用访问控制重新启动。

mongod --auth --dbpath /data/db

5)以用户身份进行连接和认证。

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})

长篇答案:如果你想正确理解,请阅读本文。

真的很简单。我将把下面的代码简化为https://docs.mongodb.com/manual/tutorial/enable-authentication/

如果你想了解更多关于这些角色的实际作用,请阅读此处:

1)不带访问控制启动MongoDB。

mongod --dbpath /data/db

2)连接实例。

mongo

3)创建用户管理员。下面将在admin身份验证数据库中创建一个用户管理员。用户是some_db数据库而不是admin数据库上的dbOwner,记住这一点很重要。

use admin
db.createUser(
  {
    user: "myDbOwner",
    pwd: "abc123",
    roles: [ { role: "dbOwner", db: "some_db" } ]
  }
)

或者,如果您想创建一个对任何数据库都是admin的admin:

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

4)停止MongoDB实例,并使用访问控制重新启动。

mongod --auth --dbpath /data/db

5)以用户管理员身份连接到admin身份验证数据库,而不是some_db身份验证数据库,并进行身份验证。用户管理员是在admin身份验证数据库中创建的,该用户在some_db身份验证数据库中不存在。

use admin
db.auth("myDbOwner", "abc123")

现在,您已作为some_db数据库上的dbOwner进行身份验证。因此,现在如果您希望直接对some_db数据库进行读/写/执行操作,您可以更改为它。

use some_db
//...do stuff like db.foo.insert({x:1})
// remember that the user administrator had dbOwner rights so the user may write/read, if you create a user with userAdmin they will not be able to read/write for example.

有关角色的更多信息:https://docs.mongodb.com/manual/reference/built-in-roles/

如果您希望创建其他用户,这些用户不是用户管理员,而只是普通用户,请继续阅读下面的内容。

6)创建普通用户。此用户将在下面的some_db身份验证数据库中创建。

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)

7)退出mongo shell,重新连接,以用户身份认证。

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
票数 109
EN

Stack Overflow用户

发布于 2013-11-04 21:38:04

首先,取消注释mongod配置文件(默认路径/etc/mongod.conf)中以#auth=true开头的行。这将启用mongodb的身份验证。

然后重启mongodb:sudo service mongod restart

票数 70
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4881208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档